Blame SOURCES/0003-daemon-Infer-session-type-from-desktop-file-if-user-.patch

4e44f9
From 7084aea50bdc16ccecb4474ca79403429e79ec0e Mon Sep 17 00:00:00 2001
4e44f9
From: Ray Strode <rstrode@redhat.com>
4e44f9
Date: Wed, 29 Sep 2021 11:03:41 -0400
4e44f9
Subject: [PATCH 3/5] daemon: Infer session type from desktop file if user has
4e44f9
 no saved session type
4e44f9
4e44f9
The accountsservice user cache file can specify a session type
4e44f9
associated with the saved session.  This is optional though. If one
4e44f9
isn't specified GDM needs to figure out the session type based on the
4e44f9
list of preferred session types for the system and the session file
4e44f9
itself.
4e44f9
4e44f9
It was failing to do the latter, though.  This commit fixes that.
4e44f9
---
4e44f9
 daemon/gdm-session.c | 2 ++
4e44f9
 1 file changed, 2 insertions(+)
4e44f9
4e44f9
diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
4e44f9
index b54687d5..a65fa0f9 100644
4e44f9
--- a/daemon/gdm-session.c
4e44f9
+++ b/daemon/gdm-session.c
4e44f9
@@ -1009,60 +1009,62 @@ worker_on_saved_language_name_read (GdmDBusWorker          *worker,
4e44f9
                 }
4e44f9
         }
4e44f9
 }
4e44f9
 
4e44f9
 static void
4e44f9
 worker_on_saved_session_name_read (GdmDBusWorker          *worker,
4e44f9
                                    const char             *session_name,
4e44f9
                                    GdmSessionConversation *conversation)
4e44f9
 {
4e44f9
         GdmSession *self = conversation->session;
4e44f9
 
4e44f9
         if (! get_session_command_for_name (self, session_name, self->saved_session_type, NULL)) {
4e44f9
                 /* ignore sessions that don't exist */
4e44f9
                 g_debug ("GdmSession: not using invalid .dmrc session: %s", session_name);
4e44f9
                 g_free (self->saved_session);
4e44f9
                 self->saved_session = NULL;
4e44f9
                 update_session_type (self);
4e44f9
         } else {
4e44f9
                 if (strcmp (session_name,
4e44f9
                             get_default_session_name (self)) != 0) {
4e44f9
                         g_free (self->saved_session);
4e44f9
                         self->saved_session = g_strdup (session_name);
4e44f9
 
4e44f9
                         if (self->greeter_interface != NULL) {
4e44f9
                                 gdm_dbus_greeter_emit_default_session_name_changed (self->greeter_interface,
4e44f9
                                                                                     session_name);
4e44f9
                         }
4e44f9
                 }
4e44f9
                 if (self->saved_session_type != NULL)
4e44f9
                         set_session_type (self, self->saved_session_type);
4e44f9
+                else
4e44f9
+                        update_session_type (self);
4e44f9
         }
4e44f9
 
4e44f9
 }
4e44f9
 
4e44f9
 static void
4e44f9
 worker_on_saved_session_type_read (GdmDBusWorker          *worker,
4e44f9
                                    const char             *session_type,
4e44f9
                                    GdmSessionConversation *conversation)
4e44f9
 {
4e44f9
         GdmSession *self = conversation->session;
4e44f9
 
4e44f9
         g_free (self->saved_session_type);
4e44f9
         self->saved_session_type = g_strdup (session_type);
4e44f9
 }
4e44f9
 
4e44f9
 static GdmSessionConversation *
4e44f9
 find_conversation_by_pid (GdmSession *self,
4e44f9
                           GPid        pid)
4e44f9
 {
4e44f9
         GHashTableIter iter;
4e44f9
         gpointer key, value;
4e44f9
 
4e44f9
         g_hash_table_iter_init (&iter, self->conversations);
4e44f9
         while (g_hash_table_iter_next (&iter, &key, &value)) {
4e44f9
                 GdmSessionConversation *conversation;
4e44f9
 
4e44f9
                 conversation = (GdmSessionConversation *) value;
4e44f9
 
4e44f9
                 if (conversation->worker_pid == pid) {
4e44f9
                         return conversation;
4e44f9
-- 
4e44f9
2.34.1
4e44f9