diff --git a/Aspid.FastTools/Packages/tech.aspid.fasttools/Unity/Editor/Scripts/VisualElements/Internal/Styles/AspidThemeStyleSheetExtensions.cs b/Aspid.FastTools/Packages/tech.aspid.fasttools/Unity/Editor/Scripts/VisualElements/Internal/Styles/AspidThemeStyleSheetExtensions.cs index ce3fd354..b6d19785 100644 --- a/Aspid.FastTools/Packages/tech.aspid.fasttools/Unity/Editor/Scripts/VisualElements/Internal/Styles/AspidThemeStyleSheetExtensions.cs +++ b/Aspid.FastTools/Packages/tech.aspid.fasttools/Unity/Editor/Scripts/VisualElements/Internal/Styles/AspidThemeStyleSheetExtensions.cs @@ -13,8 +13,9 @@ internal static class AspidThemeStyleSheetExtensions /// Adds to the element and, when the user has /// configured one, layers on top of it. /// The override is added to the same element as the base palette so its :root tokens - /// take precedence. The element re-applies the override live whenever - /// fires and unsubscribes when it leaves the panel. + /// take precedence. The element subscribes to while + /// attached to a panel (re-applying the current override on attach) and unsubscribes when it + /// leaves the panel, so live updates survive detach/reattach and never leak when never attached. /// /// The element that receives the theme style sheets. /// The element, for chaining. @@ -34,7 +35,11 @@ void OnThemeChanged() if (applied != null) element.AddStyleSheets(applied); } - AspidThemeSettings.Changed += OnThemeChanged; + element.RegisterCallback(_ => + { + OnThemeChanged(); + AspidThemeSettings.Changed += OnThemeChanged; + }); element.RegisterCallback(_ => AspidThemeSettings.Changed -= OnThemeChanged); return element;