Mercurial > emacs
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