# HG changeset patch # User Jason Rumney # Date 1142120787 0 # Node ID 46a8c3e0161d8d8a5a29ab658000ec1dac2d657a # Parent 9d5a725d84ee360bb87176c6922ca0f9acf2fa02 (signal_user_input): New function. (post_character_message): Use it for keyboard input. (w32_msg_pump): Use it for mouse input. diff -r 9d5a725d84ee -r 46a8c3e0161d src/w32fns.c --- a/src/w32fns.c Sat Mar 11 23:45:44 2006 +0000 +++ b/src/w32fns.c Sat Mar 11 23:46:27 2006 +0000 @@ -2695,6 +2695,24 @@ } static void +signal_user_input () +{ + /* Interrupt any lisp that wants to be interrupted by input. */ + if (!NILP (Vthrow_on_input)) + { + Vquit_flag = Vthrow_on_input; + /* If we're inside a function that wants immediate quits, + do it now. */ + if (immediate_quit && NILP (Vinhibit_quit)) + { + immediate_quit = 0; + QUIT; + } + } +} + + +static void post_character_message (hwnd, msg, wParam, lParam, modifiers) HWND hwnd; UINT msg; @@ -2751,6 +2769,8 @@ to receive C-g to interrupt the lisp thread. */ cancel_all_deferred_msgs (); } + else + signal_user_input (); } my_post_msg (&wmsg, hwnd, msg, wParam, lParam); @@ -3270,6 +3290,7 @@ wmsg.dwModifiers = w32_get_modifiers (); my_post_msg (&wmsg, hwnd, msg, wParam, lParam); + signal_user_input (); /* Need to return true for XBUTTON messages, false for others, to indicate that we processed the message. */ @@ -3324,11 +3345,13 @@ case WM_MOUSEWHEEL: wmsg.dwModifiers = w32_get_modifiers (); my_post_msg (&wmsg, hwnd, msg, wParam, lParam); + signal_user_input (); return 0; case WM_DROPFILES: wmsg.dwModifiers = w32_get_modifiers (); my_post_msg (&wmsg, hwnd, msg, wParam, lParam); + signal_user_input (); return 0; case WM_TIMER: @@ -3338,6 +3361,7 @@ if (saved_mouse_button_msg.msg.hwnd) { post_msg (&saved_mouse_button_msg); + signal_user_input (); saved_mouse_button_msg.msg.hwnd = 0; } KillTimer (hwnd, mouse_button_timer); @@ -3840,6 +3864,7 @@ { wmsg.dwModifiers = w32_get_modifiers (); my_post_msg (&wmsg, hwnd, msg, wParam, lParam); + signal_user_input (); return 0; }