2 #include "gdbus-example-objectmanager-generated.h"
4 /* ---------------------------------------------------------------------------------------------------- */
7 print_objects (GDBusObjectManager *manager)
12 g_print ("Object manager at %s\n", g_dbus_object_manager_get_object_path (manager));
13 objects = g_dbus_object_manager_get_objects (manager);
14 for (l = objects; l != NULL; l = l->next)
16 ExampleObject *object = EXAMPLE_OBJECT (l->data);
19 g_print (" - Object at %s\n", g_dbus_object_get_object_path (G_DBUS_OBJECT (object)));
21 interfaces = g_dbus_object_get_interfaces (G_DBUS_OBJECT (object));
22 for (ll = interfaces; ll != NULL; ll = ll->next)
24 GDBusInterface *interface = G_DBUS_INTERFACE (ll->data);
25 g_print (" - Interface %s\n", g_dbus_interface_get_info (interface)->name);
27 /* Note that @interface is really a GDBusProxy instance - and additionally also
28 * an ExampleAnimal or ExampleCat instance - either of these can be used to
29 * invoke methods on the remote object. For example, the generated function
31 * void example_animal_call_poke_sync (ExampleAnimal *proxy,
33 * gboolean make_happy,
34 * GCancellable *cancellable,
37 * can be used to call the Poke() D-Bus method on the .Animal interface.
38 * Additionally, the generated function
40 * const gchar *example_animal_get_mood (ExampleAnimal *object);
42 * can be used to get the value of the :Mood property.
45 g_list_foreach (interfaces, (GFunc) g_object_unref, NULL);
46 g_list_free (interfaces);
48 g_list_foreach (objects, (GFunc) g_object_unref, NULL);
49 g_list_free (objects);
53 on_object_added (GDBusObjectManager *manager,
58 owner = g_dbus_object_manager_client_get_name_owner (G_DBUS_OBJECT_MANAGER_CLIENT (manager));
59 g_print ("Added object at %s (owner %s)\n", g_dbus_object_get_object_path (object), owner);
64 on_object_removed (GDBusObjectManager *manager,
69 owner = g_dbus_object_manager_client_get_name_owner (G_DBUS_OBJECT_MANAGER_CLIENT (manager));
70 g_print ("Removed object at %s (owner %s)\n", g_dbus_object_get_object_path (object), owner);
75 on_notify_name_owner (GObject *object,
79 GDBusObjectManagerClient *manager = G_DBUS_OBJECT_MANAGER_CLIENT (object);
82 name_owner = g_dbus_object_manager_client_get_name_owner (manager);
83 g_print ("name-owner: %s\n", name_owner);
88 on_interface_proxy_properties_changed (GDBusObjectManagerClient *manager,
89 GDBusObjectProxy *object_proxy,
90 GDBusProxy *interface_proxy,
91 GVariant *changed_properties,
92 const gchar *const *invalidated_properties,
100 g_print ("Properties Changed on %s:\n", g_dbus_object_get_object_path (G_DBUS_OBJECT (object_proxy)));
101 g_variant_iter_init (&iter, changed_properties);
102 while (g_variant_iter_next (&iter, "{&sv}", &key, &value))
104 s = g_variant_print (value, TRUE);
105 g_print (" %s -> %s\n", key, s);
106 g_variant_unref (value);
112 main (gint argc, gchar *argv[])
114 GDBusObjectManager *manager;
124 loop = g_main_loop_new (NULL, FALSE);
127 manager = example_object_manager_client_new_for_bus_sync (G_BUS_TYPE_SESSION,
128 G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE,
129 "org.gtk.GDBus.Examples.ObjectManager",
131 NULL, /* GCancellable */
135 g_printerr ("Error getting object manager client: %s", error->message);
136 g_error_free (error);
140 name_owner = g_dbus_object_manager_client_get_name_owner (G_DBUS_OBJECT_MANAGER_CLIENT (manager));
141 g_print ("name-owner: %s\n", name_owner);
144 print_objects (manager);
146 g_signal_connect (manager,
147 "notify::name-owner",
148 G_CALLBACK (on_notify_name_owner),
150 g_signal_connect (manager,
152 G_CALLBACK (on_object_added),
154 g_signal_connect (manager,
156 G_CALLBACK (on_object_removed),
158 g_signal_connect (manager,
159 "interface-proxy-properties-changed",
160 G_CALLBACK (on_interface_proxy_properties_changed),
163 g_main_loop_run (loop);
167 g_object_unref (manager);
169 g_main_loop_unref (loop);