From b1c1223d6191a7b63efa6226efafd3948e005166 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Tue, 21 Jul 2020 17:16:34 -0300 Subject: [PATCH] dispose subscriptions. --- src/Avalonia.Controls/Chrome/TitleBar.cs | 33 ++++++++++++++---------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/src/Avalonia.Controls/Chrome/TitleBar.cs b/src/Avalonia.Controls/Chrome/TitleBar.cs index 8d53c88b00..3061e0a06b 100644 --- a/src/Avalonia.Controls/Chrome/TitleBar.cs +++ b/src/Avalonia.Controls/Chrome/TitleBar.cs @@ -14,11 +14,6 @@ namespace Avalonia.Controls.Chrome private CompositeDisposable? _disposables; private CaptionButtons? _captionButtons; - public TitleBar() - { - - } - private void UpdateSize(Window window) { if (window != null) @@ -49,22 +44,30 @@ namespace Avalonia.Controls.Chrome _captionButtons = e.NameScope.Get("PART_CaptionButtons"); + if (VisualRoot is Window window) + { + _captionButtons?.Attach(window); + + UpdateSize(window); + } + } + + protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e) + { + base.OnAttachedToVisualTree(e); + if (VisualRoot is Window window) { _disposables = new CompositeDisposable { window.GetObservable(Window.WindowDecorationMarginProperty) .Subscribe(x => UpdateSize(window)), - window.GetObservable(Window.ExtendClientAreaTitleBarHeightHintProperty) .Subscribe(x => UpdateSize(window)), - window.GetObservable(Window.OffScreenMarginProperty) .Subscribe(x => UpdateSize(window)), - window.GetObservable(Window.ExtendClientAreaChromeHintsProperty) .Subscribe(x => UpdateSize(window)), - window.GetObservable(Window.WindowStateProperty) .Subscribe(x => { @@ -73,15 +76,17 @@ namespace Avalonia.Controls.Chrome PseudoClasses.Set(":maximized", x == WindowState.Maximized); PseudoClasses.Set(":fullscreen", x == WindowState.FullScreen); }), - window.GetObservable(Window.IsExtendedIntoWindowDecorationsProperty) .Subscribe(x => UpdateSize(window)) }; - - _captionButtons.Attach(window); - - UpdateSize(window); } } + + protected override void OnDetachedFromVisualTree(VisualTreeAttachmentEventArgs e) + { + base.OnDetachedFromVisualTree(e); + + _disposables?.Dispose(); + } } }