+static void
+scale_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GtkColorScale *scale = GTK_COLOR_SCALE (object);
+
+ switch (prop_id)
+ {
+ case PROP_SCALE_TYPE:
+ g_value_set_int (value, scale->priv->type);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+scale_set_type (GtkColorScale *scale,
+ GtkColorScaleType type)
+{
+ AtkObject *atk_obj;
+
+ scale->priv->type = type;
+
+ atk_obj = gtk_widget_get_accessible (GTK_WIDGET (scale));
+ if (GTK_IS_ACCESSIBLE (atk_obj))
+ {
+ if (type == GTK_COLOR_SCALE_HUE)
+ atk_object_set_name (atk_obj, C_("Color channel", "Hue"));
+ else if (type == GTK_COLOR_SCALE_ALPHA)
+ atk_object_set_name (atk_obj, C_("Color channel", "Alpha"));
+ atk_object_set_role (gtk_widget_get_accessible (GTK_WIDGET (scale)), ATK_ROLE_COLOR_CHOOSER);
+ }
+}
+
+static void
+scale_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GtkColorScale *scale = GTK_COLOR_SCALE (object);
+
+ switch (prop_id)
+ {
+ case PROP_SCALE_TYPE:
+ scale_set_type (scale, (GtkColorScaleType)g_value_get_int (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+hold_action (GtkPressAndHold *pah,
+ gint x,
+ gint y,
+ GtkColorScale *scale)
+{
+ gboolean handled;
+
+ g_signal_emit_by_name (scale, "popup-menu", &handled);
+}
+
+static gboolean
+scale_touch (GtkWidget *widget,
+ GdkEventTouch *event)
+{
+ GtkColorScale *scale = GTK_COLOR_SCALE (widget);
+
+ if (!scale->priv->press_and_hold)
+ {
+ gint drag_threshold;
+
+ g_object_get (gtk_widget_get_settings (widget),
+ "gtk-dnd-drag-threshold", &drag_threshold,
+ NULL);
+
+ scale->priv->press_and_hold = gtk_press_and_hold_new ();
+
+ g_object_set (scale->priv->press_and_hold,
+ "drag-threshold", drag_threshold,
+ "hold-time", 1000,
+ NULL);
+
+ g_signal_connect (scale->priv->press_and_hold, "hold",
+ G_CALLBACK (hold_action), scale);
+ }
+
+ gtk_press_and_hold_process_event (scale->priv->press_and_hold, (GdkEvent *)event);
+
+ return GTK_WIDGET_CLASS (gtk_color_scale_parent_class)->touch_event (widget, event);
+}
+
+