From 576ba81cd4e54cb648718b64294b967ee299dfb6 Mon Sep 17 00:00:00 2001 From: Andrew Innes Date: Wed, 27 Jan 1999 21:53:27 +0000 Subject: [PATCH] (w32_wnd_proc): Fix bug introduced by previous change; the lwindow, rwindow and apps keys could not be used as function keys, because they were being passed to TranslateMessage which ignores them. Also, key was being changed to SPC. --- src/w32fns.c | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/src/w32fns.c b/src/w32fns.c index 4ffeb2bfc28..10afcbca40a 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -3656,6 +3656,7 @@ w32_wnd_proc (hwnd, msg, wParam, lParam) struct w32_display_info *dpyinfo = &one_w32_display_info; W32Msg wmsg; int windows_translate; + int key; /* Note that it is okay to call x_window_to_frame, even though we are not running in the main lisp thread, because frame deletion @@ -3757,9 +3758,16 @@ w32_wnd_proc (hwnd, msg, wParam, lParam) if (dpyinfo->faked_key == wParam) { dpyinfo->faked_key = 0; - /* Make sure TranslateMessage sees them though. */ - windows_translate = 1; - goto translate; + /* Make sure TranslateMessage sees them though (as long as + they don't produce WM_CHAR messages). This ensures that + indicator lights are toggled promptly on Windows 9x, for + example. */ + if (lispy_function_keys[wParam] != 0) + { + windows_translate = 1; + goto translate; + } + return 0; } /* Synchronize modifiers with current keystroke. */ @@ -3780,16 +3788,15 @@ w32_wnd_proc (hwnd, msg, wParam, lParam) if (GetAsyncKeyState (wParam) & 1) { if (NUMBERP (Vw32_phantom_key_code)) - wParam = XUINT (Vw32_phantom_key_code) & 255; + key = XUINT (Vw32_phantom_key_code) & 255; else - wParam = VK_SPACE; - dpyinfo->faked_key = wParam; - keybd_event (wParam, (BYTE) MapVirtualKey (wParam, 0), 0, 0); + key = VK_SPACE; + dpyinfo->faked_key = key; + keybd_event (key, (BYTE) MapVirtualKey (key, 0), 0, 0); } } if (!NILP (Vw32_lwindow_modifier)) return 0; - windows_translate = 1; break; case VK_RWIN: if (NILP (Vw32_pass_rwindow_to_system)) @@ -3797,21 +3804,19 @@ w32_wnd_proc (hwnd, msg, wParam, lParam) if (GetAsyncKeyState (wParam) & 1) { if (NUMBERP (Vw32_phantom_key_code)) - wParam = XUINT (Vw32_phantom_key_code) & 255; + key = XUINT (Vw32_phantom_key_code) & 255; else - wParam = VK_SPACE; - dpyinfo->faked_key = wParam; - keybd_event (wParam, (BYTE) MapVirtualKey (wParam, 0), 0, 0); + key = VK_SPACE; + dpyinfo->faked_key = key; + keybd_event (key, (BYTE) MapVirtualKey (key, 0), 0, 0); } } if (!NILP (Vw32_rwindow_modifier)) return 0; - windows_translate = 1; break; - case VK_APPS: + case VK_APPS: if (!NILP (Vw32_apps_modifier)) return 0; - windows_translate = 1; break; case VK_MENU: if (NILP (Vw32_pass_alt_to_system)) -- 2.39.2