From 8dfc61bf04dfc5e5977a5dd7aa2981c8fd609b3b Mon Sep 17 00:00:00 2001 From: Mike Gabriel Date: Fri, 15 Sep 2023 12:46:24 +0200 Subject: Introduce gsettings (list): includeonly-sessions, excluded-sessions. --- .../org.ArcticaProject.arctica-greeter.gschema.xml | 8 ++++++ src/arctica-greeter.vala | 31 ++++++++++++++++++++++ src/settings.vala | 2 ++ 3 files changed, 41 insertions(+) diff --git a/data/org.ArcticaProject.arctica-greeter.gschema.xml b/data/org.ArcticaProject.arctica-greeter.gschema.xml index ddef373..db00737 100644 --- a/data/org.ArcticaProject.arctica-greeter.gschema.xml +++ b/data/org.ArcticaProject.arctica-greeter.gschema.xml @@ -219,5 +219,13 @@ 60 Time in seconds until the shutdown dialog forcefully selects the default action. Set to 0 to disable. + + [] + Unordered list of include-only desktop sessions (if non-empty, only explicitly listed sessions types will be offered by the greeter). Takes precedence over the excluded-sessions list. + + + [] + Unordered list of excluded desktop sessions (if non-empty, listed sessions types will not be offered by the greeter). Only used if includeonly-sessions is empty. + diff --git a/src/arctica-greeter.vala b/src/arctica-greeter.vala index cacfdac..0aee212 100644 --- a/src/arctica-greeter.vala +++ b/src/arctica-greeter.vala @@ -254,8 +254,19 @@ public class ArcticaGreeter : Object sessions.append (preferred_session); } + var excluded_sessions = AGSettings.get_strv (AGSettings.KEY_EXCLUDED_SESSIONS); + var includeonly_sessions = AGSettings.get_strv (AGSettings.KEY_INCLUDEONLY_SESSIONS); + if (!AGSettings.get_boolean (AGSettings.KEY_HIDE_WAYLAND_SESSIONS)) { foreach (string session in sessions) { + if (includeonly_sessions.length > 0) { + if (!(session in includeonly_sessions)) { + continue; + } + } + else if (session in excluded_sessions) { + continue; + } var path = Path.build_filename ("/usr/share/wayland-sessions/", session.concat(".desktop"), null); if (FileUtils.test (path, FileTest.EXISTS)) { debug ("Using %s as default (Wayland) session.", session); @@ -266,6 +277,14 @@ public class ArcticaGreeter : Object if (!AGSettings.get_boolean (AGSettings.KEY_HIDE_X11_SESSIONS)) { foreach (string session in sessions) { + if (includeonly_sessions.length > 0) { + if (!(session in includeonly_sessions)) { + continue; + } + } + else if (session in excluded_sessions) { + continue; + } var path = Path.build_filename ("/usr/share/xsessions/", session.concat(".desktop"), null); if (FileUtils.test (path, FileTest.EXISTS)) { debug ("Using %s as default (X11) session.", session); @@ -283,6 +302,18 @@ public class ArcticaGreeter : Object /* Make sure the given session actually exists. Return it if it does. * otherwise, return the default session. */ + var excluded_sessions = AGSettings.get_strv (AGSettings.KEY_EXCLUDED_SESSIONS); + var includeonly_sessions = AGSettings.get_strv (AGSettings.KEY_INCLUDEONLY_SESSIONS); + + if (includeonly_sessions.length > 0) { + if (!(session in includeonly_sessions)) { + session = null; + } + } + else if (session in excluded_sessions) { + session = null; + } + if (session != null) { var xsessions_path = Path.build_filename ("/usr/share/xsessions/", session.concat(".desktop"), null); var wsessions_path = Path.build_filename ("/usr/share/wayland-sessions/", session.concat(".desktop"), null); diff --git a/src/settings.vala b/src/settings.vala index acef828..7c4bd84 100644 --- a/src/settings.vala +++ b/src/settings.vala @@ -73,6 +73,8 @@ public class AGSettings : Object public const string KEY_MENUBAR_ALPHA = "menubar-alpha"; public const string KEY_HIDE_X11_SESSIONS = "hide-x11-sessions"; public const string KEY_HIDE_WAYLAND_SESSIONS = "hide-wayland-sessions"; + public const string KEY_INCLUDEONLY_SESSIONS = "includeonly-sessions"; + public const string KEY_EXCLUDED_SESSIONS = "excluded-sessions"; public const string KEY_SHUTDOWN_DIALOG_TIMEOUT = "shutdown-dialog-timeout"; public const string KEY_PREFERRED_SESSIONS = "preferred-sessions"; -- cgit v1.2.3