Index: gdm-3.9.5/daemon/gdm-session-worker.c =================================================================== --- gdm-3.9.5.orig/daemon/gdm-session-worker.c +++ gdm-3.9.5/daemon/gdm-session-worker.c @@ -171,6 +171,8 @@ struct GdmSessionWorkerPrivate GdmSessionSettings *user_settings; GDBusMethodInvocation *pending_invocation; + + char *suse_session_name; }; enum { @@ -1157,6 +1159,9 @@ gdm_session_worker_initialize_pam (GdmSe g_free (pam_xauth); #endif + if (worker->priv->suse_session_name) + gdm_session_worker_set_environment_variable (worker, "DESKTOP_SESSION", worker->priv->suse_session_name); + g_debug ("GdmSessionWorker: state SETUP_COMPLETE"); worker->priv->state = GDM_SESSION_WORKER_STATE_SETUP_COMPLETE; @@ -2102,6 +2107,12 @@ gdm_session_worker_handle_set_session_na { GdmSessionWorker *worker = GDM_SESSION_WORKER (object); g_debug ("GdmSessionWorker: session name set to %s", session_name); + + if (worker->priv->pam_handle != NULL) + gdm_session_worker_set_environment_variable (worker, "DESKTOP_SESSION", session_name); + g_free (worker->priv->suse_session_name); + worker->priv->suse_session_name = g_strdup (session_name); + gdm_session_settings_set_session_name (worker->priv->user_settings, session_name); gdm_dbus_worker_complete_set_session_name (object, invocation); @@ -2109,6 +2120,24 @@ gdm_session_worker_handle_set_session_na } static gboolean +gdm_session_worker_handle_set_default_session_name (GdmDBusWorker *object, + GDBusMethodInvocation *invocation, + const char *session_name) +{ + GdmSessionWorker *worker = GDM_SESSION_WORKER (object); + g_debug ("GdmSessionWorker: default session name set to %s", session_name); + + if (worker->priv->pam_handle != NULL) + gdm_session_worker_set_environment_variable (worker, "DESKTOP_SESSION", session_name); + g_free (worker->priv->suse_session_name); + worker->priv->suse_session_name = g_strdup (session_name); + + gdm_dbus_worker_complete_set_default_session_name (object, invocation); + return TRUE; +} + + +static gboolean gdm_session_worker_handle_set_session_type (GdmDBusWorker *object, GDBusMethodInvocation *invocation, const char *session_type) @@ -2903,6 +2932,7 @@ worker_interface_init (GdmDBusWorkerIfac interface->handle_open = gdm_session_worker_handle_open; interface->handle_set_language_name = gdm_session_worker_handle_set_language_name; interface->handle_set_session_name = gdm_session_worker_handle_set_session_name; + interface->handle_set_default_session_name = gdm_session_worker_handle_set_default_session_name; interface->handle_set_session_type = gdm_session_worker_handle_set_session_type; interface->handle_set_environment_variable = gdm_session_worker_handle_set_environment_variable; interface->handle_start_program = gdm_session_worker_handle_start_program; @@ -3015,6 +3045,8 @@ gdm_session_worker_finalize (GObject *ob g_hash_table_unref (worker->priv->reauthentication_requests); + g_free (worker->priv->suse_session_name); + G_OBJECT_CLASS (gdm_session_worker_parent_class)->finalize (object); } Index: gdm-3.9.5/daemon/gdm-session-worker.xml =================================================================== --- gdm-3.9.5.orig/daemon/gdm-session-worker.xml +++ gdm-3.9.5/daemon/gdm-session-worker.xml @@ -13,6 +13,9 @@ + + + Index: gdm-3.9.5/daemon/gdm-session.c =================================================================== --- gdm-3.9.5.orig/daemon/gdm-session.c +++ gdm-3.9.5/daemon/gdm-session.c @@ -165,6 +165,8 @@ G_DEFINE_TYPE (GdmSession, gdm_session, G_TYPE_OBJECT); +static const char *get_session_name (GdmSession *self); + static GdmSessionConversation * find_conversation_by_name (GdmSession *self, const char *service_name) @@ -601,6 +603,9 @@ get_default_session_name (GdmSession *se static void gdm_session_defaults_changed (GdmSession *self) { + GHashTableIter iter; + gpointer key, value; + const char *text; if (self->priv->greeter_interface != NULL) { gdm_dbus_greeter_emit_default_language_name_changed (self->priv->greeter_interface, @@ -608,6 +613,19 @@ gdm_session_defaults_changed (GdmSession gdm_dbus_greeter_emit_default_session_name_changed (self->priv->greeter_interface, get_default_session_name (self)); } + + text = get_session_name (self); + + g_hash_table_iter_init (&iter, self->priv->conversations); + while (g_hash_table_iter_next (&iter, &key, &value)) { + GdmSessionConversation *conversation; + + conversation = (GdmSessionConversation *) value; + + gdm_dbus_worker_call_set_default_session_name (conversation->worker_proxy, + text, + NULL, NULL, NULL); + } } void @@ -916,6 +934,10 @@ worker_on_saved_session_name_read (GdmDB if (strcmp (session_name, get_default_session_name (self)) != 0) { + GHashTableIter iter; + gpointer key, value; + const char *text; + g_free (self->priv->saved_session); self->priv->saved_session = g_strdup (session_name); @@ -923,6 +945,19 @@ worker_on_saved_session_name_read (GdmDB gdm_dbus_greeter_emit_default_session_name_changed (self->priv->greeter_interface, session_name); } + + text = get_session_name (self); + + g_hash_table_iter_init (&iter, self->priv->conversations); + while (g_hash_table_iter_next (&iter, &key, &value)) { + GdmSessionConversation *conversation; + + conversation = (GdmSessionConversation *) value; + + gdm_dbus_worker_call_set_default_session_name (conversation->worker_proxy, + text, + NULL, NULL, NULL); + } } }