summaryrefslogtreecommitdiff
path: root/gui/simple-greeter
diff options
context:
space:
mode:
Diffstat (limited to 'gui/simple-greeter')
-rw-r--r--gui/simple-greeter/gdm-user-manager.c29
1 files changed, 27 insertions, 2 deletions
diff --git a/gui/simple-greeter/gdm-user-manager.c b/gui/simple-greeter/gdm-user-manager.c
index be2888d3..d71fb727 100644
--- a/gui/simple-greeter/gdm-user-manager.c
+++ b/gui/simple-greeter/gdm-user-manager.c
@@ -96,6 +96,7 @@ struct GdmUserManagerPrivate
gboolean include_all;
guint load_id;
+ guint reload_passwd_id;
guint ck_history_id;
guint8 users_dirty : 1;
@@ -1556,6 +1557,25 @@ queue_load_users (GdmUserManager *manager)
manager->priv->load_id = g_idle_add ((GSourceFunc)load_users_idle, manager);
}
+static gboolean
+reload_passwd_idle (GdmUserManager *manager)
+{
+ reload_passwd (manager);
+ manager->priv->reload_passwd_id = 0;
+
+ return FALSE;
+}
+
+static void
+queue_reload_passwd (GdmUserManager *manager)
+{
+ if (manager->priv->reload_passwd_id > 0) {
+ g_source_remove (manager->priv->reload_passwd_id);
+ }
+
+ manager->priv->reload_passwd_id = g_timeout_add_seconds (5, (GSourceFunc)reload_passwd_idle, manager);
+}
+
static void
reload_shells (GdmUserManager *manager)
{
@@ -1593,7 +1613,7 @@ on_shells_monitor_changed (GFileMonitor *monitor,
}
reload_shells (manager);
- reload_passwd (manager);
+ queue_reload_passwd (manager);
}
static void
@@ -1608,7 +1628,7 @@ on_passwd_monitor_changed (GFileMonitor *monitor,
return;
}
- reload_passwd (manager);
+ queue_reload_passwd (manager);
}
static void
@@ -1814,6 +1834,11 @@ gdm_user_manager_finalize (GObject *object)
manager->priv->load_id = 0;
}
+ if (manager->priv->reload_passwd_id > 0) {
+ g_source_remove (manager->priv->reload_passwd_id);
+ manager->priv->reload_passwd_id = 0;
+ }
+
g_hash_table_destroy (manager->priv->sessions);
g_file_monitor_cancel (manager->priv->passwd_monitor);