diff --git a/daemon/gdm-session-worker.c b/daemon/gdm-session-worker.c index b77a18f..095b6f7 100644 --- a/daemon/gdm-session-worker.c +++ b/daemon/gdm-session-worker.c @@ -2158,18 +2158,6 @@ do_setup (GdmSessionWorker *worker) g_dbus_method_invocation_take_error (worker->priv->pending_invocation, error); } worker->priv->pending_invocation = 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); } static void @@ -2263,6 +2251,18 @@ on_settings_is_loaded_changed (GdmSessionSettings *user_settings, return; } + /* 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); + if (worker->priv->state == GDM_SESSION_WORKER_STATE_NONE) { g_debug ("GdmSessionWorker: queuing setup for user: %s %s", worker->priv->username, worker->priv->display_device); @@ -2546,6 +2546,15 @@ gdm_session_worker_handle_setup (GdmDBusWorker *object, worker->priv->display_is_local = display_is_local; worker->priv->username = NULL; + g_signal_connect_swapped (worker->priv->user_settings, + "notify::language-name", + G_CALLBACK (on_saved_language_name_read), + worker); + + g_signal_connect_swapped (worker->priv->user_settings, + "notify::session-name", + G_CALLBACK (on_saved_session_name_read), + worker); return TRUE; }