diff src/w32fns.c @ 24206:d3649b38bb37

(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.
author Andrew Innes <andrewi@gnu.org>
date Wed, 27 Jan 1999 21:53:27 +0000
parents c83b0bc4e8b9
children 9ecc7b851682
line wrap: on
line diff
--- a/src/w32fns.c	Wed Jan 27 21:49:57 1999 +0000
+++ b/src/w32fns.c	Wed Jan 27 21:53:27 1999 +0000
@@ -3656,6 +3656,7 @@
   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 @@
       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 @@
 	      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 @@
 	      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))