|
3992 | 3992 | } |
3993 | 3993 |
|
3994 | 3994 | function handleKeyDown(event: KeyboardEvent): void { |
| 3995 | + const nativeTextTarget = isNativeTextTarget(event.target) |
| 3996 | +
|
3995 | 3997 | // Cmd/Ctrl+Z: Undo |
3996 | 3998 | if ((event.metaKey || event.ctrlKey) && !event.shiftKey && event.key.toLowerCase() === 'z') { |
3997 | | - if (!isNativeTextTarget(event.target) && !activeTextObject?.isEditing) { |
| 3999 | + if (!nativeTextTarget && !activeTextObject?.isEditing) { |
3998 | 4000 | event.preventDefault() |
3999 | 4001 | performUndo() |
4000 | 4002 | return |
|
4006 | 4008 | ((event.metaKey || event.ctrlKey) && event.shiftKey && event.key.toLowerCase() === 'z') || |
4007 | 4009 | (event.ctrlKey && !event.metaKey && !event.shiftKey && event.key.toLowerCase() === 'y') |
4008 | 4010 | ) { |
4009 | | - if (!isNativeTextTarget(event.target) && !activeTextObject?.isEditing) { |
| 4011 | + if (!nativeTextTarget && !activeTextObject?.isEditing) { |
4010 | 4012 | event.preventDefault() |
4011 | 4013 | performRedo() |
4012 | 4014 | return |
|
4022 | 4024 |
|
4023 | 4025 | // Cmd/Ctrl+A: Select all objects on the canvas (unless editing text) |
4024 | 4026 | if ((event.metaKey || event.ctrlKey) && event.key === 'a') { |
4025 | | - // Don't intercept if user is editing text - let them select text normally |
4026 | | - if (activeTextObject && activeTextObject.isEditing) { |
| 4027 | + // Don't intercept if user is editing text - let them select text normally. |
| 4028 | + if (nativeTextTarget || (activeTextObject && activeTextObject.isEditing)) { |
4027 | 4029 | return |
4028 | 4030 | } |
4029 | 4031 |
|
|
4041 | 4043 |
|
4042 | 4044 | // Cmd/Ctrl+Backspace: Delete current slide (not while editing text, not last slide) |
4043 | 4045 | if ((event.metaKey || event.ctrlKey) && event.key === 'Backspace') { |
4044 | | - if ( |
4045 | | - !isNativeTextTarget(event.target) && |
4046 | | - !activeTextObject?.isEditing && |
4047 | | - appState.currentSlide |
4048 | | - ) { |
| 4046 | + if (!nativeTextTarget && !activeTextObject?.isEditing && appState.currentSlide) { |
4049 | 4047 | event.preventDefault() |
4050 | 4048 | deleteSlideById(appState.currentSlide.id) |
4051 | 4049 | return |
|
4054 | 4052 |
|
4055 | 4053 | // Delete/Backspace: Delete selected object (but not while editing text) |
4056 | 4054 | if (event.key === 'Delete' || event.key === 'Backspace') { |
4057 | | - // Don't delete object if user is editing text content |
4058 | | - if (activeTextObject && activeTextObject.isEditing) { |
| 4055 | + // Let native form fields handle text deletion/editing themselves. |
| 4056 | + if (nativeTextTarget || (activeTextObject && activeTextObject.isEditing)) { |
4059 | 4057 | return |
4060 | 4058 | } |
4061 | 4059 | event.preventDefault() |
|
0 commit comments