From 3dd2a8a55432377e8681e3218cbe9bf33aae647c Mon Sep 17 00:00:00 2001 From: "seer-by-sentry[bot]" <157164994+seer-by-sentry[bot]@users.noreply.github.com> Date: Wed, 30 Jul 2025 02:01:34 +0000 Subject: [PATCH] Refactor: Make CloseAllDialogs async --- src/Files.App/App.xaml.cs | 2 +- src/Files.App/Helpers/UI/UIHelpers.cs | 12 ++++++++++-- src/Files.App/Utils/Git/GitHelpers.cs | 2 +- src/Files.App/ViewModels/Settings/AboutViewModel.cs | 2 +- .../ViewModels/Settings/AdvancedViewModel.cs | 2 +- .../ViewModels/Settings/DevToolsViewModel.cs | 2 +- 6 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/Files.App/App.xaml.cs b/src/Files.App/App.xaml.cs index a7b67a98829f..2568c4a250e3 100644 --- a/src/Files.App/App.xaml.cs +++ b/src/Files.App/App.xaml.cs @@ -234,7 +234,7 @@ private async void Window_Closed(object sender, WindowEventArgs args) !Process.GetProcessesByName("Files").Any(x => x.Id != Environment.ProcessId)) { // Close open content dialogs - UIHelpers.CloseAllDialogs(); + await UIHelpers.CloseAllDialogs(); // Close all notification banners except in progress statusCenterViewModel.RemoveAllCompletedItems(); diff --git a/src/Files.App/Helpers/UI/UIHelpers.cs b/src/Files.App/Helpers/UI/UIHelpers.cs index cfc1bd5327d5..1c2bb040bf33 100644 --- a/src/Files.App/Helpers/UI/UIHelpers.cs +++ b/src/Files.App/Helpers/UI/UIHelpers.cs @@ -90,16 +90,24 @@ private static ContentDialog SetContentDialogRoot(ContentDialog contentDialog) return contentDialog; } - public static void CloseAllDialogs() + public static async Task CloseAllDialogs() { if (MainWindow.Instance?.Content?.XamlRoot == null) return; var openedDialogs = VisualTreeHelper.GetOpenPopupsForXamlRoot(MainWindow.Instance.Content.XamlRoot); - + var closingTasks = new List(); foreach (var item in openedDialogs) + { if (item.Child is ContentDialog dialog) + { + var tcs = new TaskCompletionSource(); + dialog.Closed += (s, e) => tcs.SetResult(); dialog.Hide(); + closingTasks.Add(tcs.Task); + } + } + await Task.WhenAll(closingTasks); } private static IEnumerable SidebarIconResources = LoadSidebarIconResources(); diff --git a/src/Files.App/Utils/Git/GitHelpers.cs b/src/Files.App/Utils/Git/GitHelpers.cs index 340e9395f89c..e500de7708c3 100644 --- a/src/Files.App/Utils/Git/GitHelpers.cs +++ b/src/Files.App/Utils/Git/GitHelpers.cs @@ -931,7 +931,7 @@ public static async Task CloneRepoAsync(string repoUrl, string repoName, string if (!string.IsNullOrEmpty(errorMessage)) { - UIHelpers.CloseAllDialogs(); + await UIHelpers.CloseAllDialogs(); await Task.Delay(500); await DynamicDialogFactory.ShowFor_CannotCloneRepo(errorMessage); } diff --git a/src/Files.App/ViewModels/Settings/AboutViewModel.cs b/src/Files.App/ViewModels/Settings/AboutViewModel.cs index 13ae41d4f00b..20a900274475 100644 --- a/src/Files.App/ViewModels/Settings/AboutViewModel.cs +++ b/src/Files.App/ViewModels/Settings/AboutViewModel.cs @@ -108,7 +108,7 @@ private async Task OpenLogLocation() // Close the settings dialog if Files is the deault file manager if (!string.IsNullOrEmpty(command) && command.Contains("Files.App.Launcher.exe")) - UIHelpers.CloseAllDialogs(); + await UIHelpers.CloseAllDialogs(); return true; } diff --git a/src/Files.App/ViewModels/Settings/AdvancedViewModel.cs b/src/Files.App/ViewModels/Settings/AdvancedViewModel.cs index 2d8344bffaf2..4c178d017295 100644 --- a/src/Files.App/ViewModels/Settings/AdvancedViewModel.cs +++ b/src/Files.App/ViewModels/Settings/AdvancedViewModel.cs @@ -187,7 +187,7 @@ private async Task ImportSettingsAsync() catch (Exception ex) { App.Logger.LogWarning(ex, "Error importing settings"); - UIHelpers.CloseAllDialogs(); + await UIHelpers.CloseAllDialogs(); await DialogDisplayHelper.ShowDialogAsync(Strings.SettingsImportErrorTitle.GetLocalizedResource(), Strings.SettingsImportErrorDescription.GetLocalizedResource()); } } diff --git a/src/Files.App/ViewModels/Settings/DevToolsViewModel.cs b/src/Files.App/ViewModels/Settings/DevToolsViewModel.cs index f6491e22bf25..f7a25825ce60 100644 --- a/src/Files.App/ViewModels/Settings/DevToolsViewModel.cs +++ b/src/Files.App/ViewModels/Settings/DevToolsViewModel.cs @@ -130,7 +130,7 @@ public void DoRemoveCredentials() public async void DoConnectToGitHubAsync() { - UIHelpers.CloseAllDialogs(); + await UIHelpers.CloseAllDialogs(); await Task.Delay(500);