diff src/xmenu.c @ 15628:f74c79dcaf8d

(popup_get_selection): For a ButtonRelease on the proper display, don't queue it, and always deactivate the menu.
author Karl Heuer <kwzh@gnu.org>
date Sun, 07 Jul 1996 22:46:15 +0000
parents 55a2ea0e640c
children 85d87cd0f655
line wrap: on
line diff
--- a/src/xmenu.c	Sun Jul 07 22:40:53 1996 +0000
+++ b/src/xmenu.c	Sun Jul 07 22:46:15 1996 +0000
@@ -1096,10 +1096,15 @@
       /* Handle expose events for editor frames right away.  */
       if (event.type == Expose)
 	process_expose_from_menu (event);
-      /* Make sure we don't consider buttons grabbed after menu goes.  */
+      /* Make sure we don't consider buttons grabbed after menu goes.
+	 And make sure to deactivate for any ButtonRelease,
+	 even if XtDispatchEvent doesn't do that.  */
       else if (event.type == ButtonRelease
 	       && dpyinfo->display == event.xbutton.display)
-	dpyinfo->grabbed &= ~(1 << event.xbutton.button);
+        {
+          dpyinfo->grabbed &= ~(1 << event.xbutton.button);
+          popup_activated_flag = 0;
+        }
       /* If the user presses a key, deactivate the menu.
 	 The user is likely to do that if we get wedged.  */
       else if (event.type == KeyPress
@@ -1118,11 +1123,13 @@
 	}
 
       /* Queue all events not for this popup,
-	 except for Expose, which we've already handled.
+	 except for Expose, which we've already handled, and ButtonRelease.
 	 Note that the X window is associated with the frame if this
 	 is a menu bar popup, but not if it's a dialog box.  So we use
 	 x_non_menubar_window_to_frame, not x_any_window_to_frame.  */
       if (event.type != Expose
+          && !(event.type == ButtonRelease
+               && dpyinfo->display == event.xbutton.display)
 	  && (event.xany.display != dpyinfo->display
 	      || x_non_menubar_window_to_frame (dpyinfo, event.xany.window)))
 	{