]> git.eshelyaron.com Git - emacs.git/commitdiff
(reset_modifiers): Only clear a modifier if the modifier key has been
authorRichard M. Stallman <rms@gnu.org>
Sat, 1 Jun 1996 12:19:27 +0000 (12:19 +0000)
committerRichard M. Stallman <rms@gnu.org>
Sat, 1 Jun 1996 12:19:27 +0000 (12:19 +0000)
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.

src/w32fns.c

index b205baf4bbc990b1d9183292f59e73fff0aa7d31..a2f1ed77d74135b6b1b26d60a9c468bca46d69e5 100644 (file)
@@ -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 @@ record_keyup (unsigned int wparam, unsigned int lparam)
 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 @@ win32_wnd_proc (hwnd, msg, wParam, lParam)
       case VK_CONTROL: 
       case VK_CAPITAL: 
       case VK_SHIFT:
+      case VK_NUMLOCK:
+      case VK_SCROLL: 
        windows_translate = 1;
        break;
       default:
@@ -3185,9 +3206,9 @@ win32_wnd_proc (hwnd, msg, wParam, lParam)
       reset_modifiers ();
       goto dflt;
 
-    case WM_KILLFOCUS:
     case WM_SETFOCUS:
       reset_modifiers ();
+    case WM_KILLFOCUS:
     case WM_MOVE:
     case WM_SIZE:
     case WM_SYSCOMMAND: