44
55#include "globals.h"
66
7+ /*
8+ ** Centralized keyboard handler for app-wide shortcuts.
9+ ** Call from each subclass proc; returns 1 if key was handled.
10+ */
11+ int HandleGlobalKeys (UINT msg , WPARAM wParam ) {
12+ int ctrl = GetKeyState (VK_CONTROL ) < 0 ;
13+ int alt = GetKeyState (VK_MENU ) < 0 ;
14+
15+ if (msg == WM_SYSKEYDOWN || msg == WM_SYSCHAR ) {
16+ if ((wParam == 'X' || wParam == 'x' ) && alt ) {
17+ if (msg == WM_SYSKEYDOWN )
18+ SendMessage (g_hwndMain , WM_CLOSE , 0 , 0 );
19+ return 1 ;
20+ }
21+ if ((wParam == VK_RETURN || wParam == '\r' ) && alt ) {
22+ if (msg == WM_SYSKEYDOWN )
23+ SendMessage (g_hwndMain , WM_COMMAND , IDM_FULLSCREEN , 0 );
24+ return 1 ;
25+ }
26+ }
27+ if (msg == WM_KEYDOWN ) {
28+ if (wParam == VK_ESCAPE && g_fullScreen ) {
29+ SendMessage (g_hwndMain , WM_COMMAND , IDM_FULLSCREEN , 0 );
30+ return 1 ;
31+ }
32+ if (ctrl ) {
33+ if (wParam == '1' ) { SendMessage (g_hwndMain , WM_COMMAND , IDM_VIEWQUERY , 0 ); return 1 ; }
34+ if (wParam == '2' ) { SendMessage (g_hwndMain , WM_COMMAND , IDM_VIEWRESULT , 0 ); return 1 ; }
35+ if (wParam == '3' ) { SendMessage (g_hwndMain , WM_COMMAND , IDM_VIEWSCHEMA , 0 ); return 1 ; }
36+ }
37+ if (wParam == VK_F5 ) { ExecuteQuery (); return 1 ; }
38+ if (wParam == VK_F6 ) { SendMessage (g_hwndMain , WM_COMMAND , IDM_VIEWRESULT , 0 ); return 1 ; }
39+ if (wParam == VK_F7 ) { SendMessage (g_hwndMain , WM_COMMAND , IDM_VIEWSCHEMA , 0 ); return 1 ; }
40+ }
41+ return 0 ;
42+ }
43+
744void UpdateLineCount (void ) {
845 wchar_t buf [32 ];
946 DWORD sel ;
@@ -296,11 +333,9 @@ LRESULT CALLBACK LineNumProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
296333
297334/* Subclass proc for query edit - catches Ctrl+Enter */
298335LRESULT CALLBACK QueryEditProc (HWND hwnd , UINT msg , WPARAM wParam , LPARAM lParam ) {
299- /* Alt+X - Exit (must handle here when edit has focus) */
300- if (msg == WM_SYSKEYDOWN && (wParam == 'X' || wParam == 'x' )) {
301- SendMessage (g_hwndMain , WM_CLOSE , 0 , 0 );
336+ /* Global shortcuts first */
337+ if (HandleGlobalKeys (msg , wParam ))
302338 return 0 ;
303- }
304339 /* Clear hint on focus */
305340 if (msg == WM_SETFOCUS && g_showingHint ) {
306341 SetWindowTextW (hwnd , L"" );
@@ -361,27 +396,6 @@ LRESULT CALLBACK QueryEditProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam
361396 DoFindNext ();
362397 return 0 ;
363398 }
364- /* F6 - Toggle view, Ctrl+1 - Query, Ctrl+2 - Results, Ctrl+3 - Schema */
365- if (wParam == VK_F6 ) {
366- SendMessage (g_hwndMain , WM_COMMAND , IDM_VIEWRESULT , 0 );
367- return 0 ;
368- }
369- if (wParam == VK_F7 ) {
370- SendMessage (g_hwndMain , WM_COMMAND , IDM_VIEWSCHEMA , 0 );
371- return 0 ;
372- }
373- if (ctrl && wParam == '1' ) {
374- SendMessage (g_hwndMain , WM_COMMAND , IDM_VIEWQUERY , 0 );
375- return 0 ;
376- }
377- if (ctrl && wParam == '2' ) {
378- SendMessage (g_hwndMain , WM_COMMAND , IDM_VIEWRESULT , 0 );
379- return 0 ;
380- }
381- if (ctrl && wParam == '3' ) {
382- SendMessage (g_hwndMain , WM_COMMAND , IDM_VIEWSCHEMA , 0 );
383- return 0 ;
384- }
385399 /* Ctrl+A - Select all (CE edit control may not support natively) */
386400 if (ctrl && wParam == 'A' ) {
387401 SendMessage (hwnd , EM_SETSEL , 0 , -1 );
@@ -455,6 +469,9 @@ LRESULT CALLBACK QueryEditProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam
455469
456470/* Subclass proc for result edit - blocks input but allows copy */
457471LRESULT CALLBACK ResultEditProc (HWND hwnd , UINT msg , WPARAM wParam , LPARAM lParam ) {
472+ /* Global shortcuts first */
473+ if (HandleGlobalKeys (msg , wParam ))
474+ return 0 ;
458475 if (msg == WM_KEYDOWN ) {
459476 int ctrl = GetKeyState (VK_CONTROL ) < 0 ;
460477 /* Allow navigation keys through */
@@ -469,8 +486,8 @@ LRESULT CALLBACK ResultEditProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPara
469486 /* Ctrl+C - Copy (pass through) */
470487 if (ctrl && wParam == 'C' )
471488 return CallWindowProc (g_pfnResultProc , hwnd , msg , wParam , lParam );
472- /* F5 or Ctrl+E - Execute */
473- if (wParam == VK_F5 || ( ctrl && wParam == 'E' ) ) {
489+ /* Ctrl+E - Execute */
490+ if (ctrl && wParam == 'E' ) {
474491 ExecuteQuery ();
475492 return 0 ;
476493 }
@@ -506,30 +523,11 @@ LRESULT CALLBACK ResultEditProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPara
506523 DoFindNext ();
507524 return 0 ;
508525 }
509- /* F6/Escape - back to query, Ctrl+1 - Query, Ctrl+2 - Results, Ctrl+3 - Schema */
510- if (wParam == VK_F6 || wParam == VK_ESCAPE || wParam == VK_BACK ) {
511- if (wParam == VK_ESCAPE && g_fullScreen )
512- SendMessage (g_hwndMain , WM_COMMAND , IDM_FULLSCREEN , 0 );
513- else
514- SendMessage (g_hwndMain , WM_COMMAND , IDM_VIEWQUERY , 0 );
515- return 0 ;
516- }
517- if (wParam == VK_F7 ) {
518- SendMessage (g_hwndMain , WM_COMMAND , IDM_VIEWSCHEMA , 0 );
519- return 0 ;
520- }
521- if (ctrl && wParam == '1' ) {
526+ /* Escape/Backspace - back to query */
527+ if (wParam == VK_ESCAPE || wParam == VK_BACK ) {
522528 SendMessage (g_hwndMain , WM_COMMAND , IDM_VIEWQUERY , 0 );
523529 return 0 ;
524530 }
525- if (ctrl && wParam == '2' ) {
526- SendMessage (g_hwndMain , WM_COMMAND , IDM_VIEWRESULT , 0 );
527- return 0 ;
528- }
529- if (ctrl && wParam == '3' ) {
530- SendMessage (g_hwndMain , WM_COMMAND , IDM_VIEWSCHEMA , 0 );
531- return 0 ;
532- }
533531 /* Ctrl+G - Toggle grid view */
534532 if (ctrl && wParam == 'G' ) {
535533 SendMessage (g_hwndMain , WM_COMMAND , IDM_EXECATCURSOR , 0 );
0 commit comments