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.
This commit is contained in:
Carlos Garnacho
2011-11-13 18:38:12 +01:00
parent c41d304e7f
commit 8a3e2b748c

View File

@@ -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;