1#include <gio/gio.h>
2
3static gchar *opt_name = NULL;
4static gboolean opt_system_bus = FALSE;
5static gboolean opt_auto_start = FALSE;
6
7static GOptionEntry opt_entries[] =
8{
9 { "name", 'n', 0, G_OPTION_ARG_STRING, &opt_name, "Name to watch", NULL },
10 { "system-bus", 's', 0, G_OPTION_ARG_NONE, &opt_system_bus, "Use the system-bus instead of the session-bus", NULL },
11 { "auto-start", 'a', 0, G_OPTION_ARG_NONE, &opt_auto_start, "Instruct the bus to launch an owner for the name", NULL},
12 { NULL}
13};
14
15static void
16on_name_appeared (GDBusConnection *connection,
17 const gchar *name,
18 const gchar *name_owner,
19 gpointer user_data)
20{
21 g_print (format: "Name %s on %s is owned by %s\n",
22 name,
23 opt_system_bus ? "the system bus" : "the session bus",
24 name_owner);
25}
26
27static void
28on_name_vanished (GDBusConnection *connection,
29 const gchar *name,
30 gpointer user_data)
31{
32 g_print (format: "Name %s does not exist on %s\n",
33 name,
34 opt_system_bus ? "the system bus" : "the session bus");
35}
36
37int
38main (int argc, char *argv[])
39{
40 guint watcher_id;
41 GMainLoop *loop;
42 GOptionContext *opt_context;
43 GError *error;
44 GBusNameWatcherFlags flags;
45
46 error = NULL;
47 opt_context = g_option_context_new (parameter_string: "g_bus_watch_name() example");
48 g_option_context_set_summary (context: opt_context,
49 summary: "Example: to watch the power manager on the session bus, use:\n"
50 "\n"
51 " ./example-watch-name -n org.gnome.PowerManager");
52 g_option_context_add_main_entries (context: opt_context, entries: opt_entries, NULL);
53 if (!g_option_context_parse (context: opt_context, argc: &argc, argv: &argv, error: &error))
54 {
55 g_printerr (format: "Error parsing options: %s", error->message);
56 goto out;
57 }
58 if (opt_name == NULL)
59 {
60 g_printerr (format: "Incorrect usage, try --help.\n");
61 goto out;
62 }
63
64 flags = G_BUS_NAME_WATCHER_FLAGS_NONE;
65 if (opt_auto_start)
66 flags |= G_BUS_NAME_WATCHER_FLAGS_AUTO_START;
67
68 watcher_id = g_bus_watch_name (bus_type: opt_system_bus ? G_BUS_TYPE_SYSTEM : G_BUS_TYPE_SESSION,
69 name: opt_name,
70 flags,
71 name_appeared_handler: on_name_appeared,
72 name_vanished_handler: on_name_vanished,
73 NULL,
74 NULL);
75
76 loop = g_main_loop_new (NULL, FALSE);
77 g_main_loop_run (loop);
78
79 g_bus_unwatch_name (watcher_id);
80
81 out:
82 g_option_context_free (context: opt_context);
83 g_free (mem: opt_name);
84
85 return 0;
86}
87

source code of gtk/subprojects/glib/gio/tests/gdbus-example-watch-name.c