docs: various small fixes
[platform/upstream/glib.git] / gio / tests / gapplication-example-actions.c
index 4bb7fc6..7aaa41e 100644 (file)
@@ -15,7 +15,7 @@ activate_action (GAction  *action,
                  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));
@@ -23,46 +23,70 @@ activate_action (GAction  *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
@@ -77,6 +101,19 @@ main (int argc, char **argv)
 
   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);