Mercurial > emacs
changeset 15314:796d825f4444
(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.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sat, 01 Jun 1996 12:19:27 +0000 |
parents | 0fad77a676b7 |
children | d46311cef590 |
files | src/w32fns.c |
diffstat | 1 files changed, 24 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- 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: