1 | #include <gio/gio.h> |
2 | |
3 | static void |
4 | on_bus_acquired (GDBusConnection *connection, |
5 | const gchar *name, |
6 | gpointer user_data) |
7 | { |
8 | /* This is where we'd export some objects on the bus */ |
9 | } |
10 | |
11 | static void |
12 | on_name_acquired (GDBusConnection *connection, |
13 | const gchar *name, |
14 | gpointer user_data) |
15 | { |
16 | g_print (format: "Acquired the name %s on the session bus\n" , name); |
17 | } |
18 | |
19 | static void |
20 | on_name_lost (GDBusConnection *connection, |
21 | const gchar *name, |
22 | gpointer user_data) |
23 | { |
24 | g_print (format: "Lost the name %s on the session bus\n" , name); |
25 | } |
26 | |
27 | int |
28 | main (int argc, char *argv[]) |
29 | { |
30 | guint owner_id; |
31 | GMainLoop *loop; |
32 | GBusNameOwnerFlags flags; |
33 | gboolean opt_replace; |
34 | gboolean opt_allow_replacement; |
35 | gchar *opt_name; |
36 | GOptionContext *opt_context; |
37 | GError *error; |
38 | GOptionEntry opt_entries[] = |
39 | { |
40 | { "replace" , 'r', 0, G_OPTION_ARG_NONE, &opt_replace, "Replace existing name if possible" , NULL }, |
41 | { "allow-replacement" , 'a', 0, G_OPTION_ARG_NONE, &opt_allow_replacement, "Allow replacement" , NULL }, |
42 | { "name" , 'n', 0, G_OPTION_ARG_STRING, &opt_name, "Name to acquire" , NULL }, |
43 | { NULL} |
44 | }; |
45 | |
46 | error = NULL; |
47 | opt_name = NULL; |
48 | opt_replace = FALSE; |
49 | opt_allow_replacement = FALSE; |
50 | opt_context = g_option_context_new (parameter_string: "g_bus_own_name() example" ); |
51 | g_option_context_add_main_entries (context: opt_context, entries: opt_entries, NULL); |
52 | if (!g_option_context_parse (context: opt_context, argc: &argc, argv: &argv, error: &error)) |
53 | { |
54 | g_printerr (format: "Error parsing options: %s" , error->message); |
55 | return 1; |
56 | } |
57 | if (opt_name == NULL) |
58 | { |
59 | g_printerr (format: "Incorrect usage, try --help.\n" ); |
60 | return 1; |
61 | } |
62 | |
63 | flags = G_BUS_NAME_OWNER_FLAGS_NONE; |
64 | if (opt_replace) |
65 | flags |= G_BUS_NAME_OWNER_FLAGS_REPLACE; |
66 | if (opt_allow_replacement) |
67 | flags |= G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT; |
68 | |
69 | owner_id = g_bus_own_name (bus_type: G_BUS_TYPE_SESSION, |
70 | name: opt_name, |
71 | flags, |
72 | bus_acquired_handler: on_bus_acquired, |
73 | name_acquired_handler: on_name_acquired, |
74 | name_lost_handler: on_name_lost, |
75 | NULL, |
76 | NULL); |
77 | |
78 | loop = g_main_loop_new (NULL, FALSE); |
79 | g_main_loop_run (loop); |
80 | |
81 | g_bus_unown_name (owner_id); |
82 | |
83 | return 0; |
84 | } |
85 | |