mirror of
				https://gitlab.gnome.org/GNOME/glib.git
				synced 2025-11-04 01:58:54 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			123 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#include <gio/gio.h>
 | 
						|
#include <stdlib.h>
 | 
						|
#include <string.h>
 | 
						|
 | 
						|
static void
 | 
						|
activate (GApplication *application)
 | 
						|
{
 | 
						|
  g_application_hold (application);
 | 
						|
  g_print ("activated\n");
 | 
						|
  g_application_release (application);
 | 
						|
}
 | 
						|
 | 
						|
static void
 | 
						|
activate_action (GAction  *action,
 | 
						|
                 GVariant *parameter,
 | 
						|
                 gpointer  data)
 | 
						|
{
 | 
						|
  GApplication *application = G_APPLICATION (data);
 | 
						|
 | 
						|
  g_application_hold (application);
 | 
						|
  g_print ("action %s activated\n", g_action_get_name (action));
 | 
						|
  g_application_release (application);
 | 
						|
}
 | 
						|
 | 
						|
static void
 | 
						|
activate_toggle_action (GSimpleAction *action,
 | 
						|
                        GVariant      *parameter,
 | 
						|
                        gpointer       data)
 | 
						|
{
 | 
						|
  GApplication *application = G_APPLICATION (data);
 | 
						|
  GVariant *state;
 | 
						|
  gboolean b;
 | 
						|
 | 
						|
  g_print ("action %s activated\n", g_action_get_name (G_ACTION (action)));
 | 
						|
 | 
						|
  g_application_hold (application);
 | 
						|
  state = g_action_get_state (G_ACTION (action));
 | 
						|
  b = g_variant_get_boolean (state);
 | 
						|
  g_variant_unref (state);
 | 
						|
  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)
 | 
						|
{
 | 
						|
  GSimpleAction *action;
 | 
						|
 | 
						|
  action = g_simple_action_new ("simple-action", NULL);
 | 
						|
  g_signal_connect (action, "activate", G_CALLBACK (activate_action), app);
 | 
						|
  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_action_map_add_action (G_ACTION_MAP (app), G_ACTION (action));
 | 
						|
  g_object_unref (action);
 | 
						|
}
 | 
						|
 | 
						|
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
 | 
						|
main (int argc, char **argv)
 | 
						|
{
 | 
						|
  GApplication *app;
 | 
						|
  int status;
 | 
						|
 | 
						|
  app = g_application_new ("org.gtk.TestApplication", 0);
 | 
						|
  g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
 | 
						|
  g_application_set_inactivity_timeout (app, 10000);
 | 
						|
 | 
						|
  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);
 | 
						|
 | 
						|
  return status;
 | 
						|
}
 |