changeset 69426:46a8c3e0161d

(signal_user_input): New function. (post_character_message): Use it for keyboard input. (w32_msg_pump): Use it for mouse input.
author Jason Rumney <jasonr@gnu.org>
date Sat, 11 Mar 2006 23:46:27 +0000
parents 9d5a725d84ee
children 656079a407fa
files src/w32fns.c
diffstat 1 files changed, 25 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- 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;
 	}