GtkApplication: use activate for actions here, too

This commit is contained in:
Matthias Clasen 2011-11-26 13:06:04 -05:00 committed by Ryan Lortie
parent bf03adcdeb
commit 92af3d04b8

View File

@ -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);