# HG changeset patch # User Richard M. Stallman # Date 833631567 0 # Node ID 796d825f4444187f41656bf799f5cc6e86339188 # Parent 0fad77a676b7cbed25bb4c8740c660bd1635461b (reset_modifiers): Only clear a modifier if the modifier key has been detected to have been released since Emacs lost focus. (win32_wnd_proc): Have Windows translate VK_NUMLOCK and VK_SCROLL key downs; don't reset the modifier state when Emacs loses focus. diff -r 0fad77a676b7 -r 796d825f4444 src/w32fns.c --- a/src/w32fns.c Sat Jun 01 02:23:06 1996 +0000 +++ b/src/w32fns.c Sat Jun 01 12:19:27 1996 +0000 @@ -1,5 +1,5 @@ /* Functions for the Win32 window system. - Copyright (C) 1989, 1992, 1993, 1994, 1995 Free Software Foundation. + Copyright (C) 1989, 92, 93, 94, 95, 1996 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -2755,9 +2755,28 @@ static void reset_modifiers () { + SHORT ctrl, alt; + if (!modifiers_recorded) return; - bzero (modifiers, sizeof (modifiers)); + + ctrl = GetAsyncKeyState (VK_CONTROL); + alt = GetAsyncKeyState (VK_MENU); + + if (ctrl == 0 || alt == 0) + /* Emacs doesn't have keyboard focus. Do nothing. */ + return; + + if (!(ctrl & 0x08000)) + /* Clear any recorded control modifier state. */ + modifiers[EMACS_RCONTROL] = modifiers[EMACS_LCONTROL] = 0; + + if (!(alt & 0x08000)) + /* Clear any recorded alt modifier state. */ + modifiers[EMACS_RMENU] = modifiers[EMACS_LMENU] = 0; + + /* Otherwise, leave the modifier state as it was when Emacs lost + keyboard focus. */ } static int @@ -2950,6 +2969,8 @@ case VK_CONTROL: case VK_CAPITAL: case VK_SHIFT: + case VK_NUMLOCK: + case VK_SCROLL: windows_translate = 1; break; default: @@ -3185,9 +3206,9 @@ reset_modifiers (); goto dflt; - case WM_KILLFOCUS: case WM_SETFOCUS: reset_modifiers (); + case WM_KILLFOCUS: case WM_MOVE: case WM_SIZE: case WM_SYSCOMMAND: