From 0e2e2fb0e602ec2940ca5290eb31f99c61c0b28e Mon Sep 17 00:00:00 2001 From: Msystech Date: Thu, 13 Aug 2026 16:19:41 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B2=80=EC=A6=9D=20=EC=8B=A4=ED=96=89?= =?UTF-8?q?=EC=97=90=20Ctrl+Enter=20=EC=B6=94=EA=B0=80=20=E2=80=94=20?= =?UTF-8?q?=EB=8B=A8=EC=B6=95=ED=82=A4=EB=A5=BC=20=EC=84=A0=EC=96=B8?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EC=98=AE=EA=B2=BC=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ctrl+Enter 로도 검증이 돌게 했다(F5 는 그대로 남는다). ■ PreviewKeyDown 대신 KeyBinding 으로 처음에는 PreviewKeyDown 에서 Keyboard.Modifiers 를 읽어 처리했는데, 그 경로는 검사할 수가 없다 — Keyboard.Modifiers 는 실제 키보드 상태에서 나오므로 합성 키 이벤트로는 Ctrl 이 잡히지 않는다. 진단을 쓰다 이걸 발견했고(검사 2건이 계속 실패했다), 단축키를 Window.InputBindings 선언으로 옮겼다. 이제 진단이 등록된 KeyBinding 을 찾아 그 명령을 직접 실행해 배선을 확인한다. ■ 자동완성 Enter 와 뜻이 갈린다 목록이 떠 있을 때 Enter 는 후보 확정이다. Ctrl+Enter 가 그 처리에 먼저 걸리면 검증이 안 돈다. PreviewKeyDown 의 목록 처리에서 Ctrl+Enter 만 비켜 가게 하고, 실행할 때 목록을 닫는다. --query-popup 진단에 4건 추가(Ctrl+Enter 등록 · F5 유지 · 실행됨 · 실행하며 목록 닫힘). 현재 16/16. 회귀: 테스트 230/230, 편집 스모크 실패 0, 팝업·정렬·결과표·단축키 점검 16/16, DB 왕복 1,271건 diff 0/예외 0, 종이 렌더 P062 바이트 동일. Co-Authored-By: Claude Opus 5 --- src/SheetMe.Designer/Diagnostics/DbSmoke.cs | 23 +++++++++++++++++ .../Views/QueryEditorWindow.xaml | 9 ++++++- .../Views/QueryEditorWindow.xaml.cs | 25 ++++++++++++------- 3 files changed, 47 insertions(+), 10 deletions(-) diff --git a/src/SheetMe.Designer/Diagnostics/DbSmoke.cs b/src/SheetMe.Designer/Diagnostics/DbSmoke.cs index 042a465..05598ed 100644 --- a/src/SheetMe.Designer/Diagnostics/DbSmoke.cs +++ b/src/SheetMe.Designer/Diagnostics/DbSmoke.cs @@ -744,6 +744,29 @@ public static class DbSmoke Check("결과 표에 열이 생긴다", grid.Columns.Count >= 2, $"열 {grid.Columns.Count}개"); Check("결과 표에 행이 채워진다", grid.Items.Count >= 1, $"행 {grid.Items.Count}개"); + // ⑩ 검증 실행 단축키가 실제로 배선돼 있는가. + // 합성 키 이벤트로는 Keyboard.Modifiers 가 잡히지 않으므로(실제 키 상태를 읽는다) + // 선언된 KeyBinding 을 찾아 그 명령을 직접 실행해 확인한다. + var bindings = window.InputBindings.OfType().ToList(); + var ctrlEnter = bindings.FirstOrDefault(b => + b.Key == System.Windows.Input.Key.Return + && b.Modifiers == System.Windows.Input.ModifierKeys.Control); + var f5 = bindings.FirstOrDefault(b => b.Key == System.Windows.Input.Key.F5); + Check("Ctrl+Enter 단축키가 등록돼 있다", ctrlEnter is not null); + Check("F5 단축키도 남아 있다", f5 is not null); + + if (ctrlEnter?.Command is { } trialCommand) + { + pane.Visibility = System.Windows.Visibility.Collapsed; + Type("SELECT 1 FROM DUAL WHERE 1=1 AND SEL"); + var popupWasOpen = popup.IsOpen; + trialCommand.Execute(null); + DrainDispatcher(); + Check("Ctrl+Enter 로 검증이 실행된다", pane.Visibility == System.Windows.Visibility.Visible); + // 목록이 떠 있어도 검증이 돈다 — Enter(목록 확정)와 뜻이 갈려야 한다 + Check("실행하면서 자동완성 목록을 닫는다", popupWasOpen && !popup.IsOpen); + } + window.Close(); DrainDispatcher(); } diff --git a/src/SheetMe.Designer/Views/QueryEditorWindow.xaml b/src/SheetMe.Designer/Views/QueryEditorWindow.xaml index 0b1c95e..457b05a 100644 --- a/src/SheetMe.Designer/Views/QueryEditorWindow.xaml +++ b/src/SheetMe.Designer/Views/QueryEditorWindow.xaml @@ -61,6 +61,13 @@ + + + + + + @@ -82,7 +89,7 @@ TextTrimming="CharacterEllipsis"/>