From a393a86e2bbb6395e074856c03edee1a4505e907 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Thu, 27 Aug 2026 16:30:15 -0700 Subject: [PATCH 01/10] BackgroundManager: Defer to use preference when translucent --- data/styles/Application.css | 2 +- src/Services/BackgroundManager.vala | 34 ++++++++++++++++++++++++----- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/data/styles/Application.css b/data/styles/Application.css index 572d235f..862bc072 100644 --- a/data/styles/Application.css +++ b/data/styles/Application.css @@ -26,7 +26,7 @@ panel.translucent.color-dark > box { } panel.translucent.color-light > box { - background-color: alpha(white, 0.3); + background-color: alpha(white, 0.5); box-shadow: inset 0 -1px 0 0 alpha(white, 0.15), inset 0 1px 0 0 alpha(white, 0.15), diff --git a/src/Services/BackgroundManager.vala b/src/Services/BackgroundManager.vala index ccf43ff7..c321957a 100644 --- a/src/Services/BackgroundManager.vala +++ b/src/Services/BackgroundManager.vala @@ -43,8 +43,6 @@ namespace Wingpanel.Services { private static BackgroundManager? instance = null; private InterfaceBus? bus = null; - - private BackgroundState current_state = BackgroundState.LIGHT; private bool use_transparency = true; private bool bus_available { @@ -65,6 +63,8 @@ namespace Wingpanel.Services { private BackgroundManager () { var panel_settings = new GLib.Settings ("io.elementary.desktop.wingpanel"); + Granite.StyleManager.get_default ().notify["color-scheme"].connect (() => state_updated ()); + panel_settings.changed["use-transparency"].connect (() => { use_transparency = panel_settings.get_boolean ("use-transparency"); state_updated (); @@ -126,16 +126,38 @@ namespace Wingpanel.Services { } bus.state_changed.connect ((state, animation_duration) => { - current_state = state; - state_updated (animation_duration); + state_updated (state, animation_duration); }); state_updated (); return true; } - private void state_updated (uint animation_duration = 0) { - background_state_changed (use_transparency ? current_state : BackgroundState.MAXIMIZED, animation_duration); + private void state_updated (BackgroundState state = MAXIMIZED, uint animation_duration = 0) { + if (!use_transparency) { + background_state_changed (BackgroundState.MAXIMIZED, animation_duration); + return; + } + + switch (state) { + case TRANSLUCENT_DARK: + case TRANSLUCENT_LIGHT: + // Prefer user preference: https://github.com/elementary/wingpanel/issues/657 + switch (Granite.StyleManager.get_default ().color_scheme) { + case NO_PREFERENCE: + case LIGHT: + background_state_changed (TRANSLUCENT_LIGHT, animation_duration); + break; + case DARK: + background_state_changed (TRANSLUCENT_DARK, animation_duration); + break; + } + return; + default: + break; + } + + background_state_changed (state, animation_duration); } public static BackgroundManager get_default () { From 4e3c974e049e26511fd445a7a8c9c85b57438cc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Thu, 27 Aug 2026 16:53:30 -0700 Subject: [PATCH 02/10] use Gtk.Settings --- src/Services/BackgroundManager.vala | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/Services/BackgroundManager.vala b/src/Services/BackgroundManager.vala index c321957a..48fcb547 100644 --- a/src/Services/BackgroundManager.vala +++ b/src/Services/BackgroundManager.vala @@ -43,6 +43,8 @@ namespace Wingpanel.Services { private static BackgroundManager? instance = null; private InterfaceBus? bus = null; + // Latest state as sent from Gala + private BackgroundState current_state = BackgroundState.LIGHT; private bool use_transparency = true; private bool bus_available { @@ -51,6 +53,7 @@ namespace Wingpanel.Services { } } + private Gtk.Settings style_manager; private int panel_height; public signal void background_state_changed (BackgroundState state, uint animation_duration); @@ -63,7 +66,8 @@ namespace Wingpanel.Services { private BackgroundManager () { var panel_settings = new GLib.Settings ("io.elementary.desktop.wingpanel"); - Granite.StyleManager.get_default ().notify["color-scheme"].connect (() => state_updated ()); + style_manager = Gtk.Settings.get_default (); + style_manager.notify["gtk-application-prefer-dark-theme"].connect (() => state_updated ()); panel_settings.changed["use-transparency"].connect (() => { use_transparency = panel_settings.get_boolean ("use-transparency"); @@ -126,6 +130,7 @@ namespace Wingpanel.Services { } bus.state_changed.connect ((state, animation_duration) => { + current_state = state; state_updated (state, animation_duration); }); @@ -133,7 +138,7 @@ namespace Wingpanel.Services { return true; } - private void state_updated (BackgroundState state = MAXIMIZED, uint animation_duration = 0) { + private void state_updated (BackgroundState state = current_state, uint animation_duration = 0) { if (!use_transparency) { background_state_changed (BackgroundState.MAXIMIZED, animation_duration); return; @@ -143,14 +148,10 @@ namespace Wingpanel.Services { case TRANSLUCENT_DARK: case TRANSLUCENT_LIGHT: // Prefer user preference: https://github.com/elementary/wingpanel/issues/657 - switch (Granite.StyleManager.get_default ().color_scheme) { - case NO_PREFERENCE: - case LIGHT: - background_state_changed (TRANSLUCENT_LIGHT, animation_duration); - break; - case DARK: - background_state_changed (TRANSLUCENT_DARK, animation_duration); - break; + if (style_manager.gtk_application_prefer_dark_theme) { + background_state_changed (TRANSLUCENT_LIGHT, animation_duration); + } else { + background_state_changed (TRANSLUCENT_DARK, animation_duration); } return; default: From 3155eeae50ffe2d1826e841273757a05bf8afd38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Thu, 27 Aug 2026 16:54:01 -0700 Subject: [PATCH 03/10] put whitespace back --- src/Services/BackgroundManager.vala | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Services/BackgroundManager.vala b/src/Services/BackgroundManager.vala index 48fcb547..bbc6fc91 100644 --- a/src/Services/BackgroundManager.vala +++ b/src/Services/BackgroundManager.vala @@ -43,6 +43,7 @@ namespace Wingpanel.Services { private static BackgroundManager? instance = null; private InterfaceBus? bus = null; + // Latest state as sent from Gala private BackgroundState current_state = BackgroundState.LIGHT; private bool use_transparency = true; From 99d5a84147664be4e7cbc9f45e209a871d26a728 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Thu, 27 Aug 2026 16:55:34 -0700 Subject: [PATCH 04/10] revert some changes --- src/Services/BackgroundManager.vala | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Services/BackgroundManager.vala b/src/Services/BackgroundManager.vala index bbc6fc91..96e05d52 100644 --- a/src/Services/BackgroundManager.vala +++ b/src/Services/BackgroundManager.vala @@ -132,20 +132,20 @@ namespace Wingpanel.Services { bus.state_changed.connect ((state, animation_duration) => { current_state = state; - state_updated (state, animation_duration); + state_updated (animation_duration); }); state_updated (); return true; } - private void state_updated (BackgroundState state = current_state, uint animation_duration = 0) { + private void state_updated (uint animation_duration = 0) { if (!use_transparency) { background_state_changed (BackgroundState.MAXIMIZED, animation_duration); return; } - switch (state) { + switch (current_state) { case TRANSLUCENT_DARK: case TRANSLUCENT_LIGHT: // Prefer user preference: https://github.com/elementary/wingpanel/issues/657 @@ -159,7 +159,7 @@ namespace Wingpanel.Services { break; } - background_state_changed (state, animation_duration); + background_state_changed (current_state, animation_duration); } public static BackgroundManager get_default () { From df10ac0a43b4519414523540c989c3e61ddf168b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Thu, 27 Aug 2026 17:01:06 -0700 Subject: [PATCH 05/10] Set default animation speed --- src/Services/BackgroundManager.vala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Services/BackgroundManager.vala b/src/Services/BackgroundManager.vala index 96e05d52..b98b830a 100644 --- a/src/Services/BackgroundManager.vala +++ b/src/Services/BackgroundManager.vala @@ -139,7 +139,7 @@ namespace Wingpanel.Services { return true; } - private void state_updated (uint animation_duration = 0) { + private void state_updated (uint animation_duration = Granite.TRANSITION_DURATION_IN_PLACE) { if (!use_transparency) { background_state_changed (BackgroundState.MAXIMIZED, animation_duration); return; From 14a6cb32c3fb135c3f49ae666111d8450f3d777b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Thu, 27 Aug 2026 17:08:12 -0700 Subject: [PATCH 06/10] Less aggressive transparency reduction --- src/Services/BackgroundManager.vala | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/Services/BackgroundManager.vala b/src/Services/BackgroundManager.vala index b98b830a..3a49d604 100644 --- a/src/Services/BackgroundManager.vala +++ b/src/Services/BackgroundManager.vala @@ -141,7 +141,21 @@ namespace Wingpanel.Services { private void state_updated (uint animation_duration = Granite.TRANSITION_DURATION_IN_PLACE) { if (!use_transparency) { - background_state_changed (BackgroundState.MAXIMIZED, animation_duration); + switch (current_state) { + case DARK: + case LIGHT: + // Prefer user preference: https://github.com/elementary/wingpanel/issues/657 + if (style_manager.gtk_application_prefer_dark_theme) { + background_state_changed (TRANSLUCENT_LIGHT, animation_duration); + } else { + background_state_changed (TRANSLUCENT_DARK, animation_duration); + } + return; + default: + background_state_changed (BackgroundState.MAXIMIZED, animation_duration); + break; + } + return; } From a6460e489f1ae69f8f8339eef48b97e0b079dcdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Thu, 27 Aug 2026 17:38:24 -0700 Subject: [PATCH 07/10] clamp panel height values --- src/PanelWindow.vala | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/PanelWindow.vala b/src/PanelWindow.vala index eab20a65..5891d14d 100644 --- a/src/PanelWindow.vala +++ b/src/PanelWindow.vala @@ -21,7 +21,6 @@ public class Wingpanel.PanelWindow : Gtk.Window { public Services.PopoverManager popover_manager; private Widgets.Panel panel; - private int panel_height; private Pantheon.Desktop.Shell? desktop_shell; private Pantheon.Desktop.Panel? desktop_panel; @@ -75,7 +74,7 @@ public class Wingpanel.PanelWindow : Gtk.Window { ((Gdk.Toplevel) get_surface ()).compute_size.connect (on_compute_size); update_panel_dimensions (); - Services.BackgroundManager.initialize (panel_height); + Services.BackgroundManager.initialize (panel.get_height ().clamp (16, 48)); init_wl (); } @@ -87,8 +86,6 @@ public class Wingpanel.PanelWindow : Gtk.Window { } private void update_panel_dimensions () { - panel_height = panel.get_height (); - // We just use our monitor because Gala makes sure we are always on the primary one var monitor_dimensions = get_display ().get_monitor_at_surface (get_surface ()).get_geometry (); From 67845459ee3fcfa0a6cc929efe5e51b901b707de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Sat, 29 Aug 2026 15:13:58 -0700 Subject: [PATCH 08/10] Change Gtk.Settings variable name --- src/Services/BackgroundManager.vala | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Services/BackgroundManager.vala b/src/Services/BackgroundManager.vala index 40eaea7c..bd21f5ee 100644 --- a/src/Services/BackgroundManager.vala +++ b/src/Services/BackgroundManager.vala @@ -54,7 +54,7 @@ namespace Wingpanel.Services { } } - private Gtk.Settings style_manager; + private Gtk.Settings gtk_settings; private int panel_height; public signal void background_state_changed (BackgroundState state, uint animation_duration); @@ -68,8 +68,8 @@ namespace Wingpanel.Services { private BackgroundManager () { var panel_settings = new GLib.Settings ("io.elementary.desktop.wingpanel"); - style_manager = Gtk.Settings.get_default (); - style_manager.notify["gtk-application-prefer-dark-theme"].connect (() => state_updated ()); + gtk_settings = Gtk.Settings.get_default (); + gtk_settings.notify["gtk-application-prefer-dark-theme"].connect (() => state_updated ()); panel_settings.changed["use-transparency"].connect (() => { use_transparency = panel_settings.get_boolean ("use-transparency"); @@ -148,7 +148,7 @@ namespace Wingpanel.Services { case DARK: case LIGHT: // Prefer user preference: https://github.com/elementary/wingpanel/issues/657 - if (style_manager.gtk_application_prefer_dark_theme) { + if (gtk_settings.gtk_application_prefer_dark_theme) { background_state_changed (TRANSLUCENT_LIGHT, animation_duration); } else { background_state_changed (TRANSLUCENT_DARK, animation_duration); @@ -166,7 +166,7 @@ namespace Wingpanel.Services { case TRANSLUCENT_DARK: case TRANSLUCENT_LIGHT: // Prefer user preference: https://github.com/elementary/wingpanel/issues/657 - if (style_manager.gtk_application_prefer_dark_theme) { + if (gtk_settings.gtk_application_prefer_dark_theme) { background_state_changed (TRANSLUCENT_LIGHT, animation_duration); } else { background_state_changed (TRANSLUCENT_DARK, animation_duration); From ea5065a137dd04988e37960046cf98beefd18012 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Sat, 29 Aug 2026 15:18:10 -0700 Subject: [PATCH 09/10] Revert to current transparent behavior --- src/Services/BackgroundManager.vala | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/src/Services/BackgroundManager.vala b/src/Services/BackgroundManager.vala index bd21f5ee..1ebe9909 100644 --- a/src/Services/BackgroundManager.vala +++ b/src/Services/BackgroundManager.vala @@ -144,21 +144,7 @@ namespace Wingpanel.Services { private void state_updated (uint animation_duration = Granite.TRANSITION_DURATION_IN_PLACE) { if (!use_transparency) { - switch (current_state) { - case DARK: - case LIGHT: - // Prefer user preference: https://github.com/elementary/wingpanel/issues/657 - if (gtk_settings.gtk_application_prefer_dark_theme) { - background_state_changed (TRANSLUCENT_LIGHT, animation_duration); - } else { - background_state_changed (TRANSLUCENT_DARK, animation_duration); - } - return; - default: - background_state_changed (BackgroundState.MAXIMIZED, animation_duration); - break; - } - + background_state_changed (BackgroundState.MAXIMIZED, animation_duration); return; } From 338adce93e9d5110c5ab0a572a67ce63fec9678e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danielle=20For=C3=A9?= Date: Sat, 29 Aug 2026 15:39:50 -0700 Subject: [PATCH 10/10] don't cache settings --- src/Services/BackgroundManager.vala | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Services/BackgroundManager.vala b/src/Services/BackgroundManager.vala index 1ebe9909..49a9c504 100644 --- a/src/Services/BackgroundManager.vala +++ b/src/Services/BackgroundManager.vala @@ -54,7 +54,6 @@ namespace Wingpanel.Services { } } - private Gtk.Settings gtk_settings; private int panel_height; public signal void background_state_changed (BackgroundState state, uint animation_duration); @@ -68,8 +67,7 @@ namespace Wingpanel.Services { private BackgroundManager () { var panel_settings = new GLib.Settings ("io.elementary.desktop.wingpanel"); - gtk_settings = Gtk.Settings.get_default (); - gtk_settings.notify["gtk-application-prefer-dark-theme"].connect (() => state_updated ()); + Gtk.Settings.get_default ().notify["gtk-application-prefer-dark-theme"].connect (() => state_updated ()); panel_settings.changed["use-transparency"].connect (() => { use_transparency = panel_settings.get_boolean ("use-transparency"); @@ -152,7 +150,7 @@ namespace Wingpanel.Services { case TRANSLUCENT_DARK: case TRANSLUCENT_LIGHT: // Prefer user preference: https://github.com/elementary/wingpanel/issues/657 - if (gtk_settings.gtk_application_prefer_dark_theme) { + if (Gtk.Settings.get_default ().gtk_application_prefer_dark_theme) { background_state_changed (TRANSLUCENT_LIGHT, animation_duration); } else { background_state_changed (TRANSLUCENT_DARK, animation_duration);