Files
RedBear-OS/local/recipes/libs/glib/source/gio/tests/gapplication-example-actions.c
T
vasilito cee25393d8 fix: boot process improvements — dependency cycle, INIT_NOTIFY, probing loop, and log spam fixes
- Fix P15-8-init-cycle-detection.patch: replace visiting+error with seen+silent-skip
  to eliminate 11 false-positive 'dependency cycle detected' errors on shared deps
- Fix P0-daemon-fix-init-notify-unwrap.patch: remove eprintln! for missing
  INIT_NOTIFY (expected for oneshot_async services, ~7 daemons affected)
- Fix driver-manager hotplug loop: add PERMANENTLY_SKIPPED static set shared
  between hotplug handler and DriverConfig::probe() to stop infinite re-probing
  of Fatal/NotSupported/deferred-exhausted device+driver pairs (e.g. ided)
- Fix driver-manager log_timeline: suppress repeated EPIPE/ENOENT errors with
  AtomicI32 dedup and AtomicBool one-shot guards for boot timeline JSON
- Add driver-manager SIGTERM handler, ACPI bus registration, --status mode,
  driver reap loop, graceful shutdown, and reduced deferred retries (30→3)
2026-05-17 12:34:02 +03:00

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;
}