diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2020-09-25 17:47:26 +0200 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2020-09-25 18:58:44 +0200 |
commit | 7d5accc69f713c6df4255fff803e37ef34d232d0 (patch) | |
tree | f030e39051941a9ef7e91b4e05da955b0886fc83 /gtk/gtkscrolledwindow.c | |
parent | b1606db839c83d40feef7968cb8afde91f9a2f95 (diff) | |
download | gtk+-7d5accc69f713c6df4255fff803e37ef34d232d0.tar.gz |
gtkscrolledwindow: Do not eagerly claim touch press event
Claiming early makes the contents unable to react to the touch press
event. Do this on GtkGestureDrag::update past a threshold, so the
child widget(s) can claim before the scrolledwindow does.
Fixes: https://gitlab.gnome.org/GNOME/gtk/-/issues/3125
Diffstat (limited to 'gtk/gtkscrolledwindow.c')
-rw-r--r-- | gtk/gtkscrolledwindow.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c index 7b38c36812..23196edb94 100644 --- a/gtk/gtkscrolledwindow.c +++ b/gtk/gtkscrolledwindow.c @@ -29,6 +29,7 @@ #include "gtkadjustment.h" #include "gtkadjustmentprivate.h" #include "gtkbuildable.h" +#include "gtkdragsource.h" #include "gtkeventcontrollermotion.h" #include "gtkeventcontrollerscroll.h" #include "gtkeventcontrollerprivate.h" @@ -901,7 +902,6 @@ scrolled_window_drag_begin_cb (GtkScrolledWindow *scrolled_window, GtkGesture *gesture) { GtkScrolledWindowPrivate *priv = gtk_scrolled_window_get_instance_private (scrolled_window); - GtkEventSequenceState state; GdkEventSequence *sequence; GtkWidget *event_widget; @@ -914,11 +914,7 @@ scrolled_window_drag_begin_cb (GtkScrolledWindow *scrolled_window, if (event_widget == priv->vscrollbar || event_widget == priv->hscrollbar || (!may_hscroll (scrolled_window) && !may_vscroll (scrolled_window))) - state = GTK_EVENT_SEQUENCE_DENIED; - else - state = GTK_EVENT_SEQUENCE_CLAIMED; - - gtk_gesture_set_sequence_state (gesture, sequence, state); + gtk_gesture_set_sequence_state (gesture, sequence, GTK_EVENT_SEQUENCE_DENIED); } static void @@ -950,7 +946,12 @@ scrolled_window_drag_update_cb (GtkScrolledWindow *scrolled_window, GtkAdjustment *vadjustment; double dx, dy; + if (!gtk_drag_check_threshold (GTK_WIDGET (scrolled_window), + 0, 0, offset_x, offset_y)) + return; + gtk_scrolled_window_invalidate_overshoot (scrolled_window); + gtk_gesture_set_state (gesture, GTK_EVENT_SEQUENCE_CLAIMED); hadjustment = gtk_scrollbar_get_adjustment (GTK_SCROLLBAR (priv->hscrollbar)); if (hadjustment && may_hscroll (scrolled_window)) |