diff options
author | Emmanuele Bassi <ebassi@gmail.com> | 2023-04-13 21:35:13 +0000 |
---|---|---|
committer | Emmanuele Bassi <ebassi@gmail.com> | 2023-04-13 21:35:13 +0000 |
commit | 18ae2a3d4e6dd273697b7b32e710ffd21d723696 (patch) | |
tree | d1ff3249dbb473a686787996e482411ad175678e | |
parent | 2972cb61f5271e35d6b28e2a8c17f5da9e22ba76 (diff) | |
parent | 8d7c1f9b7524dd1ad60fa1727b28c480ed6bd91d (diff) | |
download | glib-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
-rw-r--r-- | gio/tests/gdbus-example-proxy-subclass.c | 102 |
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; } |