diff options
author | Jan Djärv <jan.h.d@swipnet.se> | 2009-09-02 17:03:20 +0000 |
---|---|---|
committer | Jan Djärv <jan.h.d@swipnet.se> | 2009-09-02 17:03:20 +0000 |
commit | a54fa5b720201e4717d0177821b8defcdad3d916 (patch) | |
tree | 4a7d1cdc14db3901249131831cb0685c40a665f2 /src/xfns.c | |
parent | ccfa8d36e63ce4983b90013ed6dbe092d0ca50fa (diff) | |
download | emacs-a54fa5b720201e4717d0177821b8defcdad3d916.tar.gz |
* xterm.h: Rename x_non_menubar_window_to_frame to
x_menubar_window_to_frame
* xterm.c: Remove declarations also in xterm.h
(XTmouse_position): Do not return valid positions
for clicks in the menubar and the toolbar for Gtk+.
* xfns.c (x_any_window_to_frame): Assume less about Gtk+ internals,
if the widget for the event has the same top level as a frame,
return the frame.
(x_menubar_window_to_frame): Detect menu bar even with Gtk+
internal windows, bug #4122.
(x_non_menubar_window_to_frame): Remove.
Diffstat (limited to 'src/xfns.c')
-rw-r--r-- | src/xfns.c | 64 |
1 files changed, 6 insertions, 58 deletions
diff --git a/src/xfns.c b/src/xfns.c index ed068b1ca23..49a9c50f160 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -377,10 +377,7 @@ x_any_window_to_frame (dpyinfo, wdesc) #ifdef USE_GTK GtkWidget *gwdesc = xg_win_to_widget (dpyinfo->display, wdesc); if (gwdesc != 0 - && (gwdesc == x->widget - || gwdesc == x->edit_widget - || gwdesc == x->vbox_widget - || gwdesc == x->menubar_widget)) + && gtk_widget_get_toplevel (gwdesc) == x->widget) found = f; #else if (wdesc == XtWindow (x->widget) @@ -401,54 +398,6 @@ x_any_window_to_frame (dpyinfo, wdesc) return found; } -/* Likewise, but exclude the menu bar widget. */ - -struct frame * -x_non_menubar_window_to_frame (dpyinfo, wdesc) - struct x_display_info *dpyinfo; - int wdesc; -{ - Lisp_Object tail, frame; - struct frame *f; - struct x_output *x; - - if (wdesc == None) return 0; - - for (tail = Vframe_list; CONSP (tail); tail = XCDR (tail)) - { - frame = XCAR (tail); - if (!FRAMEP (frame)) - continue; - f = XFRAME (frame); - if (!FRAME_X_P (f) || FRAME_X_DISPLAY_INFO (f) != dpyinfo) - continue; - x = f->output_data.x; - /* This frame matches if the window is any of its widgets. */ - if (x->hourglass_window == wdesc) - return f; - else if (x->widget) - { -#ifdef USE_GTK - GtkWidget *gwdesc = xg_win_to_widget (dpyinfo->display, wdesc); - if (gwdesc != 0 - && (gwdesc == x->widget - || gwdesc == x->edit_widget - || gwdesc == x->vbox_widget)) - return f; -#else - if (wdesc == XtWindow (x->widget) - || wdesc == XtWindow (x->column_widget) - || wdesc == XtWindow (x->edit_widget)) - return f; -#endif - } - else if (FRAME_X_WINDOW (f) == wdesc) - /* A tooltip frame. */ - return f; - } - return 0; -} - /* Likewise, but consider only the menu bar widget. */ struct frame * @@ -476,15 +425,14 @@ x_menubar_window_to_frame (dpyinfo, wdesc) if (x->menubar_widget) { GtkWidget *gwdesc = xg_win_to_widget (dpyinfo->display, wdesc); - int found = 0; - BLOCK_INPUT; + /* 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_get_parent (gwdesc) == x->menubar_widget)) - found = 1; - UNBLOCK_INPUT; - if (found) return f; + || gtk_widget_is_ancestor (x->menubar_widget, gwdesc) + || gtk_widget_is_ancestor (gwdesc, x->menubar_widget))) + return f; } #else if (x->menubar_widget |