Index: gdm-3.19.90/daemon/gdm-session-worker.c =================================================================== --- gdm-3.19.90.orig/daemon/gdm-session-worker.c +++ gdm-3.19.90/daemon/gdm-session-worker.c @@ -175,6 +175,8 @@ struct GdmSessionWorkerPrivate GdmSessionSettings *user_settings; GDBusMethodInvocation *pending_invocation; + + char *suse_session_name; }; enum { @@ -1045,6 +1047,9 @@ gdm_session_worker_initialize_pam (GdmSe gdm_session_worker_set_environment_variable (worker, "XDG_SESSION_CLASS", "greeter"); } + 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; @@ -2306,6 +2311,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); @@ -2313,6 +2324,23 @@ 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_display_mode (GdmDBusWorker *object, GDBusMethodInvocation *invocation, const char *str) @@ -3119,6 +3147,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_display_mode = gdm_session_worker_handle_set_session_display_mode; interface->handle_set_environment_variable = gdm_session_worker_handle_set_environment_variable; interface->handle_start_program = gdm_session_worker_handle_start_program; @@ -3236,6 +3265,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.19.90/daemon/gdm-session-worker.xml =================================================================== --- gdm-3.19.90.orig/daemon/gdm-session-worker.xml +++ gdm-3.19.90/daemon/gdm-session-worker.xml @@ -13,6 +13,9 @@ + + + Index: gdm-3.19.90/daemon/gdm-session.c =================================================================== --- gdm-3.19.90.orig/daemon/gdm-session.c +++ gdm-3.19.90/daemon/gdm-session.c @@ -190,6 +190,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) @@ -607,6 +609,9 @@ get_default_session_name (GdmSession *se static void gdm_session_defaults_changed (GdmSession *self) { + GHashTableIter iter; + gpointer key, value; + const char *text; update_session_type (self); @@ -616,6 +621,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 @@ -924,6 +942,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); @@ -931,6 +953,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); + } } }