diff options
author | Matthias Clasen <mclasen@redhat.com> | 2012-02-08 23:48:11 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2012-02-14 16:37:00 -0500 |
commit | 92618eb8e26703f9bbe1a0ca0639cb3e6213094e (patch) | |
tree | 1c6bf6a004ea3fe334a64aa3e62b32ec59093e2e | |
parent | 9cc827fcd1441adf84a5eb84205bc8406bc8f2c5 (diff) | |
download | gtk+-92618eb8e26703f9bbe1a0ca0639cb3e6213094e.tar.gz |
GtkColorSwatch: Use widget state instead of a custom 'selected'
-rw-r--r-- | gtk/gtkcolorchooserwidget.c | 15 | ||||
-rw-r--r-- | gtk/gtkcolorswatch.c | 35 | ||||
-rw-r--r-- | gtk/gtkcolorswatchprivate.h | 3 |
3 files changed, 17 insertions, 36 deletions
diff --git a/gtk/gtkcolorchooserwidget.c b/gtk/gtkcolorchooserwidget.c index 6599fac0e3..1e0e3a1ddd 100644 --- a/gtk/gtkcolorchooserwidget.c +++ b/gtk/gtkcolorchooserwidget.c @@ -103,8 +103,8 @@ select_swatch (GtkColorChooserWidget *cc, return; if (cc->priv->current != NULL) - gtk_color_swatch_set_selected (cc->priv->current, FALSE); - gtk_color_swatch_set_selected (swatch, TRUE); + gtk_widget_unset_state_flags (GTK_WIDGET (cc->priv->current), GTK_STATE_FLAG_SELECTED); + gtk_widget_set_state_flags (GTK_WIDGET (swatch), GTK_STATE_FLAG_SELECTED, FALSE); cc->priv->current = swatch; gtk_color_swatch_get_rgba (swatch, &color); @@ -140,10 +140,15 @@ swatch_customize (GtkColorSwatch *swatch, static void swatch_selected (GtkColorSwatch *swatch, - GParamSpec *pspec, + GtkStateFlags previous, GtkColorChooserWidget *cc) { - select_swatch (cc, swatch); + GtkStateFlags flags; + + flags = gtk_widget_get_state_flags (GTK_WIDGET (swatch)); + if ((flags & GTK_STATE_FLAG_SELECTED) != (previous & GTK_STATE_FLAG_SELECTED) && + (flags & GTK_STATE_FLAG_SELECTED) != 0) + select_swatch (cc, swatch); } static void @@ -152,7 +157,7 @@ connect_swatch_signals (GtkWidget *p, { g_signal_connect (p, "activate", G_CALLBACK (swatch_activate), data); g_signal_connect (p, "customize", G_CALLBACK (swatch_customize), data); - g_signal_connect (p, "notify::selected", G_CALLBACK (swatch_selected), data); + g_signal_connect (p, "state-flags-changed", G_CALLBACK (swatch_selected), data); } static void diff --git a/gtk/gtkcolorswatch.c b/gtk/gtkcolorswatch.c index 8766ee6b23..0bd1d64a4b 100644 --- a/gtk/gtkcolorswatch.c +++ b/gtk/gtkcolorswatch.c @@ -38,7 +38,6 @@ struct _GtkColorSwatchPrivate GdkRGBA color; gdouble radius[4]; gchar *icon; - guint selected : 1; guint has_color : 1; guint contains_pointer : 1; guint use_alpha : 1; @@ -185,7 +184,7 @@ swatch_draw (GtkWidget *widget, GTK_ICON_LOOKUP_GENERIC_FALLBACK | GTK_ICON_LOOKUP_USE_BUILTIN); } - else if (swatch->priv->selected) + else if ((state & GTK_STATE_FLAG_SELECTED) != 0) { GdkRGBA bg, border; GtkBorder border_width; @@ -358,8 +357,8 @@ swatch_key_press (GtkWidget *widget, event->keyval == GDK_KEY_KP_Enter || event->keyval == GDK_KEY_KP_Space) { - if (swatch->priv->has_color && !swatch->priv->selected) - gtk_color_swatch_set_selected (swatch, TRUE); + if (swatch->priv->has_color && (gtk_widget_get_state_flags (widget) & GTK_STATE_FLAG_SELECTED) == 0) + gtk_widget_set_state_flags (widget, GTK_STATE_FLAG_SELECTED, FALSE); else g_signal_emit (swatch, signals[ACTIVATE], 0); return TRUE; @@ -489,18 +488,20 @@ swatch_button_release (GtkWidget *widget, GdkEventButton *event) { GtkColorSwatch *swatch = GTK_COLOR_SWATCH (widget); + GtkStateFlags flags; if (event->button == GDK_BUTTON_PRIMARY && swatch->priv->contains_pointer) { + flags = gtk_widget_get_state_flags (widget); if (!swatch->priv->has_color) { g_signal_emit (swatch, signals[ACTIVATE], 0); return TRUE; } - else if (!swatch->priv->selected) + else if ((flags & GTK_STATE_FLAG_SELECTED) == 0) { - gtk_color_swatch_set_selected (swatch, TRUE); + gtk_widget_set_state_flags (widget, GTK_STATE_FLAG_SELECTED, FALSE); return TRUE; } } @@ -532,9 +533,6 @@ swatch_get_property (GObject *object, gtk_color_swatch_get_rgba (swatch, &color); g_value_set_boxed (value, &color); break; - case PROP_SELECTED: - g_value_set_boolean (value, swatch->priv->selected); - break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -554,9 +552,6 @@ swatch_set_property (GObject *object, case PROP_RGBA: gtk_color_swatch_set_rgba (swatch, g_value_get_boxed (value)); break; - case PROP_SELECTED: - gtk_color_swatch_set_selected (swatch, g_value_get_boolean (value)); - break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -614,10 +609,6 @@ gtk_color_swatch_class_init (GtkColorSwatchClass *class) g_param_spec_boxed ("rgba", P_("RGBA Color"), P_("Color as RGBA"), GDK_TYPE_RGBA, GTK_PARAM_READWRITE)); - g_object_class_install_property (object_class, PROP_SELECTED, - g_param_spec_boolean ("selected", P_("Selected"), P_("Selected"), - FALSE, GTK_PARAM_READWRITE)); - g_type_class_add_private (object_class, sizeof (GtkColorSwatchPrivate)); } @@ -689,18 +680,6 @@ gtk_color_swatch_get_rgba (GtkColorSwatch *swatch, } void -gtk_color_swatch_set_selected (GtkColorSwatch *swatch, - gboolean selected) -{ - if (swatch->priv->selected != selected) - { - swatch->priv->selected = selected; - gtk_widget_queue_draw (GTK_WIDGET (swatch)); - g_object_notify (G_OBJECT (swatch), "selected"); - } -} - -void gtk_color_swatch_set_icon (GtkColorSwatch *swatch, const gchar *icon) { diff --git a/gtk/gtkcolorswatchprivate.h b/gtk/gtkcolorswatchprivate.h index 71bcd1ada8..bc8a03df47 100644 --- a/gtk/gtkcolorswatchprivate.h +++ b/gtk/gtkcolorswatchprivate.h @@ -82,9 +82,6 @@ void gtk_color_swatch_set_hsva (GtkColorSwatch *swatch, gdouble v, gdouble a); G_GNUC_INTERNAL -void gtk_color_swatch_set_selected (GtkColorSwatch *swatch, - gboolean selected); -G_GNUC_INTERNAL void gtk_color_swatch_set_can_drop (GtkColorSwatch *swatch, gboolean can_drop); G_GNUC_INTERNAL |