diff --git a/src/Ursa/Windows/UrsaWindow.cs b/src/Ursa/Windows/UrsaWindow.cs
index 1719493..92fd303 100644
--- a/src/Ursa/Windows/UrsaWindow.cs
+++ b/src/Ursa/Windows/UrsaWindow.cs
@@ -117,6 +117,7 @@ public class UrsaWindow: Window
if (_canClose)
{
Close();
+ return;
}
}
base.OnClosing(e);
diff --git a/tests/HeadlessTest.Ursa/Controls/UrsaWindowTests/UrsaWindowTest.cs b/tests/HeadlessTest.Ursa/Controls/UrsaWindowTests/UrsaWindowTest.cs
new file mode 100644
index 0000000..101e2d6
--- /dev/null
+++ b/tests/HeadlessTest.Ursa/Controls/UrsaWindowTests/UrsaWindowTest.cs
@@ -0,0 +1,44 @@
+using Avalonia.Headless.XUnit;
+using Ursa.Controls;
+
+namespace HeadlessTest.Ursa.Controls.UrsaWindowTests;
+
+public class UrsaWindowTest
+{
+ [AvaloniaFact]
+ public void Default_UrsaWindow_Closing_Is_Called_Once()
+ {
+ var ursaWindow = new UrsaWindow();
+ ursaWindow.Show();
+ int count = 0;
+ ursaWindow.Closing += (_, _) => count++;
+ ursaWindow.Close();
+ Assert.Equal(1, count);
+ }
+
+ [AvaloniaFact]
+ public async void Inferenced_Window_Closing_Called_Once_When_Yes()
+ {
+ var window = new UrsaWindowWithCloseInference();
+ window.Show();
+ int count = 0;
+ window.Closing += (_, _) => count++;
+ window.Close();
+ window.DialogViewModel.CloseYes();
+ Assert.Equal(1, count);
+ }
+
+ [AvaloniaFact]
+ public async void Inferenced_Window_Closing_Called_Once_When_No()
+ {
+ var window = new UrsaWindowWithCloseInference();
+ window.Show();
+ int count = 0;
+ window.Closing += (_, _) => count++;
+ window.Close();
+ window.DialogViewModel.Close();
+ Assert.Equal(1, count);
+ }
+
+
+}
\ No newline at end of file
diff --git a/tests/HeadlessTest.Ursa/Controls/UrsaWindowTests/UrsaWindowWithCloseInference.axaml b/tests/HeadlessTest.Ursa/Controls/UrsaWindowTests/UrsaWindowWithCloseInference.axaml
new file mode 100644
index 0000000..2d76a2e
--- /dev/null
+++ b/tests/HeadlessTest.Ursa/Controls/UrsaWindowTests/UrsaWindowWithCloseInference.axaml
@@ -0,0 +1,11 @@
+
+ Hello World
+
diff --git a/tests/HeadlessTest.Ursa/Controls/UrsaWindowTests/UrsaWindowWithCloseInference.axaml.cs b/tests/HeadlessTest.Ursa/Controls/UrsaWindowTests/UrsaWindowWithCloseInference.axaml.cs
new file mode 100644
index 0000000..cdbaaaf
--- /dev/null
+++ b/tests/HeadlessTest.Ursa/Controls/UrsaWindowTests/UrsaWindowWithCloseInference.axaml.cs
@@ -0,0 +1,40 @@
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Interactivity;
+using Avalonia.Markup.Xaml;
+using Irihi.Avalonia.Shared.Contracts;
+using Ursa.Controls;
+
+namespace HeadlessTest.Ursa.Controls.UrsaWindowTests;
+
+public partial class UrsaWindowWithCloseInference : UrsaWindow
+{
+ public UrsaWindowWithCloseInference()
+ {
+ InitializeComponent();
+ }
+
+ internal TextBox TextBox = new TextBox();
+ internal DialogViewModel DialogViewModel = new DialogViewModel();
+
+ protected override async Task CanClose()
+ {
+ var result = await OverlayDialog.ShowModal(TextBox, DialogViewModel);
+ return result == DialogResult.Yes;
+ }
+}
+
+class DialogViewModel : IDialogContext
+{
+ public void Close()
+ {
+ RequestClose?.Invoke(this, DialogResult.No);
+ }
+
+ public void CloseYes()
+ {
+ RequestClose?.Invoke(this, DialogResult.Yes);
+ }
+
+ public event EventHandler