|
9 | 9 | import {BlockSvg} from './block_svg.js'; |
10 | 10 | import * as clipboard from './clipboard.js'; |
11 | 11 | import * as eventUtils from './events/utils.js'; |
| 12 | +import {getFocusManager} from './focus_manager.js'; |
12 | 13 | import {Gesture} from './gesture.js'; |
13 | 14 | import { |
14 | 15 | ICopyable, |
@@ -72,7 +73,9 @@ export function registerDelete() { |
72 | 73 | focused != null && |
73 | 74 | isIDeletable(focused) && |
74 | 75 | focused.isDeletable() && |
75 | | - !Gesture.inProgress() |
| 76 | + !Gesture.inProgress() && |
| 77 | + // Don't delete the block if a field editor is open |
| 78 | + !getFocusManager().ephemeralFocusTaken() |
76 | 79 | ); |
77 | 80 | }, |
78 | 81 | callback(workspace, e, shortcut, scope) { |
@@ -152,7 +155,8 @@ export function registerCopy() { |
152 | 155 | !workspace.isReadOnly() && |
153 | 156 | !Gesture.inProgress() && |
154 | 157 | !!focused && |
155 | | - isCopyable(focused) |
| 158 | + isCopyable(focused) && |
| 159 | + !getFocusManager().ephemeralFocusTaken() |
156 | 160 | ); |
157 | 161 | }, |
158 | 162 | callback(workspace, e, shortcut, scope) { |
@@ -199,7 +203,8 @@ export function registerCut() { |
199 | 203 | isCopyable(focused) && |
200 | 204 | // Extra criteria for cut (not just copy): |
201 | 205 | !focused.workspace.isFlyout && |
202 | | - focused.isDeletable() |
| 206 | + focused.isDeletable() && |
| 207 | + !getFocusManager().ephemeralFocusTaken() |
203 | 208 | ); |
204 | 209 | }, |
205 | 210 | callback(workspace, e, shortcut, scope) { |
@@ -246,7 +251,11 @@ export function registerPaste() { |
246 | 251 | const pasteShortcut: KeyboardShortcut = { |
247 | 252 | name: names.PASTE, |
248 | 253 | preconditionFn(workspace) { |
249 | | - return !workspace.isReadOnly() && !Gesture.inProgress(); |
| 254 | + return ( |
| 255 | + !workspace.isReadOnly() && |
| 256 | + !Gesture.inProgress() && |
| 257 | + !getFocusManager().ephemeralFocusTaken() |
| 258 | + ); |
250 | 259 | }, |
251 | 260 | callback(workspace: WorkspaceSvg, e: Event) { |
252 | 261 | if (!copyData || !copyWorkspace) return false; |
@@ -305,7 +314,11 @@ export function registerUndo() { |
305 | 314 | const undoShortcut: KeyboardShortcut = { |
306 | 315 | name: names.UNDO, |
307 | 316 | preconditionFn(workspace) { |
308 | | - return !workspace.isReadOnly() && !Gesture.inProgress(); |
| 317 | + return ( |
| 318 | + !workspace.isReadOnly() && |
| 319 | + !Gesture.inProgress() && |
| 320 | + !getFocusManager().ephemeralFocusTaken() |
| 321 | + ); |
309 | 322 | }, |
310 | 323 | callback(workspace, e) { |
311 | 324 | // 'z' for undo 'Z' is for redo. |
@@ -340,7 +353,11 @@ export function registerRedo() { |
340 | 353 | const redoShortcut: KeyboardShortcut = { |
341 | 354 | name: names.REDO, |
342 | 355 | preconditionFn(workspace) { |
343 | | - return !Gesture.inProgress() && !workspace.isReadOnly(); |
| 356 | + return ( |
| 357 | + !Gesture.inProgress() && |
| 358 | + !workspace.isReadOnly() && |
| 359 | + !getFocusManager().ephemeralFocusTaken() |
| 360 | + ); |
344 | 361 | }, |
345 | 362 | callback(workspace, e) { |
346 | 363 | // 'z' for undo 'Z' is for redo. |
|
0 commit comments