Skip to content

Commit 08839a4

Browse files
committed
fix: Handle shortcuts being triggered on non-main workspace.
1 parent 7c8dff9 commit 08839a4

File tree

6 files changed

+29
-23
lines changed

6 files changed

+29
-23
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: 18 additions & 12 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() as Toolbox);
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;
185191
case Constants.STATE.TOOLBOX:
192+
const toolbox = workspace.getToolbox() as Toolbox;
186193
if (toolbox) {
187194
if (!toolbox.getSelectedItem()) {
188195
const firstItem =
@@ -214,8 +221,6 @@ export class ArrowNavigation {
214221
this.navigation.canCurrentlyNavigate(workspace),
215222
callback: (workspace, e, shortcut) => {
216223
keyboardNavigationController.setIsActive(true);
217-
const flyout = workspace.getFlyout();
218-
const toolbox = workspace.getToolbox() as Toolbox;
219224
let isHandled = false;
220225
switch (this.navigation.getState(workspace)) {
221226
case Constants.STATE.WORKSPACE:
@@ -234,19 +239,20 @@ export class ArrowNavigation {
234239
return isHandled;
235240
case Constants.STATE.FLYOUT:
236241
isHandled = this.fieldShortcutHandler(workspace, shortcut);
237-
if (!isHandled && flyout) {
242+
if (!isHandled && workspace.targetWorkspace) {
238243
if (
239244
!this.navigation.defaultFlyoutCursorIfNeeded(
240-
workspace,
245+
workspace.targetWorkspace,
241246
'last',
242247
)
243248
) {
244-
flyout.getWorkspace()?.getCursor()?.prev();
249+
workspace.getCursor()?.prev();
245250
}
246251
isHandled = true;
247252
}
248253
return isHandled;
249254
case Constants.STATE.TOOLBOX:
255+
const toolbox = workspace.getToolbox() as Toolbox;
250256
if (toolbox) {
251257
// @ts-expect-error private method
252258
isHandled = toolbox.selectPrevious();

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)