diff options
author | Matthias Clasen <mclasen@redhat.com> | 2014-10-26 18:08:26 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2014-10-29 06:49:59 -0400 |
commit | 14e394d3d76744c1e55ad4728e02be44f5ea9858 (patch) | |
tree | ef018562446ad4c7681e7be7d4cc0b80b989cc81 /gtk/gtkmodelbutton.c | |
parent | e776c665b0316ed43cc6640d723680c723f5c63f (diff) | |
download | gtk+-14e394d3d76744c1e55ad4728e02be44f5ea9858.tar.gz |
GtkModelButton: Rename action-role to role
Rename action-role to role, and make all properties readable.
Diffstat (limited to 'gtk/gtkmodelbutton.c')
-rw-r--r-- | gtk/gtkmodelbutton.c | 144 |
1 files changed, 101 insertions, 43 deletions
diff --git a/gtk/gtkmodelbutton.c b/gtk/gtkmodelbutton.c index b259b01aaf..51fae077b2 100644 --- a/gtk/gtkmodelbutton.c +++ b/gtk/gtkmodelbutton.c @@ -33,6 +33,7 @@ #include "gtktypebuiltins.h" #include "gtkstack.h" #include "gtkpopover.h" +#include "gtkintl.h" struct _GtkModelButton { @@ -45,7 +46,7 @@ struct _GtkModelButton gboolean inverted; gboolean iconic; gchar *menu_name; - GtkMenuTrackerItemRole role; + GtkButtonRole role; }; typedef GtkButtonClass GtkModelButtonClass; @@ -55,19 +56,22 @@ G_DEFINE_TYPE (GtkModelButton, gtk_model_button, GTK_TYPE_BUTTON) enum { PROP_0, - PROP_ACTION_ROLE, + PROP_ROLE, PROP_ICON, PROP_TEXT, PROP_ACTIVE, PROP_MENU_NAME, PROP_INVERTED, PROP_CENTERED, - PROP_ICONIC + PROP_ICONIC, + LAST_PROPERTY }; +static GParamSpec *properties[LAST_PROPERTY] = { NULL, }; + static void -gtk_model_button_set_action_role (GtkModelButton *button, - GtkMenuTrackerItemRole role) +gtk_model_button_set_role (GtkModelButton *button, + GtkButtonRole role) { AtkObject *accessible; AtkRole a11y_role; @@ -81,15 +85,15 @@ gtk_model_button_set_action_role (GtkModelButton *button, accessible = gtk_widget_get_accessible (GTK_WIDGET (button)); switch (role) { - case GTK_MENU_TRACKER_ITEM_ROLE_NORMAL: + case GTK_BUTTON_ROLE_NORMAL: a11y_role = ATK_ROLE_PUSH_BUTTON; break; - case GTK_MENU_TRACKER_ITEM_ROLE_CHECK: + case GTK_BUTTON_ROLE_CHECK: a11y_role = ATK_ROLE_CHECK_BOX; break; - case GTK_MENU_TRACKER_ITEM_ROLE_RADIO: + case GTK_BUTTON_ROLE_RADIO: a11y_role = ATK_ROLE_RADIO_BUTTON; break; @@ -119,6 +123,7 @@ gtk_model_button_set_icon (GtkModelButton *button, { gtk_image_set_from_gicon (GTK_IMAGE (button->image), icon, GTK_ICON_SIZE_MENU); update_visibility (button); + g_object_notify_by_pspec (G_OBJECT (button), properties[PROP_ICON]); } static void @@ -127,6 +132,7 @@ gtk_model_button_set_text (GtkModelButton *button, { gtk_label_set_text_with_mnemonic (GTK_LABEL (button->label), text); update_visibility (button); + g_object_notify_by_pspec (G_OBJECT (button), properties[PROP_TEXT]); } static void @@ -134,7 +140,7 @@ gtk_model_button_update_state (GtkModelButton *button) { GtkStateFlags state; - if (button->role == GTK_MENU_TRACKER_ITEM_ROLE_NORMAL) + if (button->role == GTK_BUTTON_ROLE_NORMAL) return; state = gtk_widget_get_state_flags (GTK_WIDGET (button)); @@ -152,9 +158,13 @@ static void gtk_model_button_set_active (GtkModelButton *button, gboolean active) { + if (button->active == active) + return; + button->active = active; gtk_model_button_update_state (button); gtk_widget_queue_draw (GTK_WIDGET (button)); + g_object_notify_by_pspec (G_OBJECT (button), properties[PROP_ACTIVE]); } static void @@ -165,23 +175,32 @@ gtk_model_button_set_menu_name (GtkModelButton *button, button->menu_name = g_strdup (menu_name); gtk_model_button_update_state (button); gtk_widget_queue_resize (GTK_WIDGET (button)); + g_object_notify_by_pspec (G_OBJECT (button), properties[PROP_MENU_NAME]); } static void gtk_model_button_set_inverted (GtkModelButton *button, gboolean inverted) { + if (button->inverted == inverted) + return; + button->inverted = inverted; gtk_widget_queue_resize (GTK_WIDGET (button)); + g_object_notify_by_pspec (G_OBJECT (button), properties[PROP_INVERTED]); } static void gtk_model_button_set_centered (GtkModelButton *button, gboolean centered) { + if (button->centered == centered) + return; + button->centered = centered; gtk_widget_set_halign (button->box, button->centered ? GTK_ALIGN_CENTER : GTK_ALIGN_FILL); gtk_widget_queue_draw (GTK_WIDGET (button)); + g_object_notify_by_pspec (G_OBJECT (button), properties[PROP_CENTERED]); } static void @@ -190,6 +209,9 @@ gtk_model_button_set_iconic (GtkModelButton *button, { GtkStyleContext *context; + if (button->iconic == iconic) + return; + button->iconic = iconic; context = gtk_widget_get_style_context (GTK_WIDGET (button)); @@ -208,6 +230,7 @@ gtk_model_button_set_iconic (GtkModelButton *button, update_visibility (button); gtk_widget_queue_resize (GTK_WIDGET (button)); + g_object_notify_by_pspec (G_OBJECT (button), properties[PROP_ICONIC]); } static void @@ -220,6 +243,22 @@ gtk_model_button_get_property (GObject *object, switch (prop_id) { + case PROP_ROLE: + g_value_set_enum (value, button->role); + break; + + case PROP_ICON: + { + GIcon *icon; + gtk_image_get_gicon (GTK_IMAGE (button->image), &icon, NULL); + g_value_set_object (value, icon); + } + break; + + case PROP_TEXT: + g_value_set_string (value, gtk_label_get_text (GTK_LABEL (button->label))); + break; + case PROP_ACTIVE: g_value_set_boolean (value, button->active); break; @@ -228,6 +267,18 @@ gtk_model_button_get_property (GObject *object, g_value_set_string (value, button->menu_name); break; + case PROP_INVERTED: + g_value_set_boolean (value, button->inverted); + break; + + case PROP_CENTERED: + g_value_set_boolean (value, button->centered); + break; + + case PROP_ICONIC: + g_value_set_boolean (value, button->iconic); + break; + default: g_assert_not_reached (); } @@ -243,8 +294,8 @@ gtk_model_button_set_property (GObject *object, switch (prop_id) { - case PROP_ACTION_ROLE: - gtk_model_button_set_action_role (button, g_value_get_enum (value)); + case PROP_ROLE: + gtk_model_button_set_role (button, g_value_get_enum (value)); break; case PROP_ICON: @@ -328,7 +379,7 @@ has_sibling_with_indicator (GtkWidget *button) continue; if (!sibling->centered && - (sibling->menu_name || sibling->role != GTK_MENU_TRACKER_ITEM_ROLE_NORMAL)) + (sibling->menu_name || sibling->role != GTK_BUTTON_ROLE_NORMAL)) { has_indicator = TRUE; break; @@ -343,7 +394,7 @@ has_sibling_with_indicator (GtkWidget *button) static gboolean needs_indicator (GtkModelButton *button) { - if (button->role != GTK_MENU_TRACKER_ITEM_ROLE_NORMAL) + if (button->role != GTK_BUTTON_ROLE_NORMAL) return TRUE; return has_sibling_with_indicator (GTK_WIDGET (button)); @@ -637,14 +688,14 @@ gtk_model_button_draw (GtkWidget *widget, gtk_render_expander (context, cr, x, y, indicator_size, indicator_size); gtk_style_context_restore (context); } - else if (model_button->role == GTK_MENU_TRACKER_ITEM_ROLE_CHECK) + else if (model_button->role == GTK_BUTTON_ROLE_CHECK) { gtk_style_context_save (context); gtk_style_context_add_class (context, GTK_STYLE_CLASS_CHECK); gtk_render_check (context, cr, x, y, indicator_size, indicator_size); gtk_style_context_restore (context); } - else if (model_button->role == GTK_MENU_TRACKER_ITEM_ROLE_RADIO) + else if (model_button->role == GTK_BUTTON_ROLE_RADIO) { gtk_style_context_save (context); gtk_style_context_add_class (context, GTK_STYLE_CLASS_RADIO); @@ -684,7 +735,7 @@ gtk_model_button_clicked (GtkButton *button) if (stack != NULL) gtk_stack_set_visible_child_name (GTK_STACK (stack), model_button->menu_name); } - else if (model_button->role == GTK_MENU_TRACKER_ITEM_ROLE_NORMAL) + else if (model_button->role == GTK_BUTTON_ROLE_NORMAL) { GtkWidget *popover; @@ -714,33 +765,40 @@ gtk_model_button_class_init (GtkModelButtonClass *class) button_class->clicked = gtk_model_button_clicked; - g_object_class_install_property (object_class, PROP_ACTION_ROLE, - g_param_spec_enum ("action-role", "", "", - GTK_TYPE_MENU_TRACKER_ITEM_ROLE, - GTK_MENU_TRACKER_ITEM_ROLE_NORMAL, - G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS)); - g_object_class_install_property (object_class, PROP_ICON, - g_param_spec_object ("icon", "", "", G_TYPE_ICON, - G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS)); - g_object_class_install_property (object_class, PROP_TEXT, - g_param_spec_string ("text", "", "", NULL, - G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS)); - g_object_class_install_property (object_class, PROP_ACTIVE, - g_param_spec_boolean ("active", "", "", FALSE, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - g_object_class_install_property (object_class, PROP_MENU_NAME, - g_param_spec_string ("menu-name", "", "", NULL, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - g_object_class_install_property (object_class, PROP_INVERTED, - g_param_spec_boolean ("inverted", "", "", FALSE, - - G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS)); - g_object_class_install_property (object_class, PROP_CENTERED, - g_param_spec_boolean ("centered", "", "", FALSE, - G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS)); - g_object_class_install_property (object_class, PROP_ICONIC, - g_param_spec_boolean ("iconic", "", "", TRUE, - G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS)); + properties[PROP_ROLE] = + g_param_spec_enum ("role", P_("Role"), P_("The role of this button"), + GTK_TYPE_BUTTON_ROLE, + GTK_BUTTON_ROLE_NORMAL, + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); + properties[PROP_ICON] = + g_param_spec_object ("icon", P_("Icon"), P_("The icon"), + G_TYPE_ICON, + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); + properties[PROP_TEXT] = + g_param_spec_string ("text", P_("Text"), P_("The text"), + NULL, + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); + properties[PROP_ACTIVE] = + g_param_spec_boolean ("active", P_("Active"), P_("Active"), + FALSE, + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); + properties[PROP_MENU_NAME] = + g_param_spec_string ("menu-name", P_("Menu name"), P_("The name of the menu to open"), + NULL, + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); + properties[PROP_INVERTED] = + g_param_spec_boolean ("inverted", P_("Inverted"), P_("Whether the menu is a parent"), + FALSE, + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); + properties[PROP_CENTERED] = + g_param_spec_boolean ("centered", P_("Centered"), P_("Whether to center the contents"), + FALSE, + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); + properties[PROP_ICONIC] = + g_param_spec_boolean ("iconic", P_("Iconic"), P_("Whether to prefer the icon over text"), + TRUE, + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); + g_object_class_install_properties (object_class, LAST_PROPERTY, properties); gtk_widget_class_set_accessible_role (GTK_WIDGET_CLASS (class), ATK_ROLE_PUSH_BUTTON); } |