From f32e71c97791c4ff9ba82f0634ca9eba3668bbf6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Pedro?= Date: Tue, 3 Jul 2018 19:40:32 +0100 Subject: [PATCH] Fixed Window.Close, so that Closing is only invoked once. --- src/Avalonia.Controls/Window.cs | 14 ++++++------- .../WindowTests.cs | 21 +++++++++++++++++++ 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/Avalonia.Controls/Window.cs b/src/Avalonia.Controls/Window.cs index e0fefef0b7..bfb9973ee6 100644 --- a/src/Avalonia.Controls/Window.cs +++ b/src/Avalonia.Controls/Window.cs @@ -302,18 +302,17 @@ namespace Avalonia.Controls internal void Close(bool ignoreCancel) { - var cancelClosing = false; try { - cancelClosing = HandleClosing(); + if (!ignoreCancel && HandleClosing()) + { + return; + } } finally { - if (ignoreCancel || !cancelClosing) - { - PlatformImpl?.Dispose(); - HandleClosed(); - } + PlatformImpl?.Dispose(); + HandleClosed(); } } @@ -324,6 +323,7 @@ namespace Avalonia.Controls { var args = new CancelEventArgs(); Closing?.Invoke(this, args); + return args.Cancel; } diff --git a/tests/Avalonia.Controls.UnitTests/WindowTests.cs b/tests/Avalonia.Controls.UnitTests/WindowTests.cs index e80ffd97cd..570cebe0e5 100644 --- a/tests/Avalonia.Controls.UnitTests/WindowTests.cs +++ b/tests/Avalonia.Controls.UnitTests/WindowTests.cs @@ -188,6 +188,27 @@ namespace Avalonia.Controls.UnitTests } } + [Fact] + public void Closing_Should_Only_Be_Invoked_Once() + { + using (UnitTestApplication.Start(TestServices.StyledWindow)) + { + var window = new Window(); + var count = 0; + + window.Closing += + (sender, e) => + { + count++; + }; + + window.Show(); + window.Close(); + + Assert.Equal(1, count); + } + } + [Fact] public void Showing_Should_Start_Renderer() {