changeset 106867:e9a9fc07702f

* xterm.c (event_handler_gdk): Block input (Bug#5037).
author Chong Yidong <cyd@stupidchicken.com>
date Sat, 16 Jan 2010 15:20:32 -0500
parents 2140d1c42332
children a3ab0fab30ae
files src/ChangeLog src/xterm.c
diffstat 2 files changed, 17 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Sat Jan 16 12:18:30 2010 -0800
+++ b/src/ChangeLog	Sat Jan 16 15:20:32 2010 -0500
@@ -1,3 +1,7 @@
+2010-01-16  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* xterm.c (event_handler_gdk): Block input (Bug#5037).
+
 2010-01-16  Chong Yidong  <cyd@stupidchicken.com>
 
 	* emacs.c (standard_args): Adjust arg priorities to reflect how
--- a/src/xterm.c	Sat Jan 16 12:18:30 2010 -0800
+++ b/src/xterm.c	Sat Jan 16 15:20:32 2010 -0500
@@ -5797,6 +5797,7 @@
 {
   XEvent *xev = (XEvent *) gxev;
 
+  BLOCK_INPUT;
   if (current_count >= 0)
     {
       struct x_display_info *dpyinfo;
@@ -5807,23 +5808,27 @@
       /* Filter events for the current X input method.
          GTK calls XFilterEvent but not for key press and release,
          so we do it here.  */
-      if (xev->type == KeyPress || xev->type == KeyRelease)
-        if (dpyinfo && x_filter_event (dpyinfo, xev))
-          return GDK_FILTER_REMOVE;
+      if ((xev->type == KeyPress || xev->type == KeyRelease)
+	  && dpyinfo
+	  && x_filter_event (dpyinfo, xev))
+	{
+	  UNBLOCK_INPUT;
+	  return GDK_FILTER_REMOVE;
+	}
 #endif
 
       if (! dpyinfo)
         current_finish = X_EVENT_NORMAL;
       else
-	{
-	  current_count +=
-	    handle_one_xevent (dpyinfo, xev, &current_finish,
-			       current_hold_quit);
-	}
+	current_count +=
+	  handle_one_xevent (dpyinfo, xev, &current_finish,
+			     current_hold_quit);
     }
   else
     current_finish = x_dispatch_event (xev, xev->xany.display);
 
+  UNBLOCK_INPUT;
+
   if (current_finish == X_EVENT_GOTO_OUT || current_finish == X_EVENT_DROP)
     return GDK_FILTER_REMOVE;