GVariant *parameter,
gpointer data)
{
- GApplication *application = data;
+ GApplication *application = G_APPLICATION (data);
g_application_hold (application);
g_print ("action %s activated\n", g_action_get_name (action));
}
static void
-activate_toggle_action (GAction *action,
- GVariant *parameter,
- gpointer data)
+activate_toggle_action (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
{
- GApplication *application = data;
+ GApplication *application = G_APPLICATION (data);
GVariant *state;
gboolean b;
- g_application_hold (application);
- g_print ("action %s activated\n", g_action_get_name (action));
+ g_print ("action %s activated\n", g_action_get_name (G_ACTION (action)));
- state = g_action_get_state (action);
+ g_application_hold (application);
+ state = g_action_get_state (G_ACTION (action));
b = g_variant_get_boolean (state);
g_variant_unref (state);
- g_action_set_state (action, g_variant_new_boolean (!b));
-
+ g_simple_action_set_state (action, g_variant_new_boolean (!b));
+ g_print ("state change %d -> %d\n", b, !b);
g_application_release (application);
}
static void
add_actions (GApplication *app)
{
- GSimpleActionGroup *actions;
GSimpleAction *action;
- actions = g_simple_action_group_new ();
-
action = g_simple_action_new ("simple-action", NULL);
g_signal_connect (action, "activate", G_CALLBACK (activate_action), app);
- g_simple_action_group_insert (actions, G_ACTION (action));
+ g_action_map_add_action (G_ACTION_MAP (app), G_ACTION (action));
g_object_unref (action);
action = g_simple_action_new_stateful ("toggle-action", NULL,
g_variant_new_boolean (FALSE));
g_signal_connect (action, "activate", G_CALLBACK (activate_toggle_action), app);
- g_simple_action_group_insert (actions, G_ACTION (action));
+ g_action_map_add_action (G_ACTION_MAP (app), G_ACTION (action));
g_object_unref (action);
+}
- g_application_set_action_group (app, G_ACTION_GROUP (actions));
- g_object_unref (actions);
+static void
+describe_and_activate_action (GActionGroup *group,
+ const gchar *name)
+{
+ const GVariantType *param_type;
+ GVariant *state;
+ gboolean enabled;
+ gchar *tmp;
+
+ param_type = g_action_group_get_action_parameter_type (group, name);
+ state = g_action_group_get_action_state (group, name);
+ enabled = g_action_group_get_action_enabled (group, name);
+
+ g_print ("action name: %s\n", name);
+ tmp = param_type ? g_variant_type_dup_string (param_type) : NULL;
+ g_print ("parameter type: %s\n", tmp ? tmp : "<none>");
+ g_free (tmp);
+ g_print ("state type: %s\n",
+ state ? g_variant_get_type_string (state) : "<none>");
+ tmp = state ? g_variant_print (state, FALSE) : NULL;
+ g_print ("state: %s\n", tmp ? tmp : "<none>");
+ g_free (tmp);
+ g_print ("enabled: %s\n", enabled ? "true" : "false");
+
+ if (state != NULL)
+ g_variant_unref (state);
+
+ g_action_group_activate_action (group, name, NULL);
}
int
add_actions (app);
+ if (argc > 1 && strcmp (argv[1], "--simple-action") == 0)
+ {
+ g_application_register (app, NULL, NULL);
+ describe_and_activate_action (G_ACTION_GROUP (app), "simple-action");
+ exit (0);
+ }
+ else if (argc > 1 && strcmp (argv[1], "--toggle-action") == 0)
+ {
+ g_application_register (app, NULL, NULL);
+ describe_and_activate_action (G_ACTION_GROUP (app), "toggle-action");
+ exit (0);
+ }
+
status = g_application_run (app, argc, argv);
g_object_unref (app);