From 37c465dbc3a2027fd371b892bfa572aa0ce9e1bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Thu, 3 Sep 2026 11:54:59 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A8=B3=E5=AE=9A=E7=BC=96=E8=BE=91=E5=99=A8?= =?UTF-8?q?=E5=BF=AB=E6=8D=B7=E9=94=AE=E7=9B=91=E5=90=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 按稳定的撤销重做回调绑定全局监听\n尊重已被其他处理器阻止的键盘事件 --- apps/ai-game-creator-shell/src/view/ui-editor/index.tsx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/apps/ai-game-creator-shell/src/view/ui-editor/index.tsx b/apps/ai-game-creator-shell/src/view/ui-editor/index.tsx index da336c2af..a4c3f8220 100644 --- a/apps/ai-game-creator-shell/src/view/ui-editor/index.tsx +++ b/apps/ai-game-creator-shell/src/view/ui-editor/index.tsx @@ -77,6 +77,8 @@ export default function UiEditorPage({ Boolean(session.save.loadError) || session.save.persistedRevision === null || session.save.isLocked; + const historyUndo = session.history.undo; + const historyRedo = session.history.redo; useEffect(() => { if (session.save.isDirty) setGenerateSuccess(null); @@ -92,6 +94,7 @@ export default function UiEditorPage({ }; const onKeyDown = (event: KeyboardEvent) => { if ( + event.defaultPrevented || isEditableTarget(event.target) || (!event.ctrlKey && !event.metaKey) ) { @@ -101,15 +104,15 @@ export default function UiEditorPage({ const isRedo = (event.key.toLowerCase() === 'z' && event.shiftKey) || (event.ctrlKey && event.key.toLowerCase() === 'y'); - if (isUndo && session.history.undo()) { + if (isUndo && historyUndo()) { event.preventDefault(); - } else if (isRedo && session.history.redo()) { + } else if (isRedo && historyRedo()) { event.preventDefault(); } }; window.addEventListener('keydown', onKeyDown); return () => window.removeEventListener('keydown', onKeyDown); - }, [session.history]); + }, [historyRedo, historyUndo]); async function save(afterReturn = false) { if (await session.save.save()) {