Mercurial > emacs
diff src/xfns.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 | 1b5ca039f5f2 |
children | 051595eb9b58 2cf388f16cae |
line wrap: on
line diff
--- a/src/xfns.c Wed Jul 14 10:40:52 2010 +0300 +++ b/src/xfns.c Wed Jul 14 12:05:53 2010 +0200 @@ -404,10 +404,11 @@ /* Likewise, but consider only the menu bar widget. */ struct frame * -x_menubar_window_to_frame (dpyinfo, wdesc) +x_menubar_window_to_frame (dpyinfo, event) struct x_display_info *dpyinfo; - int wdesc; + XEvent *event; { + Window wdesc = event->xany.window; Lisp_Object tail, frame; struct frame *f; struct x_output *x; @@ -423,21 +424,11 @@ if (!FRAME_X_P (f) || FRAME_X_DISPLAY_INFO (f) != dpyinfo) continue; x = f->output_data.x; +#ifdef USE_GTK + if (x->menubar_widget && xg_event_is_for_menubar (f, event)) + return f; +#else /* Match if the window is this frame's menubar. */ -#ifdef USE_GTK - if (x->menubar_widget) - { - GtkWidget *gwdesc = xg_win_to_widget (dpyinfo->display, wdesc); - - /* This gives false positives, but the rectangle check in xterm.c - where this is called takes care of that. */ - if (gwdesc != 0 - && (gwdesc == x->menubar_widget - || gtk_widget_is_ancestor (x->menubar_widget, gwdesc) - || gtk_widget_is_ancestor (gwdesc, x->menubar_widget))) - return f; - } -#else if (x->menubar_widget && lw_window_is_in_menubar (wdesc, x->menubar_widget)) return f;