From a0d1cf1d01b677eda3f2d5ceeb78cd8111beddd8 Mon Sep 17 00:00:00 2001 From: Leonhard Date: Sat, 25 Apr 2026 15:19:50 +0200 Subject: [PATCH 1/7] Add SessionSettings --- lib/SessionSettings.vala | 39 +++++++++++++++++++++++++++++++++++++++ lib/meson.build | 1 + 2 files changed, 40 insertions(+) create mode 100644 lib/SessionSettings.vala diff --git a/lib/SessionSettings.vala b/lib/SessionSettings.vala new file mode 100644 index 000000000..3dc016757 --- /dev/null +++ b/lib/SessionSettings.vala @@ -0,0 +1,39 @@ +/* + * Copyright 2026 elementary, Inc. (https://elementary.io) + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Authored by: Leonhard Kargl + */ + +namespace Gala.SessionSettings { + private enum SessionType { + DESKTOP, + GREETER, + INSTALLER; + } + + private static SessionType? session_type = null; + + private static SessionType get_session_type () { + if (session_type == null) { + var session_type_str = Environment.get_variable ("GALA_SESSION_TYPE") ?? "desktop"; + switch (session_type_str) { + case "desktop": + session_type = DESKTOP; + break; + case "greeter": + session_type = GREETER; + break; + case "installer": + session_type = INSTALLER; + break; + default: + warning ("Unknown session type: %s", session_type_str); + session_type = DESKTOP; + break; + } + } + + return session_type; + } +} diff --git a/lib/meson.build b/lib/meson.build index ee073287e..6dd7a59e8 100644 --- a/lib/meson.build +++ b/lib/meson.build @@ -8,6 +8,7 @@ gala_lib_sources = files( 'Constants.vala', 'DragDropAction.vala', 'Plugin.vala', + 'SessionSettings.vala', 'Utils.vala', 'WindowManager.vala', 'AppSystem/App.vala', From c33881c9ba6142a84e3a7bdbcef279cbacb3ed17 Mon Sep 17 00:00:00 2001 From: Leonhard Date: Sat, 25 Apr 2026 15:23:52 +0200 Subject: [PATCH 2/7] Allow to launch only specific shell clients based on session type --- data/io.elementary.desktop.wm.shell | 2 ++ lib/SessionSettings.vala | 13 +++++++++++++ src/ShellClients/ShellClientsManager.vala | 9 +++++++++ 3 files changed, 24 insertions(+) diff --git a/data/io.elementary.desktop.wm.shell b/data/io.elementary.desktop.wm.shell index b0cca77c5..340906021 100644 --- a/data/io.elementary.desktop.wm.shell +++ b/data/io.elementary.desktop.wm.shell @@ -1,7 +1,9 @@ [io.elementary.wingpanel] launch-on-x=true args=io.elementary.wingpanel +session-type=desktop [io.elementary.dock] launch-on-x=true args=io.elementary.dock +session-type=desktop diff --git a/lib/SessionSettings.vala b/lib/SessionSettings.vala index 3dc016757..7eac245af 100644 --- a/lib/SessionSettings.vala +++ b/lib/SessionSettings.vala @@ -36,4 +36,17 @@ namespace Gala.SessionSettings { return session_type; } + + public string get_shell_clients_type () { + switch (get_session_type ()) { + case DESKTOP: + return "desktop"; + case GREETER: + return "greeter"; + case INSTALLER: + return "installer"; + } + + return "desktop"; + } } diff --git a/src/ShellClients/ShellClientsManager.vala b/src/ShellClients/ShellClientsManager.vala index 84594cbad..c814d2d1d 100644 --- a/src/ShellClients/ShellClientsManager.vala +++ b/src/ShellClients/ShellClientsManager.vala @@ -101,6 +101,15 @@ public class Gala.ShellClientsManager : Object, GestureTarget { } } + try { + var type = key_file.get_string (group, "session-type"); + if (type != SessionSettings.get_shell_clients_type ()) { + continue; + } + } catch (Error e) { + warning ("Failed to check session type for client %s, assuming it should be launched: %s", group, e.message); + } + try { var args = key_file.get_string_list (group, "args"); protocol_clients += new ManagedClient (wm.get_display (), args); From 2b1b230e25991d8455e22654fc657078e28ff574 Mon Sep 17 00:00:00 2001 From: Leonhard Date: Sat, 25 Apr 2026 15:27:19 +0200 Subject: [PATCH 3/7] ShellClients: Add clients required for greeter --- data/io.elementary.desktop.wm.shell | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/data/io.elementary.desktop.wm.shell b/data/io.elementary.desktop.wm.shell index 340906021..d4a69d123 100644 --- a/data/io.elementary.desktop.wm.shell +++ b/data/io.elementary.desktop.wm.shell @@ -7,3 +7,19 @@ session-type=desktop launch-on-x=true args=io.elementary.dock session-type=desktop + +[Greeter wingpanel] +args=io.elementary.wingpanel;-g +session-type=greeter + +[Greeter Session Manager] +args=io.elementary.greeter-session-manager +session-type=greeter + +[Greeter] +args=io.elementary.greeter +session-type=greeter + +[Greeter Settings Daemon] +args=io.elementary.settings-daemon +session-type=greeter From 43e4839665866f914c4eec55fb99008438c2eea4 Mon Sep 17 00:00:00 2001 From: Leonhard Date: Sat, 25 Apr 2026 15:29:57 +0200 Subject: [PATCH 4/7] Main: Set xdg current desktop when in greeter session --- lib/SessionSettings.vala | 4 ++++ src/Main.vala | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/lib/SessionSettings.vala b/lib/SessionSettings.vala index 7eac245af..42f9cb2ca 100644 --- a/lib/SessionSettings.vala +++ b/lib/SessionSettings.vala @@ -49,4 +49,8 @@ namespace Gala.SessionSettings { return "desktop"; } + + public bool should_set_xdg_current_desktop () { + return get_session_type () != DESKTOP; + } } diff --git a/src/Main.vala b/src/Main.vala index 420e33b7b..bd4179a2a 100644 --- a/src/Main.vala +++ b/src/Main.vala @@ -27,6 +27,12 @@ namespace Gala { } public static int main (string[] args) { + if (SessionSettings.should_set_xdg_current_desktop ()) { + // Ensure we present ourselves as Pantheon so we pick up the right GSettings + // overrides + Environment.set_variable ("XDG_CURRENT_DESKTOP", "Pantheon", true); + } + GLib.Intl.setlocale (LocaleCategory.ALL, ""); GLib.Intl.bindtextdomain (Config.GETTEXT_PACKAGE, Config.LOCALEDIR); GLib.Intl.bind_textdomain_codeset (Config.GETTEXT_PACKAGE, "UTF-8"); From e2783e3a08ed58a7f289ef7677b0857b807b6aee Mon Sep 17 00:00:00 2001 From: Leonhard Date: Sun, 26 Apr 2026 00:13:01 +0200 Subject: [PATCH 5/7] ShellClients: Only animate panels in the desktop session --- lib/SessionSettings.vala | 5 +++++ src/ShellClients/ShellClientsManager.vala | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/lib/SessionSettings.vala b/lib/SessionSettings.vala index 42f9cb2ca..8aa20a8c8 100644 --- a/lib/SessionSettings.vala +++ b/lib/SessionSettings.vala @@ -53,4 +53,9 @@ namespace Gala.SessionSettings { public bool should_set_xdg_current_desktop () { return get_session_type () != DESKTOP; } + + public bool should_animate_panels () { + /* In the other types we fade in anyways */ + return get_session_type () == DESKTOP; + } } diff --git a/src/ShellClients/ShellClientsManager.vala b/src/ShellClients/ShellClientsManager.vala index c814d2d1d..2ceb012ad 100644 --- a/src/ShellClients/ShellClientsManager.vala +++ b/src/ShellClients/ShellClientsManager.vala @@ -118,6 +118,11 @@ public class Gala.ShellClientsManager : Object, GestureTarget { } } + if (!SessionSettings.should_animate_panels ()) { + starting_panels = 0; + return; + } + starting_panels = protocol_clients.length; } From ecfffec96af9d1b3fd16f82c5b155a8c96608793 Mon Sep 17 00:00:00 2001 From: Leonhard Date: Sun, 26 Apr 2026 00:15:17 +0200 Subject: [PATCH 6/7] Blur background in non desktop sessions --- lib/SessionSettings.vala | 4 ++++ src/Background/BackgroundContainer.vala | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/lib/SessionSettings.vala b/lib/SessionSettings.vala index 8aa20a8c8..e8cde976d 100644 --- a/lib/SessionSettings.vala +++ b/lib/SessionSettings.vala @@ -58,4 +58,8 @@ namespace Gala.SessionSettings { /* In the other types we fade in anyways */ return get_session_type () == DESKTOP; } + + public bool should_blur_background () { + return get_session_type () != DESKTOP; + } } diff --git a/src/Background/BackgroundContainer.vala b/src/Background/BackgroundContainer.vala index 8c2996385..983da800b 100644 --- a/src/Background/BackgroundContainer.vala +++ b/src/Background/BackgroundContainer.vala @@ -54,6 +54,10 @@ public class Gala.BackgroundContainer : Meta.BackgroundGroup { for (var i = 0; i < display.get_n_monitors (); i++) { var background = new BackgroundManager (display, i); + if (SessionSettings.should_blur_background ()) { + background.add_effect (new BlurEffect (background, 18)); + } + add_child (background); if (i == 0) From 12fbc58dea47c15e7f378dc3e5b8e71d01a4832e Mon Sep 17 00:00:00 2001 From: Leonhard Date: Sun, 26 Apr 2026 00:28:28 +0200 Subject: [PATCH 7/7] WindowManager: Fade in in non desktop sessions --- lib/SessionSettings.vala | 4 ++++ src/WindowManager.vala | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/lib/SessionSettings.vala b/lib/SessionSettings.vala index e8cde976d..b3e82e429 100644 --- a/lib/SessionSettings.vala +++ b/lib/SessionSettings.vala @@ -62,4 +62,8 @@ namespace Gala.SessionSettings { public bool should_blur_background () { return get_session_type () != DESKTOP; } + + public bool should_fade_in () { + return get_session_type () != DESKTOP; + } } diff --git a/src/WindowManager.vala b/src/WindowManager.vala index 6a0ec38d4..316f69919 100644 --- a/src/WindowManager.vala +++ b/src/WindowManager.vala @@ -139,6 +139,10 @@ namespace Gala { show_stage (); + if (SessionSettings.should_fade_in ()) { + fade_in.begin (); + } + init_a11y (); AccessDialog.watch_portal (); @@ -418,6 +422,22 @@ namespace Gala { }); } + private async void fade_in () { + var fade_in_actor = new Clutter.Actor () { + background_color = { 0, 0, 0, 255 }, + }; + fade_in_actor.add_constraint (new Clutter.BindConstraint (stage, SIZE, 0)); + stage.add_child (fade_in_actor); + + /* TODO: We might want to wait another second before we start the fade otherwise it's not really visible */ + + var transition_builder = new TransitionBuilder (fade_in_actor, 1000, EASE); + transition_builder.add_property ("opacity", 0u); + yield transition_builder.run (); + + stage.remove_child (fade_in_actor); + } + private void init_a11y () { if (!Clutter.get_accessibility_enabled ()) { warning ("Clutter has no accessibility enabled");