KeyTips: the File tab drills into whatever its request opens (Backstage window/menu, context menu) - #79
Merged
Conversation
…the Backstage window or menu, or its context menu Maintainer, 2026-09-12: KeyTips didn't play well with Backstage, and the ribbon can't fix that alone — it never sees its Backstage, only whether BackstageRequested was handled. The File tab is now a DrillPopup with no builder of its own: the controller snapshots the surface stack before the reveal and builds the next level over the surface the reveal added (a FullScreen Backstage window, a Menu-mode popup, or the tab's context menu when the request goes unhandled) — the destinations badged by their header mnemonics — and that level's Esc retract closes that surface. A request that opens nothing ends as an activation (exit), as before. OnActiveWindowChanged no longer exits blindly: it stays while a build is parked (the reveal just opened the window; the build is parked BEFORE the reveal so the change is seen as expected), pops to a held level when a window on the stack closed (Esc, the Backstage's own back button) via the surface sync that now covers windows as well as popups, and exits only for an unrelated window. The develop-side Post(TryPopLevel + Exit) workaround is gone. KeyTipBackstageTests: FullScreen and Menu drills, destination badge selects and exits, Esc returns to the ribbon level with the overlay up, the Backstage's own back pops the level. Bars 332 green. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013qbF5ru6uh5w7fqhP3yoPE
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up on the same branch as #78 (merged). Closes the queued "KeyTips vs Backstage" item.
The ribbon can't fix this alone — it never sees its Backstage, only whether
BackstageRequestedwas handled. So the File tab is now aDrillPopupwith no builder of its own: the controller snapshots the surface stack before the reveal and builds the next level over the surface the reveal added — a FullScreen Backstage window, a Menu-mode popup, or the tab's context menu when the request goes unhandled — with the destinations badged by their header mnemonics, and that level's Esc retract closes that surface. A request that opens nothing ends as an activation (exit), as before.OnActiveWindowChangedno longer exits blindly: it stays while a build is parked (the build is parked before the reveal so the window change is seen as expected), pops to a held level when a window on the stack closed (Esc, the Backstage's own ◂) — the surface sync now covers windows as well as popups — and exits only for an unrelated window. The develop-sidePost(TryPopLevel + Exit)workaround is gone.Tests (
KeyTipBackstageTests): FullScreen and Menu drills, a destination badge selects and exits, Esc returns to the ribbon level with the overlay still up, the Backstage's own back pops the level; the existing File-tab test now waits out the bounded retries for the nothing-opened case. Bars 332 green.🤖 Generated with Claude Code
https://claude.ai/code/session_013qbF5ru6uh5w7fqhP3yoPE