Mercurial > emacs
diff src/gtkutil.c @ 109327:60266cf487b0
Fix menus as per bug 6499 and 6608.
* gtkutil.c (xg_event_is_for_menubar): New function (Bug#6499).
* gtkutil.h (xg_event_is_for_menubar): Declare.
* xfns.c (x_menubar_window_to_frame): Take XEvent as second parameter
instead of Window. Call xg_event_is_for_menubar when
USE_GTK (Bug#6499).
* xmenu.c (x_activate_menubar): Revert previous fix for Bug#6499,
i.e. don't put back ButtonRelease (Bug#6608).
* xterm.c (handle_one_xevent): Pass event to x_menubar_window_to_frame.
* xterm.h (x_menubar_window_to_frame): Second parameter is XEvent*.
author | Jan D <jan.h.d@swipnet.se> |
---|---|
date | Wed, 14 Jul 2010 12:05:53 +0200 |
parents | 07507204ac6f |
children | 507549811e3e 051595eb9b58 |
line wrap: on
line diff
--- a/src/gtkutil.c Wed Jul 14 10:40:52 2010 +0300 +++ b/src/gtkutil.c Wed Jul 14 12:05:53 2010 +0200 @@ -2990,6 +2990,38 @@ } } +int +xg_event_is_for_menubar (FRAME_PTR f, XEvent *event) +{ + struct x_output *x = f->output_data.x; + + if (! x->menubar_widget) return 0; + + if (! (event->xbutton.x >= 0 + && event->xbutton.x < FRAME_PIXEL_WIDTH (f) + && event->xbutton.y >= 0 + && event->xbutton.y < f->output_data.x->menubar_height + && event->xbutton.same_screen)) + return 0; + + GList *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); + if (GTK_WIDGET_MAPPED (w) && gtk_widget_intersect (w, &rec, NULL)) + break; + } + g_list_free (list); + return iter == 0 ? 0 : 1; +} + /***********************************************************************