From 8db60072641f4730813d6573a783d352c1b286b7 Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Thu, 1 Aug 2024 13:49:04 +0200 Subject: [PATCH] MainWindow: Fix closing behaviour when other windows are open --- Elwig/Windows/MainWindow.xaml.cs | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/Elwig/Windows/MainWindow.xaml.cs b/Elwig/Windows/MainWindow.xaml.cs index 1240305..bbf9f22 100644 --- a/Elwig/Windows/MainWindow.xaml.cs +++ b/Elwig/Windows/MainWindow.xaml.cs @@ -13,6 +13,7 @@ using System.IO; using System.Linq; using System.Net.Http; using System.Reflection; +using System.Threading; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; @@ -37,13 +38,21 @@ namespace Elwig.Windows { } private void Window_Closing(object sender, CancelEventArgs evt) { - if (App.NumWindows > 1 && !App.ForceShutdown && !App.Current.Windows.Cast().Any(w => ((w as AdministrationWindow)?.IsEditing ?? false) || ((w as AdministrationWindow)?.IsCreating ?? false))) { - var res = MessageBox.Show("Es sind noch weitere Fenster geöffnet.\nSollen alle Fenster geschlossen werden?", - "Elwig beenden", MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.No); - if (res != MessageBoxResult.Yes) { - evt.Cancel = true; - } else { - Application.Current.Shutdown(); + if (App.NumWindows > 1 && !App.ForceShutdown) { + foreach (var w in App.Current.Windows.Cast().Where(w => ((w as AdministrationWindow)?.IsEditing ?? false) || ((w as AdministrationWindow)?.IsCreating ?? false))) { + try { + w.Close(); + } catch { } + } + Thread.Sleep(100); + if (App.NumWindows > 1 && !App.Current.Windows.Cast().Any(w => ((w as AdministrationWindow)?.IsEditing ?? false) || ((w as AdministrationWindow)?.IsCreating ?? false))) { + var res = MessageBox.Show("Es sind noch weitere Fenster geöffnet.\nSollen alle Fenster geschlossen werden?", + "Elwig beenden", MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.No); + if (res != MessageBoxResult.Yes) { + evt.Cancel = true; + } else { + Application.Current.Shutdown(); + } } } }