diff options
author | Chong Yidong <cyd@stupidchicken.com> | 2010-07-17 10:41:10 -0400 |
---|---|---|
committer | Chong Yidong <cyd@stupidchicken.com> | 2010-07-17 10:41:10 -0400 |
commit | 1c5f6018d55ea3c0e5430cde60624e2232d87bec (patch) | |
tree | 92a6e263283507a745ef0540615d38e0df6f34d3 | |
parent | f6003da52e7aeee4d1e3a4e2a44da1baf8479c29 (diff) | |
parent | 499322cef9f248af58fb76334076feb80842d592 (diff) | |
download | emacs-1c5f6018d55ea3c0e5430cde60624e2232d87bec.tar.gz emacs-1c5f6018d55ea3c0e5430cde60624e2232d87bec.tar.bz2 emacs-1c5f6018d55ea3c0e5430cde60624e2232d87bec.zip |
Merge latest fix to xg_event_is_for_menubar.
-rw-r--r-- | src/ChangeLog | 5 | ||||
-rw-r--r-- | src/gtkutil.c | 23 |
2 files changed, 25 insertions, 3 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index ce0956310ac..9914cc0767a 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2010-07-17 Jan Djärv <jan.h.d@swipnet.se> + + * gtkutil.c (xg_event_is_for_menubar): Also check that event window + is related to the menu bar (Bug#6499). + 2010-07-16 Jan Djärv <jan.h.d@swipnet.se> * xterm.h (x_menubar_window_to_frame): Second parameter is XEvent*. diff --git a/src/gtkutil.c b/src/gtkutil.c index 8676aa6200c..3a8212ebdb6 100644 --- a/src/gtkutil.c +++ b/src/gtkutil.c @@ -2860,6 +2860,13 @@ int xg_event_is_for_menubar (FRAME_PTR f, XEvent *event) { struct x_output *x = f->output_data.x; + GList *iter; + GdkRectangle rec; + GList *list; + GdkDisplay *gdpy; + GdkWindow *gw; + GdkEvent gevent; + GtkWidget *gwdesc; if (! x->menubar_widget) return 0; @@ -2870,14 +2877,24 @@ xg_event_is_for_menubar (FRAME_PTR f, XEvent *event) && event->xbutton.same_screen)) return 0; - GList *list = gtk_container_get_children (GTK_CONTAINER (x->menubar_widget)); + gdpy = gdk_x11_lookup_xdisplay (FRAME_X_DISPLAY (f)); + gw = gdk_xid_table_lookup_for_display (gdpy, event->xbutton.window); + if (! gw) return 0; + gevent.any.window = gw; + gwdesc = gtk_get_event_widget (&gevent); + if (! gwdesc) return 0; + if (! GTK_IS_MENU_BAR (gwdesc) + && ! GTK_IS_MENU_ITEM (gwdesc) + && ! gtk_widget_is_ancestor (x->menubar_widget, gwdesc)) + return 0; + + list = gtk_container_get_children (GTK_CONTAINER (x->menubar_widget)); if (! list) return 0; - GList *iter; - GdkRectangle rec; rec.x = event->xbutton.x; rec.y = event->xbutton.y; rec.width = 1; rec.height = 1; + for (iter = list ; iter; iter = g_list_next (iter)) { GtkWidget *w = GTK_WIDGET (iter->data); |