A few clean ups and fixes in session selection patch

Related: #1985099
This commit is contained in:
Ray Strode 2021-07-28 10:31:42 -04:00
parent 1b44d3556e
commit 224724693b
2 changed files with 94 additions and 23 deletions

View File

@ -1,4 +1,4 @@
From bcf156120aa89cd9ba22bf862c42611e7984e211 Mon Sep 17 00:00:00 2001
From 42958e082c611d2e2f466247e7d8759dfb5f607d Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Fri, 16 Jul 2021 12:34:57 -0400
Subject: [PATCH] local-display-factory: Provide more flexibility for
@ -26,10 +26,10 @@ fall back to "wayland".
daemon/gdm-launch-environment.c | 9 ++
daemon/gdm-local-display-factory.c | 224 ++++++++++++++++++++++++-----
daemon/gdm-manager.c | 11 +-
daemon/gdm-session.c | 109 +++++++-------
daemon/gdm-session.c | 115 ++++++++-------
data/gdm.schemas.in | 10 ++
libgdm/gdm-sessions.c | 72 +++++++---
8 files changed, 355 insertions(+), 118 deletions(-)
8 files changed, 361 insertions(+), 118 deletions(-)
diff --git a/common/gdm-settings-keys.h b/common/gdm-settings-keys.h
index f0059b5c..87685d3c 100644
@ -98,7 +98,7 @@ index f0059b5c..87685d3c 100644
#endif /* _GDM_SETTINGS_KEYS_H */
diff --git a/daemon/gdm-display.c b/daemon/gdm-display.c
index 3a260923..46d5a773 100644
index 3a260923..34467856 100644
--- a/daemon/gdm-display.c
+++ b/daemon/gdm-display.c
@@ -66,83 +66,86 @@ typedef struct _GdmDisplayPrivate
@ -227,8 +227,8 @@ index 3a260923..46d5a773 100644
+ GdmDisplayPrivate *priv;
+ g_autofree char *supported_session_types_string = NULL;
+
+ if (supported_session_types != NULL)
+ supported_session_types_string = g_strjoinv (":", (GStrv) supported_session_types);
+ if (supported_session_types != NULL)
+ supported_session_types_string = g_strjoinv (":", (GStrv) supported_session_types);
+
+ priv = gdm_display_get_instance_private (self);
+ g_debug ("GdmDisplay: supported session types: %s", supported_session_types_string);
@ -1436,7 +1436,7 @@ index 9c10adff..7c291013 100644
}
diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
index a010cecf..9f5e1e3f 100644
index a010cecf..2b941e5e 100644
--- a/daemon/gdm-session.c
+++ b/daemon/gdm-session.c
@@ -106,84 +106,81 @@ struct _GdmSession
@ -1617,21 +1617,21 @@ index a010cecf..9f5e1e3f 100644
- g_array_prepend_val (search_array, wayland_search_dir);
+ if (g_str_equal (supported_type, "wayland") &&
+ (type == NULL || g_str_equal (type, supported_type))) {
+ g_array_append_val (search_array, wayland_search_dir);
- for (i = 0; system_data_dirs[i]; i++) {
- gchar *dir = g_build_filename (system_data_dirs[i], "wayland-sessions", NULL);
- g_array_insert_val (search_array, i, dir);
- }
-#else
- for (i = 0; system_data_dirs[i]; i++) {
- gchar *dir = g_build_filename (system_data_dirs[i], "wayland-sessions", NULL);
- g_array_append_val (search_array, dir);
+ for (i = 0; system_data_dirs[i]; i++) {
+ gchar *dir = g_build_filename (system_data_dirs[i], "wayland-sessions", NULL);
+ g_array_append_val (search_array, dir);
+ }
- for (i = 0; system_data_dirs[i]; i++) {
- gchar *dir = g_build_filename (system_data_dirs[i], "wayland-sessions", NULL);
- g_array_insert_val (search_array, i, dir);
+ g_array_append_val (search_array, wayland_search_dir);
}
-#else
- for (i = 0; system_data_dirs[i]; i++) {
- gchar *dir = g_build_filename (system_data_dirs[i], "wayland-sessions", NULL);
- g_array_append_val (search_array, dir);
- }
-
- g_array_append_val (search_array, wayland_search_dir);
#endif
@ -1667,7 +1667,74 @@ index a010cecf..9f5e1e3f 100644
GError *error = NULL;
gboolean res;
char **search_dirs;
@@ -2230,68 +2235,72 @@ close_conversation (GdmSessionConversation *conversation)
@@ -444,60 +449,66 @@ load_key_file_for_file (GdmSession *self,
g_debug ("GdmSession: %s", error->message);
g_error_free (error);
}
g_key_file_free (key_file);
key_file = NULL;
}
g_strfreev (search_dirs);
return key_file;
}
static gboolean
get_session_command_for_file (GdmSession *self,
const char *file,
const char *type,
char **command)
{
GKeyFile *key_file;
GError *error;
char *exec;
gboolean ret;
gboolean res;
exec = NULL;
ret = FALSE;
if (command != NULL) {
*command = NULL;
}
+ if (!supports_session_type (self, type)) {
+ g_debug ("GdmSession: ignoring %s session command request for file '%s'",
+ type, file);
+ goto out;
+ }
+
g_debug ("GdmSession: getting session command for file '%s'", file);
key_file = load_key_file_for_file (self, file, type, NULL);
if (key_file == NULL) {
goto out;
}
error = NULL;
res = g_key_file_get_boolean (key_file,
G_KEY_FILE_DESKTOP_GROUP,
G_KEY_FILE_DESKTOP_KEY_HIDDEN,
&error);
if (error == NULL && res) {
g_debug ("GdmSession: Session %s is marked as hidden", file);
goto out;
}
exec = g_key_file_get_string (key_file,
G_KEY_FILE_DESKTOP_GROUP,
G_KEY_FILE_DESKTOP_KEY_TRY_EXEC,
NULL);
if (exec != NULL) {
res = is_prog_in_path (exec);
g_free (exec);
exec = NULL;
if (! res) {
g_debug ("GdmSession: Command not found: %s",
G_KEY_FILE_DESKTOP_KEY_TRY_EXEC);
goto out;
}
@@ -2230,68 +2241,72 @@ close_conversation (GdmSessionConversation *conversation)
if (conversation->worker_manager_interface != NULL) {
unexport_worker_manager_interface (self, conversation->worker_manager_interface);
@ -1745,7 +1812,7 @@ index a010cecf..9f5e1e3f 100644
g_hash_table_insert (self->conversations,
g_strdup (service_name), conversation);
return TRUE;
@@ -3162,69 +3171,69 @@ gdm_session_get_session_id (GdmSession *self)
@@ -3162,69 +3177,69 @@ gdm_session_get_session_id (GdmSession *self)
const char *
gdm_session_get_conversation_session_id (GdmSession *self,
@ -1818,7 +1885,7 @@ index a010cecf..9f5e1e3f 100644
} else {
set_session_type (self, NULL);
}
@@ -3513,140 +3522,138 @@ gdm_session_set_property (GObject *object,
@@ -3513,140 +3528,138 @@ gdm_session_set_property (GObject *object,
case PROP_DISPLAY_HOSTNAME:
set_display_hostname (self, g_value_get_string (value));
break;
@ -1965,7 +2032,7 @@ index a010cecf..9f5e1e3f 100644
if (self->worker_server != NULL) {
g_dbus_server_stop (self->worker_server);
@@ -4007,69 +4014,67 @@ gdm_session_class_init (GdmSessionClass *session_class)
@@ -4007,69 +4020,67 @@ gdm_session_class_init (GdmSessionClass *session_class)
PROP_DISPLAY_X11_AUTHORITY_FILE,
g_param_spec_string ("display-x11-authority-file",
"display x11 authority file",
@ -2350,5 +2417,5 @@ index a1322505..f078e04b 100644
* Returns: (transfer full): a %NULL terminated list of session ids
*/
--
2.31.1
2.32.0

View File

@ -11,7 +11,7 @@
Name: gdm
Epoch: 1
Version: 40.1
Release: 1%{?dist}
Release: 2%{?dist}
Summary: The GNOME Display Manager
License: GPLv2+
@ -311,6 +311,10 @@ dconf update || :
%{_libdir}/pkgconfig/gdm-pam-extensions.pc
%changelog
* Wed Jul 28 2021 Ray Strode <rstrode@redhat.com> - 40.1-2
- A few clean ups and fixes in session selection patch
Related: #1985099
* Fri Jul 23 2021 Ray Strode <rstrode@redhat.com> - 40.1-1
- Update to 40.1
- Allow vendor nvidia users to choose wayland sessions