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:
@@ -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 ();
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user