summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIain Lane <iainl@gnome.org>2020-04-28 16:47:00 +0100
committerRay Strode <halfline@gmail.com>2020-05-04 13:03:54 +0000
commit323707648fdefd11502faf44c2aa41d9b9500078 (patch)
treeb4ba36dca9ef2a317413ea7b02c383f36c37895f
parent229a772888b24184b4f3024efd9d40e8ff46d27c (diff)
act-user-manager: Watch for the daemon going away and coming back
And set is-loaded accordingly. This causes properties to be invalidated on the client side and then get re-fetched when the daemon comes back. https://gitlab.freedesktop.org/accountsservice/accountsservice/issues/55
-rw-r--r--src/libaccountsservice/act-user-manager.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/libaccountsservice/act-user-manager.c b/src/libaccountsservice/act-user-manager.c
index 61a8719..a317507 100644
--- a/src/libaccountsservice/act-user-manager.c
+++ b/src/libaccountsservice/act-user-manager.c
@@ -2298,6 +2298,23 @@ act_user_manager_queue_load (ActUserManager *manager)
}
}
+static void
+on_name_owner_changed (GObject *object,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ ActUserManager *manager = ACT_USER_MANAGER (user_data);
+ GDBusProxy *accounts_proxy = G_DBUS_PROXY (object);
+ g_autofree gchar *owner = NULL;
+
+ g_return_if_fail (ACT_IS_USER_MANAGER (manager));
+ g_return_if_fail (accounts_proxy != NULL);
+
+ owner = g_dbus_proxy_get_name_owner (accounts_proxy);
+
+ set_is_loaded (manager, owner != NULL);
+}
+
static gboolean
ensure_accounts_proxy (ActUserManager *manager)
{
@@ -2335,6 +2352,10 @@ ensure_accounts_proxy (ActUserManager *manager)
"user-deleted",
G_CALLBACK (on_user_removed_in_accounts_service),
manager);
+ g_signal_connect (priv->accounts_proxy,
+ "notify::g-name-owner",
+ G_CALLBACK (on_name_owner_changed),
+ manager);
return TRUE;
}