From a4e0de183967d51f5ef7ec602f96ad6c33456701 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Wed, 25 Feb 2015 20:29:22 +0100 Subject: [PATCH] button: Ensure the button is "left" when a gesture is cancelled This prevents from stale widget states if the gesture happens to be cancelled mid-press. --- gtk/gtkbutton.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/gtk/gtkbutton.c b/gtk/gtkbutton.c index 9e0ca78ed1..bb90dafe3d 100644 --- a/gtk/gtkbutton.c +++ b/gtk/gtkbutton.c @@ -147,6 +147,8 @@ static void gtk_button_state_changed (GtkWidget *widget, GtkStateType previous_state); static void gtk_button_grab_notify (GtkWidget *widget, gboolean was_grabbed); +static void gtk_button_do_release (GtkButton *button, + gboolean emit_clicked); static void gtk_button_actionable_iface_init (GtkActionableInterface *iface); static void gtk_button_activatable_interface_init(GtkActivatableIface *iface); @@ -644,6 +646,14 @@ multipress_gesture_update_cb (GtkGesture *gesture, } } +static void +multipress_gesture_cancel_cb (GtkGesture *gesture, + GdkEventSequence *sequence, + GtkButton *button) +{ + gtk_button_do_release (button, FALSE); +} + static void gtk_button_init (GtkButton *button) { @@ -683,6 +693,7 @@ gtk_button_init (GtkButton *button) g_signal_connect (priv->gesture, "pressed", G_CALLBACK (multipress_pressed_cb), button); g_signal_connect (priv->gesture, "released", G_CALLBACK (multipress_released_cb), button); g_signal_connect (priv->gesture, "update", G_CALLBACK (multipress_gesture_update_cb), button); + g_signal_connect (priv->gesture, "cancel", G_CALLBACK (multipress_gesture_cancel_cb), button); gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (priv->gesture), GTK_PHASE_BUBBLE); }