GtkMenuTrackerItem: clean up "role" a bit

This property was combining something static (item is separator?) with
something dynamic (which state indicator shall we draw?).  Split that
out by making is_separator a separate property and clarify things a bit
by renaming the "toggle" role to "check".
This commit is contained in:
Ryan Lortie
2013-05-09 11:42:07 -04:00
parent 691b37adb2
commit 357a390fe9
4 changed files with 23 additions and 11 deletions

View File

@@ -2089,7 +2089,7 @@ gtk_menu_shell_tracker_insert_func (GtkMenuTrackerItem *item,
GtkMenuShell *menu_shell = user_data;
GtkWidget *widget;
if (gtk_menu_tracker_item_get_role (item) == GTK_MENU_TRACKER_ITEM_ROLE_SEPARATOR)
if (gtk_menu_tracker_item_get_is_separator (item))
widget = gtk_separator_menu_item_new ();
else
widget = gtk_model_menu_item_new ();

View File

@@ -10,6 +10,7 @@ struct _GtkMenuTrackerItem
gchar *action_namespace;
GMenuItem *item;
GtkMenuTrackerItemRole role : 4;
guint is_separator : 1;
guint can_activate : 1;
guint sensitive : 1;
guint toggled : 1;
@@ -17,6 +18,7 @@ struct _GtkMenuTrackerItem
enum {
PROP_0,
PROP_IS_SEPARATOR,
PROP_LABEL,
PROP_ICON,
PROP_SENSITIVE,
@@ -44,9 +46,8 @@ gtk_menu_tracker_item_role_get_type (void)
{
static const GEnumValue values[] = {
{ GTK_MENU_TRACKER_ITEM_ROLE_NORMAL, "GTK_MENU_TRACKER_ITEM_ROLE_NORMAL", "normal" },
{ GTK_MENU_TRACKER_ITEM_ROLE_TOGGLE, "GTK_MENU_TRACKER_ITEM_ROLE_TOGGLE", "toggle" },
{ GTK_MENU_TRACKER_ITEM_ROLE_CHECK, "GTK_MENU_TRACKER_ITEM_ROLE_CHECK", "check" },
{ GTK_MENU_TRACKER_ITEM_ROLE_RADIO, "GTK_MENU_TRACKER_ITEM_ROLE_RADIO", "radio" },
{ GTK_MENU_TRACKER_ITEM_ROLE_SEPARATOR, "GTK_MENU_TRACKER_ITEM_ROLE_SEPARATOR", "separator" },
{ 0, NULL, NULL }
};
GType type;
@@ -69,6 +70,9 @@ gtk_menu_tracker_item_get_property (GObject *object,
switch (prop_id)
{
case PROP_IS_SEPARATOR:
g_value_set_boolean (value, gtk_menu_tracker_item_get_is_separator (self));
break;
case PROP_LABEL:
g_value_set_string (value, gtk_menu_tracker_item_get_label (self));
break;
@@ -128,6 +132,8 @@ gtk_menu_tracker_item_class_init (GtkMenuTrackerItemClass *class)
class->get_property = gtk_menu_tracker_item_get_property;
class->finalize = gtk_menu_tracker_item_finalize;
gtk_menu_tracker_item_pspecs[PROP_IS_SEPARATOR] =
g_param_spec_boolean ("is-separator", "", "", FALSE, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE);
gtk_menu_tracker_item_pspecs[PROP_LABEL] =
g_param_spec_string ("label", "", "", NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE);
gtk_menu_tracker_item_pspecs[PROP_ICON] =
@@ -187,7 +193,7 @@ gtk_menu_tracker_item_action_added (GActionObserver *observer,
else if (state != NULL && g_variant_is_of_type (state, G_VARIANT_TYPE_BOOLEAN))
{
self->toggled = g_variant_get_boolean (state);
self->role = GTK_MENU_TRACKER_ITEM_ROLE_TOGGLE;
self->role = GTK_MENU_TRACKER_ITEM_ROLE_CHECK;
}
g_object_freeze_notify (G_OBJECT (self));
@@ -317,6 +323,7 @@ gtk_menu_tracker_item_new (GActionObservable *observable,
self->item = g_menu_item_new_from_model (model, item_index);
self->action_namespace = g_strdup (action_namespace);
self->observable = g_object_ref (observable);
self->is_separator = is_separator;
if (!is_separator && g_menu_item_get_attribute (self->item, "action", "&s", &action_name))
{
@@ -352,10 +359,7 @@ gtk_menu_tracker_item_new (GActionObservable *observable,
g_variant_unref (state);
}
else
{
self->role = is_separator ? GTK_MENU_TRACKER_ITEM_ROLE_SEPARATOR : GTK_MENU_TRACKER_ITEM_ROLE_NORMAL;
self->sensitive = TRUE;
}
self->sensitive = TRUE;
return self;
}
@@ -366,6 +370,12 @@ gtk_menu_tracker_item_get_observable (GtkMenuTrackerItem *self)
return self->observable;
}
gboolean
gtk_menu_tracker_item_get_is_separator (GtkMenuTrackerItem *self)
{
return self->is_separator;
}
const gchar *
gtk_menu_tracker_item_get_label (GtkMenuTrackerItem *self)
{

View File

@@ -34,9 +34,8 @@ typedef struct _GtkMenuTrackerItem GtkMenuTrackerItem;
typedef enum {
GTK_MENU_TRACKER_ITEM_ROLE_NORMAL,
GTK_MENU_TRACKER_ITEM_ROLE_TOGGLE,
GTK_MENU_TRACKER_ITEM_ROLE_CHECK,
GTK_MENU_TRACKER_ITEM_ROLE_RADIO,
GTK_MENU_TRACKER_ITEM_ROLE_SEPARATOR
} GtkMenuTrackerItemRole;
G_GNUC_INTERNAL
@@ -55,6 +54,9 @@ GtkMenuTrackerItem * gtk_menu_tracker_item_new (GAction
G_GNUC_INTERNAL
GActionObservable * gtk_menu_tracker_item_get_observable (GtkMenuTrackerItem *self);
G_GNUC_INTERNAL
gboolean gtk_menu_tracker_item_get_is_separator (GtkMenuTrackerItem *self);
G_GNUC_INTERNAL
const gchar * gtk_menu_tracker_item_get_label (GtkMenuTrackerItem *self);

View File

@@ -109,7 +109,7 @@ gtk_model_menu_item_set_action_role (GtkModelMenuItem *item,
a11y_role = ATK_ROLE_MENU_ITEM;
break;
case GTK_MENU_TRACKER_ITEM_ROLE_TOGGLE:
case GTK_MENU_TRACKER_ITEM_ROLE_CHECK:
a11y_role = ATK_ROLE_CHECK_MENU_ITEM;
break;