summaryrefslogtreecommitdiff
path: root/gio
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gmail.com>2023-04-13 21:35:13 +0000
committerEmmanuele Bassi <ebassi@gmail.com>2023-04-13 21:35:13 +0000
commit18ae2a3d4e6dd273697b7b32e710ffd21d723696 (patch)
treed1ff3249dbb473a686787996e482411ad175678e /gio
parent2972cb61f5271e35d6b28e2a8c17f5da9e22ba76 (diff)
parent8d7c1f9b7524dd1ad60fa1727b28c480ed6bd91d (diff)
downloadglib-18ae2a3d4e6dd273697b7b32e710ffd21d723696.tar.gz
Merge branch '322-proxy-subclass-example' into 'main'
tests: Finish update of gdbus-example-proxy-subclass to new GDBus API Closes #322 See merge request GNOME/glib!3332
Diffstat (limited to 'gio')
-rw-r--r--gio/tests/gdbus-example-proxy-subclass.c102
1 files changed, 102 insertions, 0 deletions
diff --git a/gio/tests/gdbus-example-proxy-subclass.c b/gio/tests/gdbus-example-proxy-subclass.c
index 05314ba2a..91b377c48 100644
--- a/gio/tests/gdbus-example-proxy-subclass.c
+++ b/gio/tests/gdbus-example-proxy-subclass.c
@@ -340,9 +340,111 @@ accounts_user_frobnicate_finish (AccountsUser *user,
}
/* ---------------------------------------------------------------------------------------------------- */
+/* Example usage of the AccountsUser type */
+/* ---------------------------------------------------------------------------------------------------- */
+
+static void
+print_user (AccountsUser *user)
+{
+ g_print (" user-name = `%s'\n", accounts_user_get_user_name (user));
+ g_print (" real-name = `%s'\n", accounts_user_get_real_name (user));
+ g_print (" automatic-login = %s\n", accounts_user_get_automatic_login (user) ? "true" : "false");
+}
+
+static void
+on_changed (AccountsUser *user,
+ gpointer user_data)
+{
+ g_print ("+++ Received the AccountsUser::changed signal\n");
+ print_user (user);
+}
+
+static void
+on_notify (GObject *object,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ AccountsUser *user = ACCOUNTS_USER (object);
+ g_print ("+++ Received the GObject::notify signal for property `%s'\n",
+ pspec->name);
+ print_user (user);
+}
+
+static void
+on_accounts_proxy_available (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GError *error = NULL;
+ GObject *user_object;
+ AccountsUser *user;
+
+ user_object = g_async_initable_new_finish (G_ASYNC_INITABLE (object),
+ result,
+ &error);
+ if (!user_object)
+ {
+ g_error ("Failed to create proxy: %s", error->message);
+ g_clear_error (&error);
+ return;
+ }
+ user = ACCOUNTS_USER (user_object);
+
+ g_print ("+++ Acquired proxy for user\n");
+ print_user (user);
+
+ g_signal_connect (user,
+ "notify",
+ G_CALLBACK (on_notify),
+ NULL);
+ g_signal_connect (user,
+ "changed",
+ G_CALLBACK (on_changed),
+ NULL);
+}
+
+static void
+on_accounts_appeared (GDBusConnection *connection,
+ const gchar *name,
+ const gchar *name_owner,
+ gpointer user_data)
+{
+ g_async_initable_new_async (ACCOUNTS_TYPE_USER, 0, NULL,
+ on_accounts_proxy_available,
+ "g-flags", 0,
+ "g-interface-info", NULL,
+ "g-unique-bus-name", name_owner,
+ "g-connection", connection,
+ "g-object-path", "/org/freedesktop/Accounts/User500",
+ "g-interface-name", "org.freedesktop.Accounts.User");
+}
+
+static void
+on_accounts_vanished (GDBusConnection *connection,
+ const gchar *name,
+ gpointer user_data)
+{
+}
+
+/* ---------------------------------------------------------------------------------------------------- */
gint
main (gint argc, gchar *argv[])
{
+ guint watcher_id;
+ GMainLoop *loop;
+
+ watcher_id = g_bus_watch_name (G_BUS_TYPE_SYSTEM,
+ "org.freedesktop.Accounts",
+ G_BUS_NAME_WATCHER_FLAGS_AUTO_START,
+ on_accounts_appeared,
+ on_accounts_vanished,
+ NULL, NULL);
+
+ loop = g_main_loop_new (NULL, FALSE);
+ g_main_loop_run (loop);
+ g_main_loop_unref (loop);
+ g_bus_unwatch_name (watcher_id);
+
return 0;
}