summaryrefslogtreecommitdiff
path: root/src/xfns.c
diff options
context:
space:
mode:
authorJan Djärv <jan.h.d@swipnet.se>2009-09-02 17:03:20 +0000
committerJan Djärv <jan.h.d@swipnet.se>2009-09-02 17:03:20 +0000
commita54fa5b720201e4717d0177821b8defcdad3d916 (patch)
tree4a7d1cdc14db3901249131831cb0685c40a665f2 /src/xfns.c
parentccfa8d36e63ce4983b90013ed6dbe092d0ca50fa (diff)
downloademacs-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.c64
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