Skip to content

Commit

Permalink
RDEV-8025 - Adapt to different order Avalonia events are triggered
Browse files Browse the repository at this point in the history
  • Loading branch information
heldergoncalves92 committed Nov 20, 2024
1 parent 2f69d20 commit 2220fa2
Showing 1 changed file with 8 additions and 10 deletions.
18 changes: 8 additions & 10 deletions WebViewControl.Avalonia/BaseControl.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,24 +6,22 @@
namespace WebViewControl {

public abstract class BaseControl : Control {

private Window attachedWindow;

protected abstract void InternalDispose();

protected override void OnAttachedToLogicalTree(LogicalTreeAttachmentEventArgs e) {
if (e.Root is Window window) {
// need to subscribe the event this way because close gets called after all elements get detached
window.AddHandler(Window.WindowClosedEvent, (EventHandler<RoutedEventArgs>)OnHostWindowClosed);
if (attachedWindow != window) {
attachedWindow?.RemoveHandler(Window.WindowClosedEvent, (EventHandler<RoutedEventArgs>)OnHostWindowClosed);

attachedWindow = window;
attachedWindow.AddHandler(Window.WindowClosedEvent, (EventHandler<RoutedEventArgs>)OnHostWindowClosed);
}
}
base.OnAttachedToLogicalTree(e);
}

protected override void OnDetachedFromLogicalTree(LogicalTreeAttachmentEventArgs e) {
if (e.Root is Window window) {
window.RemoveHandler(Window.WindowClosedEvent, (EventHandler<RoutedEventArgs>)OnHostWindowClosed);
}
base.OnDetachedFromLogicalTree(e);
}

private void OnHostWindowClosed(object sender, RoutedEventArgs eventArgs) {
((Window)sender).RemoveHandler(Window.WindowClosedEvent, (EventHandler<RoutedEventArgs>)OnHostWindowClosed);
InternalDispose();
Expand Down

0 comments on commit 2220fa2

Please sign in to comment.