From f556f8acfdb0be0688918ff2e9fdc4080dc38637 Mon Sep 17 00:00:00 2001 From: Emmanuel Hansen Date: Thu, 25 Jan 2024 01:07:03 +0000 Subject: [PATCH] dispose layout manager when embeddable control root is disposed. (#14341) --- src/Android/Avalonia.Android/AvaloniaView.cs | 7 +++++++ src/Android/Avalonia.Android/SingleViewLifetime.cs | 2 +- src/Avalonia.Controls/Embedding/EmbeddableControlRoot.cs | 7 ++++++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/Android/Avalonia.Android/AvaloniaView.cs b/src/Android/Avalonia.Android/AvaloniaView.cs index 3d3cd2995d..c120f9ee77 100644 --- a/src/Android/Avalonia.Android/AvaloniaView.cs +++ b/src/Android/Avalonia.Android/AvaloniaView.cs @@ -42,6 +42,13 @@ namespace Avalonia.Android set { _root.Content = value; } } + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + _root?.Dispose(); + _root = null; + } + public override bool DispatchKeyEvent(KeyEvent e) { return _view.View.DispatchKeyEvent(e); diff --git a/src/Android/Avalonia.Android/SingleViewLifetime.cs b/src/Android/Avalonia.Android/SingleViewLifetime.cs index f8a2ee2894..2b6b4d3359 100644 --- a/src/Android/Avalonia.Android/SingleViewLifetime.cs +++ b/src/Android/Avalonia.Android/SingleViewLifetime.cs @@ -15,7 +15,7 @@ namespace Avalonia.Android _activity = activity; if (activity is IAvaloniaActivity activableActivity) - { + { activableActivity.Activated += (_, args) => Activated?.Invoke(this, args); activableActivity.Deactivated += (_, args) => Deactivated?.Invoke(this, args); } diff --git a/src/Avalonia.Controls/Embedding/EmbeddableControlRoot.cs b/src/Avalonia.Controls/Embedding/EmbeddableControlRoot.cs index 880bbb7340..9a2f98f771 100644 --- a/src/Avalonia.Controls/Embedding/EmbeddableControlRoot.cs +++ b/src/Avalonia.Controls/Embedding/EmbeddableControlRoot.cs @@ -51,6 +51,11 @@ namespace Avalonia.Controls.Embedding } protected override Type StyleKeyOverride => typeof(EmbeddableControlRoot); - public void Dispose() => PlatformImpl?.Dispose(); + + public void Dispose() + { + PlatformImpl?.Dispose(); + LayoutManager?.Dispose(); + } } }