summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2020-09-14 08:35:44 -0400
committerMatthias Clasen <mclasen@redhat.com>2020-09-14 08:35:44 -0400
commit53dddf163de2b16d6140a47240e07925a529639d (patch)
tree56a4f5b16b3b7270a276af7a2b159ba385a81221
parent6a676d527cfba7be1d59310de6dd19cb61898a38 (diff)
downloadgtk+-53dddf163de2b16d6140a47240e07925a529639d.tar.gz
gestures: Make claiming button release workmake-claiming-button-release-work
When claiming a sequence in a gesture signal handler, the expected result is that GtkGesture::handle-event returns TRUE, causing the event to not be propagated further. This doesn't work for button release events, since gtk_gesture_handle_event does the following: add point emit ::update remove point check claimed status The ::update signal is where the application code claims the sequence. But removing the point purges the sequence from the gestures memory, so checking the claimed status returns FALSE. This patch fixes things to behave as expected, by checking the claimed status before removing the point.
-rw-r--r--gtk/gtkgesture.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/gtk/gtkgesture.c b/gtk/gtkgesture.c
index 1e425869b3..f0bb28421a 100644
--- a/gtk/gtkgesture.c
+++ b/gtk/gtkgesture.c
@@ -660,7 +660,7 @@ gtk_gesture_handle_event (GtkEventController *controller,
(event_type == GDK_TOUCHPAD_SWIPE && phase == GDK_TOUCHPAD_GESTURE_PHASE_END) ||
(event_type == GDK_TOUCHPAD_PINCH && phase == GDK_TOUCHPAD_GESTURE_PHASE_END))
{
- gboolean was_claimed;
+ gboolean was_claimed = FALSE;
if (_gtk_gesture_update_point (gesture, event, target, x, y, FALSE))
{
@@ -668,12 +668,12 @@ gtk_gesture_handle_event (GtkEventController *controller,
_gtk_gesture_check_recognized (gesture, sequence))
g_signal_emit (gesture, signals[UPDATE], 0, sequence);
+ was_claimed =
+ gtk_gesture_get_sequence_state (gesture, sequence) == GTK_EVENT_SEQUENCE_CLAIMED;
+
_gtk_gesture_remove_point (gesture, event);
}
- was_claimed =
- gtk_gesture_get_sequence_state (gesture, sequence) == GTK_EVENT_SEQUENCE_CLAIMED;
-
return was_claimed && was_recognized;
}
else if (event_type == GDK_MOTION_NOTIFY ||