aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/users-service-dbus.c41
1 files changed, 34 insertions, 7 deletions
diff --git a/src/users-service-dbus.c b/src/users-service-dbus.c
index 03d1144..07ce889 100644
--- a/src/users-service-dbus.c
+++ b/src/users-service-dbus.c
@@ -58,6 +58,8 @@ static void user_added (DBusGProxy *proxy
static void user_deleted (DBusGProxy *proxy,
const gchar *user_id,
gpointer user_data);
+static void user_changed (DBusGProxy *proxy,
+ gpointer user_data);
static void seat_proxy_session_added (DBusGProxy *seat_proxy,
const gchar *session_id,
UsersServiceDbus *service);
@@ -753,21 +755,37 @@ sync_users (UsersServiceDbus *self)
continue;
}
+
+ user = g_hash_table_lookup (priv->users, id);
// Double check we havent processed this user already
- if (users_service_dbus_get_user_by_username (self,
- g_value_get_string (g_hash_table_lookup (properties, "UserName"))) != NULL)
+ if (user != NULL)
{
- continue;
+ g_free(user->user_name);
+ g_free(user->real_name);
+ g_free(user->icon_file);
+ user->real_name_conflict = FALSE;
+ //continue;
}
-
- user = g_new0 (UserData, 1);
-
+ else
+ {
+ user = g_new0 (UserData, 1);
+ }
+ // Can't subscribe to the Changed signal on each individual user path
+ // for some reason.
+ /*dbus_g_proxy_add_signal (proxy,
+ "Changed",
+ G_TYPE_INVALID);
+
+ dbus_g_proxy_connect_signal (proxy, "Changed",
+ G_CALLBACK(user_changed),
+ self,
+ NULL);*/
user->uid = g_value_get_uint64 (g_hash_table_lookup (properties, "Uid"));
user->user_name = g_strdup (g_value_get_string (g_hash_table_lookup (properties, "UserName")));
user->real_name = g_strdup (g_value_get_string (g_hash_table_lookup (properties, "RealName")));
user->icon_file = g_strdup (g_value_get_string (g_hash_table_lookup (properties, "IconFile")));
user->real_name_conflict = FALSE;
- user->menuitem = NULL;
+ user->menuitem = NULL;
g_hash_table_unref (properties);
@@ -783,6 +801,15 @@ sync_users (UsersServiceDbus *self)
}
static void
+user_changed (DBusGProxy *proxy,
+ gpointer user_data)
+{
+ g_debug ("JUST RESYNCED THE USERS FROM A USER CHANGE");
+ UsersServiceDbus *service = (UsersServiceDbus *)user_data;
+ sync_users (service);
+}
+
+static void
user_added (DBusGProxy *proxy,
const gchar *user_id,
gpointer user_data)