[gtk+/touchscreens: 23/65] scrolledwindow: Set also a GTK+ grab on p-a-h scrolling



commit 0b015e44795314aa2ced54bc7cf6e7782bfb8115
Author: Carlos Garnacho <carlosg gnome org>
Date:   Tue Nov 1 12:45:12 2011 +0100

    scrolledwindow: Set also a GTK+ grab on p-a-h scrolling
    
    This is so the widget is ensured to receive the events
    regardless of the pointer position.

 gtk/gtkscrolledwindow.c |   11 +++++++++--
 1 files changed, 9 insertions(+), 2 deletions(-)
---
diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
index 67b41a6..9ca46ef 100644
--- a/gtk/gtkscrolledwindow.c
+++ b/gtk/gtkscrolledwindow.c
@@ -2842,6 +2842,7 @@ gtk_scrolled_window_press_and_hold (GtkWidget             *widget,
         return FALSE;
 
       gdk_device_ungrab (device, GDK_CURRENT_TIME);
+      gtk_device_grab_remove (widget, device);
 
       if (priv->motion_notify_id > 0)
         {
@@ -2887,6 +2888,7 @@ gtk_scrolled_window_button_release_event (GtkWidget *widget,
   GtkWidget *child;
   gdouble distance;
   GdkEventButton *event;
+  GdkDevice *device;
 
   if (_event->type != GDK_BUTTON_RELEASE)
     return FALSE;
@@ -2900,7 +2902,9 @@ gtk_scrolled_window_button_release_event (GtkWidget *widget,
   if (!child)
     return FALSE;
 
-  gdk_device_ungrab (gdk_event_get_device (_event), event->time);
+  device = gdk_event_get_device (_event);
+  gdk_device_ungrab (device, event->time);
+  gtk_device_grab_remove (widget, device);
 
   if (priv->motion_notify_id > 0)
     {
@@ -3027,6 +3031,7 @@ gtk_scrolled_window_button_press_event (GtkWidget *widget,
   gint threshold;
   GtkWidget *event_widget;
   GdkEventButton *event;
+  GdkDevice *device;
 
   if (_event->type != GDK_BUTTON_PRESS)
     return FALSE;
@@ -3044,13 +3049,15 @@ gtk_scrolled_window_button_press_event (GtkWidget *widget,
   if (priv->hscrollbar == event_widget || priv->vscrollbar == event_widget)
     return FALSE;
 
-  gdk_device_grab (gdk_event_get_device (_event),
+  device = gdk_event_get_device (_event);
+  gdk_device_grab (device,
                    priv->event_window,
                    GDK_OWNERSHIP_WINDOW,
                    TRUE,
                    GDK_BUTTON_RELEASE_MASK | GDK_BUTTON1_MOTION_MASK,
                    NULL,
                    event->time);
+  gtk_device_grab_add (widget, device, TRUE);
   gdk_window_lower (priv->event_window);
 
   /* Reset motion buffer */



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