forked from AuroraMiddleware/gtk
GtkApplication: use activate for actions here, too
This commit is contained in:
parent
bf03adcdeb
commit
92af3d04b8
@ -359,6 +359,7 @@ typedef struct {
|
||||
gchar *target;
|
||||
gulong enabled_changed_id;
|
||||
gulong state_changed_id;
|
||||
gulong activate_handler;
|
||||
} ActionData;
|
||||
|
||||
static void
|
||||
@ -393,44 +394,16 @@ item_activated (GtkWidget *w,
|
||||
gpointer data)
|
||||
{
|
||||
ActionData *a;
|
||||
GVariant *parameter;
|
||||
|
||||
a = g_object_get_data (G_OBJECT (w), "action");
|
||||
g_action_group_activate_action (a->group, a->name, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
toggle_item_toggled (GtkCheckMenuItem *w,
|
||||
gpointer data)
|
||||
{
|
||||
ActionData *a;
|
||||
gboolean b;
|
||||
|
||||
a = g_object_get_data (G_OBJECT (w), "action");
|
||||
b = gtk_check_menu_item_get_active (w);
|
||||
g_action_group_change_action_state (a->group, a->name,
|
||||
g_variant_new_boolean (b));
|
||||
}
|
||||
|
||||
static void
|
||||
radio_item_toggled (GtkCheckMenuItem *w,
|
||||
gpointer data)
|
||||
{
|
||||
ActionData *a;
|
||||
GVariant *v;
|
||||
|
||||
a = g_object_get_data (G_OBJECT (w), "action");
|
||||
if (gtk_check_menu_item_get_active (w))
|
||||
{
|
||||
g_action_group_change_action_state (a->group, a->name,
|
||||
g_variant_new_string (a->target));
|
||||
}
|
||||
if (a->target)
|
||||
parameter = g_variant_ref_sink (g_variant_new_string (a->target));
|
||||
else
|
||||
{
|
||||
v = g_action_group_get_action_state (a->group, a->name);
|
||||
if (g_strcmp0 (g_variant_get_string (v, NULL), a->target) == 0)
|
||||
gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (w), TRUE);
|
||||
g_variant_unref (v);
|
||||
}
|
||||
parameter = NULL;
|
||||
g_action_group_activate_action (a->group, a->name, parameter);
|
||||
if (parameter)
|
||||
g_variant_unref (parameter);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -439,7 +412,12 @@ toggle_state_changed (GActionGroup *group,
|
||||
GVariant *state,
|
||||
GtkCheckMenuItem *w)
|
||||
{
|
||||
ActionData *a;
|
||||
|
||||
a = g_object_get_data (G_OBJECT (w), "action");
|
||||
g_signal_handler_block (w, a->activate_handler);
|
||||
gtk_check_menu_item_set_active (w, g_variant_get_boolean (state));
|
||||
g_signal_handler_unblock (w, a->activate_handler);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -452,9 +430,10 @@ radio_state_changed (GActionGroup *group,
|
||||
gboolean b;
|
||||
|
||||
a = g_object_get_data (G_OBJECT (w), "action");
|
||||
g_signal_handler_block (w, a->activate_handler);
|
||||
b = g_strcmp0 (a->target, g_variant_get_string (state, NULL)) == 0;
|
||||
|
||||
gtk_check_menu_item_set_active (w, b);
|
||||
g_signal_handler_unblock (w, a->activate_handler);
|
||||
}
|
||||
|
||||
static GtkWidget *
|
||||
@ -507,12 +486,15 @@ create_menuitem_from_model (GMenuModel *model,
|
||||
a->enabled_changed_id = g_signal_connect (group, s,
|
||||
G_CALLBACK (enabled_changed), w);
|
||||
g_free (s);
|
||||
a->activate_handler = g_signal_connect (w, "activate",
|
||||
G_CALLBACK (item_activated), NULL);
|
||||
|
||||
if (type == NULL)
|
||||
g_signal_connect (w, "activate", G_CALLBACK (item_activated), NULL);
|
||||
{
|
||||
/* all set */
|
||||
}
|
||||
else if (g_variant_type_equal (type, G_VARIANT_TYPE_BOOLEAN))
|
||||
{
|
||||
g_signal_connect (w, "toggled", G_CALLBACK (toggle_item_toggled), NULL);
|
||||
s = g_strconcat ("action-state-changed::", action, NULL);
|
||||
a->state_changed_id = g_signal_connect (group, s,
|
||||
G_CALLBACK (toggle_state_changed), w);
|
||||
@ -524,7 +506,6 @@ create_menuitem_from_model (GMenuModel *model,
|
||||
}
|
||||
else if (g_variant_type_equal (type, G_VARIANT_TYPE_STRING))
|
||||
{
|
||||
g_signal_connect (w, "toggled", G_CALLBACK (radio_item_toggled), NULL);
|
||||
s = g_strconcat ("action-state-changed::", action, NULL);
|
||||
a->state_changed_id = g_signal_connect (group, s,
|
||||
G_CALLBACK (radio_state_changed), w);
|
||||
|
Loading…
Reference in New Issue
Block a user