summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonrad Bucheli <konrad.bucheli@psi.ch>2022-07-25 15:05:18 +0200
committerKonrad Bucheli <konrad.bucheli@psi.ch>2022-07-25 15:05:18 +0200
commit4ef6f40887df9b4200b4535884c967eaac461dd7 (patch)
tree0d5c1b4f89ad562fb4cd3f479e7b9172c44fb1f6
parente0988e3f1ccb7522933eae8318956b26b97085b8 (diff)
downloadlightdm-gtk-greeter-git-4ef6f40887df9b4200b4535884c967eaac461dd7.tar.gz
allow to configure a default session manager
-rw-r--r--data/lightdm-gtk-greeter.conf3
-rw-r--r--src/greeterconfiguration.h1
-rw-r--r--src/lightdm-gtk-greeter.c29
3 files changed, 23 insertions, 10 deletions
diff --git a/data/lightdm-gtk-greeter.conf b/data/lightdm-gtk-greeter.conf
index 2a20ef0..4b1637c 100644
--- a/data/lightdm-gtk-greeter.conf
+++ b/data/lightdm-gtk-greeter.conf
@@ -45,6 +45,9 @@
# allow-debugging = false|true ("false" by default)
# screensaver-timeout = Timeout (in seconds) until the screen blanks when the greeter is called as lockscreen
#
+# Session:
+# default-session = session manager to be started when none has been selected by the user and no one is set as last used (unset by default)
+#
# Template for per-monitor configuration:
# [monitor: name]
# background = overrides default value
diff --git a/src/greeterconfiguration.h b/src/greeterconfiguration.h
index 9e1b452..e45f889 100644
--- a/src/greeterconfiguration.h
+++ b/src/greeterconfiguration.h
@@ -16,6 +16,7 @@
#define CONFIG_GROUP_DEFAULT "greeter"
#define CONFIG_KEY_INDICATORS "indicators"
+#define CONFIG_KEY_DEFAULT_SESSION "default-session"
#define CONFIG_KEY_DEBUGGING "allow-debugging"
#define CONFIG_KEY_SCREENSAVER_TIMEOUT "screensaver-timeout"
#define CONFIG_KEY_THEME "theme-name"
diff --git a/src/lightdm-gtk-greeter.c b/src/lightdm-gtk-greeter.c
index 0504ea0..555aa96 100644
--- a/src/lightdm-gtk-greeter.c
+++ b/src/lightdm-gtk-greeter.c
@@ -1002,6 +1002,7 @@ static void
set_session (const gchar *session)
{
gchar *last_session = NULL;
+ gchar *greeter_default_session = NULL;
GList *sessions = lightdm_get_sessions ();
/* Validation */
@@ -1015,16 +1016,23 @@ set_session (const gchar *session)
else
{
/* default */
- const gchar* default_session = lightdm_greeter_get_default_session_hint (greeter);
- if (g_strcmp0 (session, default_session) != 0 &&
- is_valid_session (sessions, default_session))
- session = default_session;
- /* first in the sessions list */
- else if (sessions)
- session = lightdm_session_get_key (sessions->data);
- /* give up */
+ greeter_default_session = config_get_string (NULL, CONFIG_KEY_DEFAULT_SESSION, NULL);
+ if (greeter_default_session && g_strcmp0 (session, greeter_default_session) != 0 &&
+ is_valid_session (sessions, greeter_default_session))
+ session = greeter_default_session;
else
- session = NULL;
+ {
+ const gchar* default_session = lightdm_greeter_get_default_session_hint (greeter);
+ if (g_strcmp0 (session, default_session) != 0 &&
+ is_valid_session (sessions, default_session))
+ session = default_session;
+ /* first in the sessions list */
+ else if (sessions)
+ session = lightdm_session_get_key (sessions->data);
+ /* give up */
+ else
+ session = NULL;
+ }
}
}
@@ -1060,6 +1068,7 @@ set_session (const gchar *session)
g_free (current_session);
current_session = g_strdup (session);
g_free (last_session);
+ g_free (greeter_default_session);
}
void
@@ -2390,7 +2399,7 @@ set_displayed_user (LightDMGreeter *ldm, const gchar *username)
else
{
set_language (lightdm_language_get_code (lightdm_get_language ()));
- set_session (lightdm_greeter_get_default_session_hint (ldm));
+ set_session (NULL);
}
gtk_widget_set_tooltip_text (GTK_WIDGET (user_combo), user_tooltip);
start_authentication (username);