[gtk+/multitouch: 46/57] scrolledwindow: Only do kinetic scrolling on touch devices



commit 8b3fe04c70af2011273aaebc53e3adf49c6f955b
Author: Carlos Garnacho <carlosg gnome org>
Date:   Tue Nov 1 12:52:50 2011 +0100

    scrolledwindow: Only do kinetic scrolling on touch devices
    
    This is sort of meaningless on pointer devices, besides it implies
    a different input event handling on child widgets that's unnecessary
    there.

 gtk/gtkscrolledwindow.c |   23 ++++++++++++++++++-----
 1 files changed, 18 insertions(+), 5 deletions(-)
---
diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
index e196a35..91868f7 100644
--- a/gtk/gtkscrolledwindow.c
+++ b/gtk/gtkscrolledwindow.c
@@ -494,7 +494,9 @@ gtk_scrolled_window_class_init (GtkScrolledWindowClass *class)
   /**
    * GtkScrolledWindow:kinetic-scrolling:
    *
-   * Whether kinetic scrolling mode is enabled.
+   * Whether kinetic scrolling mode is enabled,
+   * only applies to devices with source %GDK_SOURCE_TOUCH
+   * or %GDK_SOURCE_MULTITOUCH.
    *
    * Since: 3.2
    */
@@ -2892,7 +2894,8 @@ gtk_scrolled_window_button_release_event (GtkWidget *widget,
   GdkEventButton *event;
   GdkDevice *device;
 
-  if (_event->type != GDK_BUTTON_RELEASE)
+  if (_event->type != GDK_BUTTON_RELEASE &&
+      _event->type != GDK_TOUCH_RELEASE)
     return FALSE;
 
   event = (GdkEventButton *)_event;
@@ -2970,7 +2973,8 @@ gtk_scrolled_window_motion_notify_event (GtkWidget *widget,
   gdouble dx, dy;
   GdkEventMotion *event;
 
-  if (_event->type != GDK_MOTION_NOTIFY)
+  if (_event->type != GDK_MOTION_NOTIFY &&
+      _event->type != GDK_TOUCH_MOTION)
     return FALSE;
 
   event = (GdkEventMotion *)_event;
@@ -3036,9 +3040,18 @@ gtk_scrolled_window_button_press_event (GtkWidget *widget,
   gint threshold;
   GtkWidget *event_widget;
   GdkEventButton *event;
-  GdkDevice *device;
+  GdkDevice *device, *source_device;
+  GdkInputSource source;
+
+  if (_event->type != GDK_BUTTON_PRESS &&
+      _event->type != GDK_TOUCH_PRESS)
+    return FALSE;
+
+  source_device = gdk_event_get_source_device (_event);
+  source = gdk_device_get_source (source_device);
 
-  if (_event->type != GDK_BUTTON_PRESS)
+  if (source != GDK_SOURCE_TOUCH &&
+      source != GDK_SOURCE_MULTITOUCH)
     return FALSE;
 
   event = (GdkEventButton *)_event;



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