[gtk+/multitouch-for-3.4: 20/89] scrolledwindow: Handle nested scrolled windows in kinetic scrolling



commit 8a3e2b748c94ad11a0a72ff879b6a443fb807edf
Author: Carlos Garnacho <carlosg gnome org>
Date:   Sun Nov 13 18:38:12 2011 +0100

    scrolledwindow: Handle nested scrolled windows in kinetic scrolling
    
    The innermost scrolled window always gets to capture the events, all
    scrolled windows above it just let the event go through. Ideally
    reaching a limit on the innermost scrolled window would propagate
    the dragging up the hierarchy in order to keep following the touch
    coords, although that'd involve rather evil hacks just to cater
    for broken UIs.

 gtk/gtkscrolledwindow.c |    9 ++++++++-
 1 files changed, 8 insertions(+), 1 deletions(-)
---
diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
index dbd7460..e3bcf83 100644
--- a/gtk/gtkscrolledwindow.c
+++ b/gtk/gtkscrolledwindow.c
@@ -2860,11 +2860,19 @@ gtk_scrolled_window_button_press_event (GtkWidget *widget,
     return FALSE;
 
   event = (GdkEventButton *)_event;
+  event_widget = gtk_get_event_widget (_event);
 
   if (!priv->vscrollbar_visible &&
       !priv->hscrollbar_visible)
     return FALSE;
 
+  /* If there's another scrolled window between the widget
+   * receiving the event and this capturing scrolled window,
+   * let it handle the events.
+   */
+  if (widget != gtk_widget_get_ancestor (event_widget, GTK_TYPE_SCROLLED_WINDOW))
+    return GTK_CAPTURED_EVENT_NONE;
+
   /* Check whether the button press is close to the previous one,
    * take that as a shortcut to get the child widget handle events
    */
@@ -2886,7 +2894,6 @@ gtk_scrolled_window_button_press_event (GtkWidget *widget,
   if (!child)
     return FALSE;
 
-  event_widget = gtk_get_event_widget (_event);
   if (priv->hscrollbar == event_widget || priv->vscrollbar == event_widget)
     return FALSE;
 



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