forked from AuroraMiddleware/gtk
colorswatch: Replace GtkPressAndHold
GtkGestureLongPress and GtkGestureMultiPress are both used to replace it.
This commit is contained in:
parent
d5cb4841c8
commit
bd722499dc
@ -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",
|
||||
|
Loading…
Reference in New Issue
Block a user