Skip to content

Commit 9130145

Browse files
authored
fix: Handle shortcuts being triggered on non-main workspace. (#598)
* fix: Handle shortcuts being triggered on non-main workspace. * chore: Satisfy the linter. * chore: Remove unneeded cast.
1 parent 979ef10 commit 9130145

File tree

6 files changed

+33
-25
lines changed

6 files changed

+33
-25
lines changed

src/actions/action_menu.ts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,8 @@ export class ActionMenu {
5454
callback: (workspace) => {
5555
switch (this.navigation.getState(workspace)) {
5656
case Constants.STATE.WORKSPACE:
57+
case Constants.STATE.FLYOUT:
5758
return this.openActionMenu(workspace);
58-
case Constants.STATE.FLYOUT: {
59-
const flyoutWorkspace = workspace.getFlyout()?.getWorkspace();
60-
if (flyoutWorkspace) {
61-
return this.openActionMenu(flyoutWorkspace);
62-
}
63-
return false;
64-
}
6559
default:
6660
return false;
6761
}

src/actions/arrow_navigation.ts

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,9 @@ export class ArrowNavigation {
5959
shortcut: ShortcutRegistry.KeyboardShortcut,
6060
): boolean => {
6161
const toolbox = workspace.getToolbox() as Toolbox;
62-
const flyout = workspace.getFlyout();
62+
const flyout = workspace.isFlyout
63+
? workspace.targetWorkspace?.getFlyout()
64+
: workspace.getFlyout();
6365
let isHandled = false;
6466
switch (this.navigation.getState(workspace)) {
6567
case Constants.STATE.WORKSPACE:
@@ -91,7 +93,9 @@ export class ArrowNavigation {
9193
e: Event,
9294
shortcut: ShortcutRegistry.KeyboardShortcut,
9395
): boolean => {
94-
const toolbox = workspace.getToolbox() as Toolbox;
96+
const toolbox = workspace.isFlyout
97+
? workspace.targetWorkspace?.getToolbox()
98+
: workspace.getToolbox();
9599
let isHandled = false;
96100
switch (this.navigation.getState(workspace)) {
97101
case Constants.STATE.WORKSPACE:
@@ -156,8 +160,6 @@ export class ArrowNavigation {
156160
this.navigation.canCurrentlyNavigate(workspace),
157161
callback: (workspace, e, shortcut) => {
158162
keyboardNavigationController.setIsActive(true);
159-
const toolbox = workspace.getToolbox() as Toolbox;
160-
const flyout = workspace.getFlyout();
161163
let isHandled = false;
162164
switch (this.navigation.getState(workspace)) {
163165
case Constants.STATE.WORKSPACE:
@@ -175,14 +177,19 @@ export class ArrowNavigation {
175177
return isHandled;
176178
case Constants.STATE.FLYOUT:
177179
isHandled = this.fieldShortcutHandler(workspace, shortcut);
178-
if (!isHandled && flyout) {
179-
if (!this.navigation.defaultFlyoutCursorIfNeeded(workspace)) {
180-
flyout.getWorkspace()?.getCursor()?.next();
180+
if (!isHandled && workspace.targetWorkspace) {
181+
if (
182+
!this.navigation.defaultFlyoutCursorIfNeeded(
183+
workspace.targetWorkspace,
184+
)
185+
) {
186+
workspace.getCursor()?.next();
181187
}
182188
isHandled = true;
183189
}
184190
return isHandled;
185-
case Constants.STATE.TOOLBOX:
191+
case Constants.STATE.TOOLBOX: {
192+
const toolbox = workspace.getToolbox() as Toolbox;
186193
if (toolbox) {
187194
if (!toolbox.getSelectedItem()) {
188195
const firstItem =
@@ -201,6 +208,7 @@ export class ArrowNavigation {
201208
}
202209
}
203210
return isHandled;
211+
}
204212
default:
205213
return false;
206214
}
@@ -214,8 +222,6 @@ export class ArrowNavigation {
214222
this.navigation.canCurrentlyNavigate(workspace),
215223
callback: (workspace, e, shortcut) => {
216224
keyboardNavigationController.setIsActive(true);
217-
const flyout = workspace.getFlyout();
218-
const toolbox = workspace.getToolbox() as Toolbox;
219225
let isHandled = false;
220226
switch (this.navigation.getState(workspace)) {
221227
case Constants.STATE.WORKSPACE:
@@ -234,19 +240,20 @@ export class ArrowNavigation {
234240
return isHandled;
235241
case Constants.STATE.FLYOUT:
236242
isHandled = this.fieldShortcutHandler(workspace, shortcut);
237-
if (!isHandled && flyout) {
243+
if (!isHandled && workspace.targetWorkspace) {
238244
if (
239245
!this.navigation.defaultFlyoutCursorIfNeeded(
240-
workspace,
246+
workspace.targetWorkspace,
241247
'last',
242248
)
243249
) {
244-
flyout.getWorkspace()?.getCursor()?.prev();
250+
workspace.getCursor()?.prev();
245251
}
246252
isHandled = true;
247253
}
248254
return isHandled;
249-
case Constants.STATE.TOOLBOX:
255+
case Constants.STATE.TOOLBOX: {
256+
const toolbox = workspace.getToolbox() as Toolbox;
250257
if (toolbox) {
251258
// @ts-expect-error private method
252259
isHandled = toolbox.selectPrevious();
@@ -256,6 +263,7 @@ export class ArrowNavigation {
256263
}
257264
}
258265
return isHandled;
266+
}
259267
default:
260268
return false;
261269
}

src/actions/enter.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,16 @@ export class EnterAction {
6767
this.handleEnterForWS(workspace);
6868
return true;
6969
case Constants.STATE.FLYOUT:
70-
flyoutCursor = this.navigation.getFlyoutCursor(workspace);
70+
if (!workspace.targetWorkspace) return false;
71+
flyoutCursor = this.navigation.getFlyoutCursor(
72+
workspace.targetWorkspace,
73+
);
7174
if (!flyoutCursor) {
7275
return false;
7376
}
7477
curNode = flyoutCursor.getCurNode();
7578
if (curNode instanceof BlockSvg) {
76-
this.insertFromFlyout(workspace);
79+
this.insertFromFlyout(workspace.targetWorkspace);
7780
} else if (curNode instanceof FlyoutButton) {
7881
this.triggerButtonCallback(workspace);
7982
}

src/actions/exit.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ export class ExitAction {
3434
switch (this.navigation.getState(workspace)) {
3535
case Constants.STATE.FLYOUT:
3636
case Constants.STATE.TOOLBOX:
37-
getFocusManager().focusTree(workspace);
37+
getFocusManager().focusTree(workspace.targetWorkspace ?? workspace);
3838
if (!Gesture.inProgress()) {
3939
workspace.hideChaff();
4040
}

src/navigation_controller.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,9 @@ export class NavigationController {
203203
switch (this.navigation.getState(workspace)) {
204204
case Constants.STATE.WORKSPACE:
205205
Blockly.getFocusManager().focusTree(
206-
workspace.getToolbox() ?? workspace.getFlyout() ?? workspace,
206+
workspace.getToolbox() ??
207+
workspace.getFlyout()?.getWorkspace() ??
208+
workspace,
207209
);
208210
return true;
209211
default:

test/webdriverio/test/flyout_test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ suite('Toolbox and flyout test', function () {
138138

139139
test('Tabbing to the workspace should close the flyout', async function () {
140140
await tabNavigateToWorkspace(this.browser);
141+
await this.browser.pause(PAUSE_TIME);
141142

142143
// The flyout should be closed since it lost focus.
143144
const flyoutIsOpen = await checkIfFlyoutIsOpen(this.browser);

0 commit comments

Comments
 (0)