changeset 16602:510d37fcbaf6

(w32_wnd_proc): Use dummy message to wake up thread on quit_char.
author Geoff Voelker <voelker@cs.washington.edu>
date Thu, 21 Nov 1996 07:48:37 +0000
parents 7361b2115a77
children a12b8815bcf0
files src/w32fns.c
diffstat 1 files changed, 15 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/w32fns.c	Wed Nov 20 21:28:32 1996 +0000
+++ b/src/w32fns.c	Thu Nov 21 07:48:37 1996 +0000
@@ -3046,24 +3046,31 @@
     case WM_CHAR:
       wmsg.dwModifiers = construct_modifiers (wParam, lParam);
 
-      enter_crit ();
-      my_post_msg (&wmsg, hwnd, msg, wParam, lParam);
-
 #if 1
-      /* Detect quit_char and set quit-flag directly.  Note that we dow
-         this *after* posting the message to ensure the main thread will
-         be woken up if blocked in sys_select(). */
+      /* Detect quit_char and set quit-flag directly.  Note that we
+	 still need to post a message to ensure the main thread will be
+	 woken up if blocked in sys_select(), but we do NOT want to post
+	 the quit_char message itself (because it will usually be as if
+	 the user had typed quit_char twice).  Instead, we post a dummy
+	 message that has no particular effect. */
       {
 	int c = wParam;
 	if (isalpha (c) && (wmsg.dwModifiers == LEFT_CTRL_PRESSED 
 			    || wmsg.dwModifiers == RIGHT_CTRL_PRESSED))
 	  c = make_ctrl_char (c) & 0377;
 	if (c == quit_char)
-	  Vquit_flag = Qt;
+	  {
+	    Vquit_flag = Qt;
+
+	    /* The choice of message is somewhat arbitrary, as long as
+	       the main thread handler just ignores it. */
+	    msg = WM_QUIT;
+	  }
       }
 #endif
 
-      leave_crit ();
+      my_post_msg (&wmsg, hwnd, msg, wParam, lParam);
+
       break;
 
       /* Simulate middle mouse button events when left and right buttons