From: Karl Heuer Date: Sun, 7 Jul 1996 22:46:15 +0000 (+0000) Subject: (popup_get_selection): For a ButtonRelease on the proper X-Git-Tag: emacs-19.34~234 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=106240057834db0bd7a1c9092b248dd532c68c79;p=emacs.git (popup_get_selection): For a ButtonRelease on the proper display, don't queue it, and always deactivate the menu. --- diff --git a/src/xmenu.c b/src/xmenu.c index e801cc31351..962c3717299 100644 --- a/src/xmenu.c +++ b/src/xmenu.c @@ -1096,10 +1096,15 @@ popup_get_selection (initial_event, dpyinfo, id) /* 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 @@ popup_get_selection (initial_event, dpyinfo, id) } /* 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))) {