emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] emacs/src ChangeLog gtkutil.c gtkutil.h xterm.c


From: Jan Djärv
Subject: [Emacs-diffs] emacs/src ChangeLog gtkutil.c gtkutil.h xterm.c
Date: Fri, 06 Nov 2009 08:30:46 +0000

CVSROOT:        /cvsroot/emacs
Module name:    emacs
Changes by:     Jan Djärv <jhd> 09/11/06 08:30:46

Modified files:
        src            : ChangeLog gtkutil.c gtkutil.h xterm.c 

Log message:
        Fix bug #4870, issues 3 and 4.
        
        * gtkutil.c (xg_event_is_for_scrollbar): New function (bug#4870).
        
        * gtkutil.h: Declare xg_event_is_for_scrollbar (bug#4870).
        
        * xterm.c (handle_one_xevent): Call xg_event_is_for_scrollbar for
        ButtonPressRelease and MotionNotify (bug#4870).

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/emacs/src/ChangeLog?cvsroot=emacs&r1=1.7841&r2=1.7842
http://cvs.savannah.gnu.org/viewcvs/emacs/src/gtkutil.c?cvsroot=emacs&r1=1.161&r2=1.162
http://cvs.savannah.gnu.org/viewcvs/emacs/src/gtkutil.h?cvsroot=emacs&r1=1.28&r2=1.29
http://cvs.savannah.gnu.org/viewcvs/emacs/src/xterm.c?cvsroot=emacs&r1=1.1050&r2=1.1051

Patches:
Index: ChangeLog
===================================================================
RCS file: /cvsroot/emacs/emacs/src/ChangeLog,v
retrieving revision 1.7841
retrieving revision 1.7842
diff -u -b -r1.7841 -r1.7842
--- ChangeLog   6 Nov 2009 07:49:31 -0000       1.7841
+++ ChangeLog   6 Nov 2009 08:30:43 -0000       1.7842
@@ -1,3 +1,12 @@
+2009-11-06  Jan Djärv  <address@hidden>
+
+       * gtkutil.c (xg_event_is_for_scrollbar): New function (bug#4870).
+
+       * gtkutil.h: Declare xg_event_is_for_scrollbar (bug#4870).
+
+       * xterm.c (handle_one_xevent): Call xg_event_is_for_scrollbar for
+       ButtonPressRelease and MotionNotify (bug#4870).
+
 2009-11-06  Dan Nicolaescu  <address@hidden>
 
        * keymap.c (syms_of_keymap): Construct exclude_keys in pure memory.

Index: gtkutil.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/gtkutil.c,v
retrieving revision 1.161
retrieving revision 1.162
diff -u -b -r1.161 -r1.162
--- gtkutil.c   21 Oct 2009 18:29:47 -0000      1.161
+++ gtkutil.c   6 Nov 2009 08:30:45 -0000       1.162
@@ -3371,6 +3371,38 @@
     }
 }
 
+/* Return non-zero if EVENT is for a scroll bar in frame F.
+   When the same X window is used for several Gtk+ widgets, we cannot
+   say for sure based on the X window alone if an event is for the
+   frame.  This function does additional checks.
+
+   Return non-zero if the event is for a scroll bar, zero otherwise.  */
+
+int
+xg_event_is_for_scrollbar (f, event)
+     FRAME_PTR f;
+     XEvent *event;
+{
+  int retval = 0;
+
+  if (f && event->type == ButtonPress)
+    {
+      /* Check if press occurred outside the edit widget.  */
+      GdkDisplay *gdpy = gdk_x11_lookup_xdisplay (FRAME_X_DISPLAY (f));
+      retval = gdk_display_get_window_at_pointer (gdpy, NULL, NULL)
+        != f->output_data.x->edit_widget->window;
+    }
+  else if (f && (event->type != ButtonRelease || event->type != MotionNotify))
+    {
+      /* If we are releasing or moving the scroll bar, it has the grab.  */
+      retval = gtk_grab_get_current () != 0
+        && gtk_grab_get_current () != f->output_data.x->edit_widget;
+    }
+
+  return retval;
+}
+
+
 
 /***********************************************************************
                       Tool bar functions

Index: gtkutil.h
===================================================================
RCS file: /cvsroot/emacs/emacs/src/gtkutil.h,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -b -r1.28 -r1.29
--- gtkutil.h   8 Jan 2009 03:15:42 -0000       1.28
+++ gtkutil.h   6 Nov 2009 08:30:45 -0000       1.29
@@ -179,7 +179,7 @@
                                                  int portion,
                                                  int position,
                                                  int whole));
-
+extern int xg_event_is_for_scrollbar P_ ((FRAME_PTR f, XEvent *event));
 
 extern void update_frame_tool_bar P_ ((FRAME_PTR f));
 extern void free_frame_tool_bar P_ ((FRAME_PTR f));

Index: xterm.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/xterm.c,v
retrieving revision 1.1050
retrieving revision 1.1051
diff -u -b -r1.1050 -r1.1051
--- xterm.c     6 Nov 2009 06:51:01 -0000       1.1050
+++ xterm.c     6 Nov 2009 08:30:45 -0000       1.1051
@@ -6688,6 +6688,10 @@
             clear_mouse_face (dpyinfo);
           }
 
+#ifdef USE_GTK
+        if (f && xg_event_is_for_scrollbar (f, &event))
+          f = 0;
+#endif
         if (f)
           {
 
@@ -6824,6 +6828,10 @@
         else
           f = x_window_to_frame (dpyinfo, event.xbutton.window);
 
+#ifdef USE_GTK
+        if (f && xg_event_is_for_scrollbar (f, &event))
+          f = 0;
+#endif
         if (f)
           {
             /* Is this in the tool-bar?  */




reply via email to

[Prev in Thread] Current Thread [Next in Thread]