diff --git a/gtk/gtkcolorswatch.c b/gtk/gtkcolorswatch.c index e2017a97a7..ed61f85dfe 100644 --- a/gtk/gtkcolorswatch.c +++ b/gtk/gtkcolorswatch.c @@ -28,7 +28,6 @@ #include "gtkmenu.h" #include "gtkmenuitem.h" #include "gtkmenushell.h" -#include "gtkpressandholdprivate.h" #include "gtkprivate.h" #include "gtkintl.h" #include "a11y/gtkcolorswatchaccessibleprivate.h" @@ -46,7 +45,8 @@ struct _GtkColorSwatchPrivate GdkWindow *event_window; - GtkPressAndHold *press_and_hold; + GtkGesture *long_press_gesture; + GtkGesture *multipress_gesture; }; enum @@ -65,6 +65,16 @@ enum static guint signals[LAST_SIGNAL]; +static void hold_action (GtkGestureLongPress *gesture, + gdouble x, + gdouble y, + GtkColorSwatch *swatch); +static void tap_action (GtkGestureMultiPress *gesture, + gint n_press, + gdouble x, + gdouble y, + GtkColorSwatch *swatch); + G_DEFINE_TYPE_WITH_PRIVATE (GtkColorSwatch, gtk_color_swatch, GTK_TYPE_WIDGET) static void @@ -76,6 +86,18 @@ gtk_color_swatch_init (GtkColorSwatch *swatch) gtk_widget_set_can_focus (GTK_WIDGET (swatch), TRUE); gtk_widget_set_has_window (GTK_WIDGET (swatch), FALSE); + + swatch->priv->long_press_gesture = gtk_gesture_long_press_new (GTK_WIDGET (swatch)); + g_signal_connect (swatch->priv->long_press_gesture, "pressed", + G_CALLBACK (hold_action), swatch); + gtk_widget_add_controller (GTK_WIDGET (swatch), + GTK_EVENT_CONTROLLER (swatch->priv->long_press_gesture)); + + swatch->priv->multipress_gesture = gtk_gesture_multi_press_new (GTK_WIDGET (swatch)); + g_signal_connect (swatch->priv->multipress_gesture, "pressed", + G_CALLBACK (tap_action), swatch); + gtk_widget_add_controller (GTK_WIDGET (swatch), + GTK_EVENT_CONTROLLER (swatch->priv->multipress_gesture)); } #define INTENSITY(r, g, b) ((r) * 0.30 + (g) * 0.59 + (b) * 0.11) @@ -527,53 +549,24 @@ swatch_button_release (GtkWidget *widget, } static void -hold_action (GtkPressAndHold *pah, - gint x, - gint y, - GtkColorSwatch *swatch) +hold_action (GtkGestureLongPress *gesture, + gdouble x, + gdouble y, + GtkColorSwatch *swatch) { emit_customize (swatch); + gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_CLAIMED); } static void -tap_action (GtkPressAndHold *pah, - gint x, - gint y, - GtkColorSwatch *swatch) +tap_action (GtkGestureMultiPress *gesture, + gint n_press, + gdouble x, + gdouble y, + GtkColorSwatch *swatch) { - swatch_primary_action (swatch); -} - -static gboolean -swatch_touch (GtkWidget *widget, - GdkEventTouch *event) -{ - GtkColorSwatch *swatch = GTK_COLOR_SWATCH (widget); - - if (!swatch->priv->press_and_hold) - { - gint drag_threshold; - - g_object_get (gtk_widget_get_settings (widget), - "gtk-dnd-drag-threshold", &drag_threshold, - NULL); - - swatch->priv->press_and_hold = gtk_press_and_hold_new (); - - g_object_set (swatch->priv->press_and_hold, - "drag-threshold", drag_threshold, - "hold-time", 1000, - NULL); - - g_signal_connect (swatch->priv->press_and_hold, "hold", - G_CALLBACK (hold_action), swatch); - g_signal_connect (swatch->priv->press_and_hold, "tap", - G_CALLBACK (tap_action), swatch); - } - - gtk_press_and_hold_process_event (swatch->priv->press_and_hold, (GdkEvent *)event); - - return TRUE; + if (n_press == 1) + swatch_primary_action (swatch); } static void @@ -727,7 +720,14 @@ swatch_finalize (GObject *object) GtkColorSwatch *swatch = GTK_COLOR_SWATCH (object); g_free (swatch->priv->icon); - g_clear_object (&swatch->priv->press_and_hold); + + gtk_widget_remove_controller (GTK_WIDGET (object), + GTK_EVENT_CONTROLLER (swatch->priv->long_press_gesture)); + g_object_unref (swatch->priv->long_press_gesture); + + gtk_widget_remove_controller (GTK_WIDGET (object), + GTK_EVENT_CONTROLLER (swatch->priv->multipress_gesture)); + g_object_unref (swatch->priv->multipress_gesture); G_OBJECT_CLASS (gtk_color_swatch_parent_class)->finalize (object); } @@ -759,7 +759,6 @@ gtk_color_swatch_class_init (GtkColorSwatchClass *class) widget_class->map = swatch_map; widget_class->unmap = swatch_unmap; widget_class->size_allocate = swatch_size_allocate; - widget_class->touch_event = swatch_touch; signals[ACTIVATE] = g_signal_new ("activate",