Keep workspace focus mode scoped and easy to exit (#2151)
* fix(workspace): keep focus mode scoped and easy to exit Route focus mode through the active workspace so persisted state cannot hide chrome on settings or other screens. Add a visible exit control and keep desktop window chrome aligned and visually quiet. * fix(app): clarify muted chrome semantics
This commit is contained in:
@@ -25,6 +25,7 @@ export type KeyboardActionId =
|
||||
| "workspace.pane.move-tab.up"
|
||||
| "workspace.pane.move-tab.down"
|
||||
| "workspace.pane.close"
|
||||
| "workspace.focus.toggle"
|
||||
| "workspace.terminal.new"
|
||||
| "sidebar.toggle.right"
|
||||
| "workspace.new"
|
||||
@@ -57,6 +58,7 @@ export type KeyboardActionDefinition =
|
||||
| { id: "workspace.pane.move-tab.up"; scope: KeyboardActionScope }
|
||||
| { id: "workspace.pane.move-tab.down"; scope: KeyboardActionScope }
|
||||
| { id: "workspace.pane.close"; scope: KeyboardActionScope }
|
||||
| { id: "workspace.focus.toggle"; scope: KeyboardActionScope }
|
||||
| { id: "workspace.terminal.new"; scope: KeyboardActionScope }
|
||||
| { id: "sidebar.toggle.right"; scope: KeyboardActionScope }
|
||||
| { id: "workspace.new"; scope: KeyboardActionScope }
|
||||
|
||||
@@ -47,6 +47,7 @@ describe("routeKeyboardShortcut — dispatch passthroughs", () => {
|
||||
["workspace.pane.move-tab.up", { id: "workspace.pane.move-tab.up", scope: "workspace" }],
|
||||
["workspace.pane.move-tab.down", { id: "workspace.pane.move-tab.down", scope: "workspace" }],
|
||||
["workspace.pane.close", { id: "workspace.pane.close", scope: "workspace" }],
|
||||
["view.toggle.focus", { id: "workspace.focus.toggle", scope: "workspace" }],
|
||||
])("%s → dispatch %j", (action, expected) => {
|
||||
expect(routeKeyboardShortcut({ action, payload: null }, makeCtx())).toEqual({
|
||||
kind: "dispatch",
|
||||
@@ -333,7 +334,6 @@ describe("routeKeyboardShortcut — callbacks and pickers", () => {
|
||||
it.each([
|
||||
["sidebar.toggle.left", "toggle-agent-list"],
|
||||
["sidebar.toggle.both", "toggle-both-sidebars"],
|
||||
["view.toggle.focus", "toggle-focus-mode"],
|
||||
["theme.cycle", "cycle-theme"],
|
||||
] as const)("%s → callback %s", (action, name) => {
|
||||
expect(routeKeyboardShortcut({ action, payload: null }, makeCtx())).toEqual<ShortcutAction>({
|
||||
|
||||
@@ -20,11 +20,7 @@ export interface ShortcutRoutingInput {
|
||||
payload: KeyboardShortcutPayload;
|
||||
}
|
||||
|
||||
export type ShortcutCallbackName =
|
||||
| "toggle-agent-list"
|
||||
| "toggle-both-sidebars"
|
||||
| "toggle-focus-mode"
|
||||
| "cycle-theme";
|
||||
export type ShortcutCallbackName = "toggle-agent-list" | "toggle-both-sidebars" | "cycle-theme";
|
||||
|
||||
export type ShortcutAction =
|
||||
| { kind: "none" }
|
||||
@@ -63,12 +59,12 @@ const PASSTHROUGH_DISPATCH: Record<string, KeyboardActionDefinition> = {
|
||||
"workspace.pane.move-tab.up": { id: "workspace.pane.move-tab.up", scope: "workspace" },
|
||||
"workspace.pane.move-tab.down": { id: "workspace.pane.move-tab.down", scope: "workspace" },
|
||||
"workspace.pane.close": { id: "workspace.pane.close", scope: "workspace" },
|
||||
"view.toggle.focus": { id: "workspace.focus.toggle", scope: "workspace" },
|
||||
};
|
||||
|
||||
const SIMPLE_CALLBACKS: Record<string, ShortcutCallbackName> = {
|
||||
"sidebar.toggle.left": "toggle-agent-list",
|
||||
"sidebar.toggle.both": "toggle-both-sidebars",
|
||||
"view.toggle.focus": "toggle-focus-mode",
|
||||
"theme.cycle": "cycle-theme",
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user