diff --git a/daemon/gdm-session-worker.c b/daemon/gdm-session-worker.c index c1ac7cf..a5de412 100644 --- a/daemon/gdm-session-worker.c +++ b/daemon/gdm-session-worker.c @@ -149,6 +149,9 @@ typedef int (* GdmSessionWorkerPamNewMessagesFunc) (int, const struct pam_message **, struct pam_response **, gpointer); +static void on_saved_session_name_read (GdmSessionWorker *worker); +static void on_saved_language_name_read (GdmSessionWorker *worker); +static void on_saved_layout_name_read (GdmSessionWorker *worker); G_DEFINE_TYPE (GdmSessionWorker, gdm_session_worker, G_TYPE_OBJECT) @@ -617,6 +620,21 @@ attempt_to_load_user_settings (GdmSessionWorker *worker, passwd_entry->pw_dir, NULL); + /* These singal handlers should be disconnected after the loading, + * so that gdm_session_settings_set_* APIs don't cause the emitting + * of Saved*NameRead D-Bus signals any more. + */ + g_signal_handlers_disconnect_by_func (worker->priv->user_settings, + G_CALLBACK (on_saved_session_name_read), + worker); + + g_signal_handlers_disconnect_by_func (worker->priv->user_settings, + G_CALLBACK (on_saved_language_name_read), + worker); + + g_signal_handlers_disconnect_by_func (worker->priv->user_settings, + G_CALLBACK (on_saved_layout_name_read), + worker); seteuid (old_uid); setegid (old_gid); }