*** emacs-23.1/src/ChangeLog.orig Wed Oct 14 16:57:29 2009
|
--- emacs-23.1/src/ChangeLog Wed Oct 14 17:35:12 2009
|
***************
|
*** 1,3 ****
|
--- 1,19 ----
|
+ 2009-09-02 Jan Djärv <jan.h.d@swipnet.se>
|
+
|
+ * 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.
|
+
|
2009-07-29 Chong Yidong <cyd@stupidchicken.com>
|
|
* Version 23.1 released.
|
*** emacs-23.1/src/xfns.c.orig Wed Oct 14 16:50:22 2009
|
--- emacs-23.1/src/xfns.c Wed Oct 14 17:35:12 2009
|
***************
|
*** 374,383 ****
|
#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))
|
found = f;
|
#else
|
if (wdesc == XtWindow (x->widget)
|
--- 374,380 ----
|
#ifdef USE_GTK
|
GtkWidget *gwdesc = xg_win_to_widget (dpyinfo->display, wdesc);
|
if (gwdesc != 0
|
! && gtk_widget_get_toplevel(gwdesc) == x->widget)
|
found = f;
|
#else
|
if (wdesc == XtWindow (x->widget)
|
***************
|
*** 398,451 ****
|
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 *
|
--- 395,400 ----
|
***************
|
*** 473,487 ****
|
if (x->menubar_widget)
|
{
|
GtkWidget *gwdesc = xg_win_to_widget (dpyinfo->display, wdesc);
|
- int found = 0;
|
|
! BLOCK_INPUT;
|
if (gwdesc != 0
|
&& (gwdesc == x->menubar_widget
|
! || gtk_widget_get_parent (gwdesc) == x->menubar_widget))
|
! found = 1;
|
! UNBLOCK_INPUT;
|
! if (found) return f;
|
}
|
#else
|
if (x->menubar_widget
|
--- 422,435 ----
|
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
|
*** emacs-23.1/src/xterm.c.orig Wed Oct 14 16:37:20 2009
|
--- emacs-23.1/src/xterm.c Wed Oct 14 17:35:12 2009
|
***************
|
*** 109,116 ****
|
#if defined (USE_X_TOOLKIT) || defined (USE_GTK)
|
|
extern void free_frame_menubar P_ ((struct frame *));
|
- extern struct frame *x_menubar_window_to_frame P_ ((struct x_display_info *,
|
- int));
|
#endif
|
|
#ifdef USE_X_TOOLKIT
|
--- 109,114 ----
|
***************
|
*** 143,153 ****
|
|
#endif /* USE_X_TOOLKIT */
|
|
- #if ! defined (USE_X_TOOLKIT) && ! defined (USE_GTK)
|
- #define x_any_window_to_frame x_window_to_frame
|
- #define x_top_window_to_frame x_window_to_frame
|
- #endif
|
-
|
#ifdef USE_X_TOOLKIT
|
#include "widget.h"
|
#ifndef XtNinitialState
|
--- 141,146 ----
|
***************
|
*** 3916,3921 ****
|
--- 3909,3923 ----
|
if (child == None || child == win)
|
break;
|
|
+ #ifdef USE_GTK
|
+ /* We don't wan't to know the innermost window. We
|
+ want the edit window. For non-Gtk+ the innermost
|
+ window is the edit window. For Gtk+ it might not
|
+ be. It might be the tool bar for example. */
|
+ if (x_window_to_frame (FRAME_X_DISPLAY_INFO (*fp), win))
|
+ break;
|
+ #endif
|
+
|
win = child;
|
parent_x = win_x;
|
parent_y = win_y;
|
***************
|
*** 3932,3939 ****
|
--- 3934,3947 ----
|
parent_{x,y} are invalid, but that's okay, because we'll
|
never use them in that case.) */
|
|
+ #ifdef USE_GTK
|
+ /* We don't wan't to know the innermost window. We
|
+ want the edit window. */
|
+ f1 = x_window_to_frame (FRAME_X_DISPLAY_INFO (*fp), win);
|
+ #else
|
/* Is win one of our frames? */
|
f1 = x_any_window_to_frame (FRAME_X_DISPLAY_INFO (*fp), win);
|
+ #endif
|
|
#ifdef USE_X_TOOLKIT
|
/* If we end up with the menu bar window, say it's not
|
*** emacs-23.1/src/xterm.h.orig Wed Oct 14 15:08:03 2009
|
--- emacs-23.1/src/xterm.h Wed Oct 14 17:35:12 2009
|
***************
|
*** 374,380 ****
|
|
#if defined (USE_X_TOOLKIT) || defined (USE_GTK)
|
extern struct frame *x_any_window_to_frame P_ ((struct x_display_info *, int));
|
! extern struct frame *x_non_menubar_window_to_frame P_ ((struct x_display_info *, int));
|
extern struct frame *x_top_window_to_frame P_ ((struct x_display_info *, int));
|
#endif
|
|
--- 374,380 ----
|
|
#if defined (USE_X_TOOLKIT) || defined (USE_GTK)
|
extern struct frame *x_any_window_to_frame P_ ((struct x_display_info *, int));
|
! extern struct frame *x_menubar_window_to_frame P_ ((struct x_display_info *, int));
|
extern struct frame *x_top_window_to_frame P_ ((struct x_display_info *, int));
|
#endif
|
|