From 5860f4406b37f302c37e44d0eb4fd5de4d6173f1 Mon Sep 17 00:00:00 2001 From: codenano077 Date: Wed, 3 Jun 2026 21:58:03 +0530 Subject: [PATCH 1/5] Add Skip and Skip All buttons to File In Use dialog --- src/Files.App/Dialogs/FilesystemOperationDialog.xaml | 1 + src/Files.App/Helpers/Dialog/DynamicDialogFactory.cs | 6 ++++-- src/Files.App/Strings/en-US/Resources.resw | 3 +++ .../Storage/Operations/ShellFilesystemOperations.cs | 9 ++++++--- .../FileSystemDialog/FileSystemDialogViewModel.cs | 3 ++- 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/Files.App/Dialogs/FilesystemOperationDialog.xaml b/src/Files.App/Dialogs/FilesystemOperationDialog.xaml index 3242597f40f2..0316bb05394c 100644 --- a/src/Files.App/Dialogs/FilesystemOperationDialog.xaml +++ b/src/Files.App/Dialogs/FilesystemOperationDialog.xaml @@ -22,6 +22,7 @@ RequestedTheme="{x:Bind RootAppElement.RequestedTheme, Mode=OneWay}" SecondaryButtonCommand="{x:Bind ViewModel.SecondaryButtonClickCommand, Mode=OneWay}" SecondaryButtonText="{x:Bind ViewModel.SecondaryButtonText, Mode=OneWay}" + CloseButtonText="{x:Bind ViewModel.CloseButtonText, Mode=OneWay}" Style="{StaticResource DefaultContentDialogStyle}" mc:Ignorable="d"> diff --git a/src/Files.App/Helpers/Dialog/DynamicDialogFactory.cs b/src/Files.App/Helpers/Dialog/DynamicDialogFactory.cs index e13d792a8f20..eb4dd9c9040f 100644 --- a/src/Files.App/Helpers/Dialog/DynamicDialogFactory.cs +++ b/src/Files.App/Helpers/Dialog/DynamicDialogFactory.cs @@ -146,8 +146,10 @@ public static DynamicDialog GetFor_FileInUseDialog(List lockingPro TitleText = Strings.FileInUseDialog_Title.GetLocalizedResource(), SubtitleText = lockingProcess.IsEmpty() ? Strings.FileInUseDialog_Text.GetLocalizedResource() : string.Format(Strings.FileInUseByDialog_Text.GetLocalizedResource(), string.Join(", ", lockingProcess.Select(x => $"{x.AppName ?? x.Name} (PID: {x.Pid})"))), - PrimaryButtonText = "OK", - DynamicButtons = DynamicDialogButtons.Primary + PrimaryButtonText = Strings.Retry.GetLocalizedResource(), + SecondaryButtonText = Strings.Skip.GetLocalizedResource(), + CloseButtonText = Strings.SkipAll.GetLocalizedResource(), + DynamicButtons = DynamicDialogButtons.Primary | DynamicDialogButtons.Secondary | DynamicDialogButtons.Cancel }); return dialog; } diff --git a/src/Files.App/Strings/en-US/Resources.resw b/src/Files.App/Strings/en-US/Resources.resw index de41704eed48..84fa129b5076 100644 --- a/src/Files.App/Strings/en-US/Resources.resw +++ b/src/Files.App/Strings/en-US/Resources.resw @@ -165,6 +165,9 @@ Skip + + Skip all + Select all diff --git a/src/Files.App/Utils/Storage/Operations/ShellFilesystemOperations.cs b/src/Files.App/Utils/Storage/Operations/ShellFilesystemOperations.cs index c89155f375e3..0d1c5b86a20a 100644 --- a/src/Files.App/Utils/Storage/Operations/ShellFilesystemOperations.cs +++ b/src/Files.App/Utils/Storage/Operations/ShellFilesystemOperations.cs @@ -857,10 +857,13 @@ private Task GetFileInUseDialog(IEnumerable source, IEnume ? Strings.FileInUseDialog_Text.GetLocalizedResource() : string.Format(Strings.FileInUseByDialog_Text.GetLocalizedResource(), string.Join(", ", lockingProcess.Select(x => $"{x.AppName ?? x.Name} (PID: {x.Pid})"))); - return GetFileListDialog(source, titleText, subtitleText, Strings.Retry.GetLocalizedResource(), Strings.Cancel.GetLocalizedResource()); + return GetFileListDialog(source, titleText, subtitleText, + Strings.Retry.GetLocalizedResource(), + Strings.Skip.GetLocalizedResource(), + Strings.SkipAll.GetLocalizedResource()); } - private async Task GetFileListDialog(IEnumerable source, string titleText, string descriptionText = null, string primaryButtonText = null, string secondaryButtonText = null) + private async Task GetFileListDialog(IEnumerable source, string titleText, string descriptionText = null, string primaryButtonText = null, string secondaryButtonText = null, string closeButtonText = null) { var incomingItems = new List(); List binItems = null; @@ -886,7 +889,7 @@ private async Task GetFileListDialog(IEnumerable source, s } var dialogViewModel = FileSystemDialogViewModel.GetDialogViewModel( - incomingItems, titleText, descriptionText, primaryButtonText, secondaryButtonText); + incomingItems, titleText, descriptionText, primaryButtonText, secondaryButtonText, closeButtonText); var dialogService = Ioc.Default.GetRequiredService(); diff --git a/src/Files.App/ViewModels/Dialogs/FileSystemDialog/FileSystemDialogViewModel.cs b/src/Files.App/ViewModels/Dialogs/FileSystemDialog/FileSystemDialogViewModel.cs index 9de1dbedcf24..da7e88e3d0de 100644 --- a/src/Files.App/ViewModels/Dialogs/FileSystemDialog/FileSystemDialogViewModel.cs +++ b/src/Files.App/ViewModels/Dialogs/FileSystemDialog/FileSystemDialogViewModel.cs @@ -216,7 +216,7 @@ public static FileSystemDialogViewModel GetDialogViewModel(FileSystemDialogMode return viewModel; } - public static FileSystemDialogViewModel GetDialogViewModel(List nonConflictingItems, string titleText, string descriptionText, string primaryButtonText, string secondaryButtonText) + public static FileSystemDialogViewModel GetDialogViewModel(List nonConflictingItems, string titleText, string descriptionText, string primaryButtonText, string secondaryButtonText, string closeButtonText = null) { var viewModel = new FileSystemDialogViewModel( new() @@ -230,6 +230,7 @@ public static FileSystemDialogViewModel GetDialogViewModel(List Date: Wed, 10 Jun 2026 16:11:00 +0530 Subject: [PATCH 2/5] Show Skip and Skip All buttons only when deleting multiple files --- .../Compress/CompressIntoSevenZipAction.cs | 4 +- .../Data/Contracts/IGeneralSettingsService.cs | 2 +- .../PropertiesNavigationViewItemFactory.cs | 2 +- .../Helpers/Dialog/DynamicDialogFactory.cs | 6 +- .../PreviewPopupService.cs | 2 +- .../Services/Windows/WindowsDialogService.cs | 8 +- .../Windows/WindowsRecentItemsService.cs | 2 +- .../Utils/Global/QuickAccessManager.cs | 2 +- src/Files.App/Utils/Shell/LaunchHelper.cs | 2 +- .../Utils/Signatures/DigitalSignaturesUtil.cs | 4 +- .../Operations/FileOperationsHelpers.cs | 6 +- .../Operations/ShellFilesystemOperations.cs | 11 ++- .../Storage/StorageItems/NativeStorageFile.cs | 6 +- .../Properties/Items/CombinedProperties.cs | 2 +- .../Properties/MainPropertiesViewModel.cs | 4 +- .../ViewModels/Settings/GeneralViewModel.cs | 2 +- .../NavigationToolbarViewModel.cs | 6 +- .../ViewModels/UserControls/ShelfViewModel.cs | 94 +++++++++---------- .../Views/Layouts/DetailsLayoutPage.xaml.cs | 2 +- 19 files changed, 86 insertions(+), 81 deletions(-) diff --git a/src/Files.App/Actions/Content/Archives/Compress/CompressIntoSevenZipAction.cs b/src/Files.App/Actions/Content/Archives/Compress/CompressIntoSevenZipAction.cs index f2453eb1c53c..57ac65200add 100644 --- a/src/Files.App/Actions/Content/Archives/Compress/CompressIntoSevenZipAction.cs +++ b/src/Files.App/Actions/Content/Archives/Compress/CompressIntoSevenZipAction.cs @@ -8,10 +8,10 @@ internal sealed partial class CompressIntoSevenZipAction : BaseCompressArchiveAc { public override string Label => string.Format(Strings.CreateNamedArchive.GetLocalizedResource(), $"{StorageArchiveService.GenerateArchiveNameFromItems(context.SelectedItems)}.7z"); - + public override string ExtendedLabel => Strings.CompressIntoSevenZip.GetLocalizedResource(); - + public override string Description => Strings.CompressIntoSevenZipDescription.GetLocalizedFormatResource(context.SelectedItems.Count); diff --git a/src/Files.App/Data/Contracts/IGeneralSettingsService.cs b/src/Files.App/Data/Contracts/IGeneralSettingsService.cs index 6540eb042dcc..e04dc303c1c1 100644 --- a/src/Files.App/Data/Contracts/IGeneralSettingsService.cs +++ b/src/Files.App/Data/Contracts/IGeneralSettingsService.cs @@ -344,7 +344,7 @@ public interface IGeneralSettingsService : IBaseSettingsService, INotifyProperty /// Gets or sets the thumbnail cache size limit in MB. /// double ThumbnailCacheSizeLimit { get; set; } - + /// Gets or sets a value indicating whether smooth scrolling is enabled. /// bool EnableSmoothScrolling { get; set; } diff --git a/src/Files.App/Data/Factories/PropertiesNavigationViewItemFactory.cs b/src/Files.App/Data/Factories/PropertiesNavigationViewItemFactory.cs index c39a8c4f341a..0b691086e42e 100644 --- a/src/Files.App/Data/Factories/PropertiesNavigationViewItemFactory.cs +++ b/src/Files.App/Data/Factories/PropertiesNavigationViewItemFactory.cs @@ -110,7 +110,7 @@ public static ObservableCollection Initialize var detailsItemEnabled = !(isFolder && !listedItem.IsArchive) && !isLibrary && !listedItem.IsRecycleBinItem; var customizationItemEnabled = !isLibrary && (isFolder && !listedItem.IsArchive || isShortcut); var compatibilityItemEnabled = FileExtensionHelpers.IsExecutableFile(listedItem is IShortcutItem sht ? sht.TargetPath : fileExt, true); - var signaturesItemEnabled = + var signaturesItemEnabled = !isFolder && !isLibrary && !listedItem.IsRecycleBinItem && diff --git a/src/Files.App/Helpers/Dialog/DynamicDialogFactory.cs b/src/Files.App/Helpers/Dialog/DynamicDialogFactory.cs index eb4dd9c9040f..b313a01d5bf2 100644 --- a/src/Files.App/Helpers/Dialog/DynamicDialogFactory.cs +++ b/src/Files.App/Helpers/Dialog/DynamicDialogFactory.cs @@ -147,9 +147,9 @@ public static DynamicDialog GetFor_FileInUseDialog(List lockingPro SubtitleText = lockingProcess.IsEmpty() ? Strings.FileInUseDialog_Text.GetLocalizedResource() : string.Format(Strings.FileInUseByDialog_Text.GetLocalizedResource(), string.Join(", ", lockingProcess.Select(x => $"{x.AppName ?? x.Name} (PID: {x.Pid})"))), PrimaryButtonText = Strings.Retry.GetLocalizedResource(), - SecondaryButtonText = Strings.Skip.GetLocalizedResource(), - CloseButtonText = Strings.SkipAll.GetLocalizedResource(), - DynamicButtons = DynamicDialogButtons.Primary | DynamicDialogButtons.Secondary | DynamicDialogButtons.Cancel + SecondaryButtonText = Strings.Skip.GetLocalizedResource(), + CloseButtonText = Strings.SkipAll.GetLocalizedResource(), + DynamicButtons = DynamicDialogButtons.Primary | DynamicDialogButtons.Secondary | DynamicDialogButtons.Cancel }); return dialog; } diff --git a/src/Files.App/Services/PreviewPopupProviders/PreviewPopupService.cs b/src/Files.App/Services/PreviewPopupProviders/PreviewPopupService.cs index 3a20899e9ee4..43055c2a7946 100644 --- a/src/Files.App/Services/PreviewPopupProviders/PreviewPopupService.cs +++ b/src/Files.App/Services/PreviewPopupProviders/PreviewPopupService.cs @@ -7,7 +7,7 @@ namespace Files.App.Services.PreviewPopupProviders internal sealed partial class PreviewPopupService : ObservableObject, IPreviewPopupService { public async Task GetProviderAsync() - { + { if (await QuickLookProvider.Instance.DetectAvailability()) return await Task.FromResult(QuickLookProvider.Instance); if (await SeerProProvider.Instance.DetectAvailability()) diff --git a/src/Files.App/Services/Windows/WindowsDialogService.cs b/src/Files.App/Services/Windows/WindowsDialogService.cs index 20612523bd0a..9c05ae5e77af 100644 --- a/src/Files.App/Services/Windows/WindowsDialogService.cs +++ b/src/Files.App/Services/Windows/WindowsDialogService.cs @@ -24,7 +24,7 @@ public unsafe bool Open_FileOpenDialog(nint hWnd, bool pickFoldersOnly, string[] { using ComPtr pDialog = default; HRESULT hr = pDialog.CoCreateInstance(CLSID.CLSID_FileOpenDialog, null, CLSCTX.CLSCTX_INPROC_SERVER); - + // Handle COM creation failure gracefully if (hr.Failed) { @@ -60,7 +60,7 @@ public unsafe bool Open_FileOpenDialog(nint hWnd, bool pickFoldersOnly, string[] null, IID.IID_IShellItem, (void**)pDefaultFolderShellItem.GetAddressOf()); - + // Handle shell item creation failure gracefully if (hr.Failed) { @@ -123,7 +123,7 @@ public unsafe bool Open_FileSaveDialog(nint hWnd, bool pickFoldersOnly, string[] { using ComPtr pDialog = default; HRESULT hr = pDialog.CoCreateInstance(CLSID.CLSID_FileSaveDialog, null, CLSCTX.CLSCTX_INPROC_SERVER); - + // Handle COM creation failure gracefully if (hr.Failed) { @@ -159,7 +159,7 @@ public unsafe bool Open_FileSaveDialog(nint hWnd, bool pickFoldersOnly, string[] null, IID.IID_IShellItem, (void**)pDefaultFolderShellItem.GetAddressOf()); - + // Handle shell item creation failure gracefully if (hr.Failed) { diff --git a/src/Files.App/Services/Windows/WindowsRecentItemsService.cs b/src/Files.App/Services/Windows/WindowsRecentItemsService.cs index 7668078bd408..f1952a4bca3c 100644 --- a/src/Files.App/Services/Windows/WindowsRecentItemsService.cs +++ b/src/Files.App/Services/Windows/WindowsRecentItemsService.cs @@ -61,7 +61,7 @@ public IReadOnlyList RecentFolders public WindowsRecentItemsService() { var automaticDestinationsPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Recent), "AutomaticDestinations"); - + // Only create the file system watcher if the AutomaticDestinations directory exists if (Directory.Exists(automaticDestinationsPath)) { diff --git a/src/Files.App/Utils/Global/QuickAccessManager.cs b/src/Files.App/Utils/Global/QuickAccessManager.cs index 6b2b1de36bd6..0c3e7798e5fa 100644 --- a/src/Files.App/Utils/Global/QuickAccessManager.cs +++ b/src/Files.App/Utils/Global/QuickAccessManager.cs @@ -26,7 +26,7 @@ public QuickAccessManager() public void Initialize() { var automaticDestinationsPath = Path.Join(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Microsoft", "Windows", "Recent", "AutomaticDestinations"); - + // Only initialize FileSystemWatcher if the directory exists // This handles cases where AppData is redirected to network locations that don't contain Windows system directories if (Directory.Exists(automaticDestinationsPath)) diff --git a/src/Files.App/Utils/Shell/LaunchHelper.cs b/src/Files.App/Utils/Shell/LaunchHelper.cs index 1ca4da412470..6242cb067dc1 100644 --- a/src/Files.App/Utils/Shell/LaunchHelper.cs +++ b/src/Files.App/Utils/Shell/LaunchHelper.cs @@ -107,7 +107,7 @@ private static async Task HandleApplicationLaunch(string application, stri string key = (string)ent.Key; // Skip USERNAME to avoid issues where files were executed as SYSTEM user (#12139) - if (string.Equals(key, "USERNAME", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, "USERNAME", StringComparison.OrdinalIgnoreCase)) continue; process.StartInfo.EnvironmentVariables[key] = (string)ent.Value; diff --git a/src/Files.App/Utils/Signatures/DigitalSignaturesUtil.cs b/src/Files.App/Utils/Signatures/DigitalSignaturesUtil.cs index f4bb020f4b0c..d4af13aa38bd 100644 --- a/src/Files.App/Utils/Signatures/DigitalSignaturesUtil.cs +++ b/src/Files.App/Utils/Signatures/DigitalSignaturesUtil.cs @@ -224,7 +224,7 @@ private unsafe static bool GetSignerCertificateInfo(string fileName, List GetFileInUseDialog(IEnumerable source, IEnume ? Strings.FileInUseDialog_Text.GetLocalizedResource() : string.Format(Strings.FileInUseByDialog_Text.GetLocalizedResource(), string.Join(", ", lockingProcess.Select(x => $"{x.AppName ?? x.Name} (PID: {x.Pid})"))); - return GetFileListDialog(source, titleText, subtitleText, + var sourceCount = source.Count(); + + return GetFileListDialog( + source, + titleText, + subtitleText, Strings.Retry.GetLocalizedResource(), - Strings.Skip.GetLocalizedResource(), - Strings.SkipAll.GetLocalizedResource()); + sourceCount > 1 ? Strings.Skip.GetLocalizedResource() : Strings.Cancel.GetLocalizedResource(), + sourceCount > 1 ? Strings.SkipAll.GetLocalizedResource() : null); } private async Task GetFileListDialog(IEnumerable source, string titleText, string descriptionText = null, string primaryButtonText = null, string secondaryButtonText = null, string closeButtonText = null) diff --git a/src/Files.App/Utils/Storage/StorageItems/NativeStorageFile.cs b/src/Files.App/Utils/Storage/StorageItems/NativeStorageFile.cs index 83c5e8f829d6..17e48f9dc760 100644 --- a/src/Files.App/Utils/Storage/StorageItems/NativeStorageFile.cs +++ b/src/Files.App/Utils/Storage/StorageItems/NativeStorageFile.cs @@ -55,7 +55,7 @@ private unsafe string GetDisplayTypeFromShell() { SHFILEINFOW shfi = default; var flags = SHGFI_FLAGS.SHGFI_TYPENAME | SHGFI_FLAGS.SHGFI_USEFILEATTRIBUTES; - + fixed (char* pExtension = extension) { var result = PInvoke.SHGetFileInfo( @@ -64,7 +64,7 @@ private unsafe string GetDisplayTypeFromShell() &shfi, (uint)sizeof(SHFILEINFOW), flags); - + if (result != 0 && shfi.szTypeName.Value[0] != '\0') { var typeName = shfi.szTypeName.ToString(); @@ -78,7 +78,7 @@ private unsafe string GetDisplayTypeFromShell() var itemType = Strings.File.GetLocalizedResource(); if (Name.Contains('.', StringComparison.Ordinal)) itemType = extension?.Trim('.') + " " + itemType; - + return itemType; } diff --git a/src/Files.App/ViewModels/Properties/Items/CombinedProperties.cs b/src/Files.App/ViewModels/Properties/Items/CombinedProperties.cs index da6721fcb94d..d87d5f46b949 100644 --- a/src/Files.App/ViewModels/Properties/Items/CombinedProperties.cs +++ b/src/Files.App/ViewModels/Properties/Items/CombinedProperties.cs @@ -67,7 +67,7 @@ public override async Task GetSpecialPropertiesAsync() allNotCompressed &= !isCompressed; anyCanCompress |= Win32Helper.CanCompressContent(x.ItemPath); } - + if (allFiles) { if (allReadOnly) diff --git a/src/Files.App/ViewModels/Properties/MainPropertiesViewModel.cs b/src/Files.App/ViewModels/Properties/MainPropertiesViewModel.cs index c08207483881..64d64f8806a1 100644 --- a/src/Files.App/ViewModels/Properties/MainPropertiesViewModel.cs +++ b/src/Files.App/ViewModels/Properties/MainPropertiesViewModel.cs @@ -40,8 +40,8 @@ public NavigationViewItemButtonStyleItem SelectedNavigationViewItem PropertiesNavigationViewItemType.Security => typeof(SecurityPage), PropertiesNavigationViewItemType.Customization => typeof(CustomizationPage), PropertiesNavigationViewItemType.Compatibility => typeof(CompatibilityPage), - PropertiesNavigationViewItemType.Hashes => typeof(HashesPage), - PropertiesNavigationViewItemType.Signatures => typeof(SignaturesPage), + PropertiesNavigationViewItemType.Hashes => typeof(HashesPage), + PropertiesNavigationViewItemType.Signatures => typeof(SignaturesPage), _ => typeof(GeneralPage), }; diff --git a/src/Files.App/ViewModels/Settings/GeneralViewModel.cs b/src/Files.App/ViewModels/Settings/GeneralViewModel.cs index 5e80e7c88c92..9efa8f618d7c 100644 --- a/src/Files.App/ViewModels/Settings/GeneralViewModel.cs +++ b/src/Files.App/ViewModels/Settings/GeneralViewModel.cs @@ -467,7 +467,7 @@ public bool ShowPinToStart } } } - + public bool ShowEditTagsMenu { get => UserSettingsService.GeneralSettingsService.ShowEditTagsMenu; diff --git a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs index 901f23a0f0c1..b5965120913c 100644 --- a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs @@ -1030,12 +1030,12 @@ public async Task PopulateOmnibarSuggestionsForPathMode() void AddNoResultsItem() { PathModeSuggestionItems.Clear(); - + // Use null-safe access to avoid NullReferenceException during app lifecycle transitions var workingDirectory = string.IsNullOrEmpty(ContentPageContext.ShellPage?.ShellViewModel?.WorkingDirectory) ? Constants.UserEnvironmentPaths.HomePath : ContentPageContext.ShellPage.ShellViewModel.WorkingDirectory; - + PathModeSuggestionItems.Add(new( workingDirectory, Strings.NavigationToolbarVisiblePathNoResults.GetLocalizedResource())); @@ -1062,7 +1062,7 @@ public async Task PopulateOmnibarSuggestionsForCommandPaletteMode() int processedCount = 0; foreach (var command in commandsToProcess) - { + { if (!command.IsExecutable) { processedCount++; diff --git a/src/Files.App/ViewModels/UserControls/ShelfViewModel.cs b/src/Files.App/ViewModels/UserControls/ShelfViewModel.cs index d6461384306e..f6aae67455b8 100644 --- a/src/Files.App/ViewModels/UserControls/ShelfViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/ShelfViewModel.cs @@ -48,49 +48,49 @@ private async void Items_CollectionChanged(object? sender, NotifyCollectionChang switch (e.Action) { case NotifyCollectionChangedAction.Add when e.NewItems is not null: - { - if (e.NewItems[0] is not ShelfItem shelfItem) - return; - - var parentPath = SystemIO.Path.GetDirectoryName(shelfItem.Inner.Id) ?? string.Empty; - if (_watchers.TryGetValue(parentPath, out var reference)) { - // Only increase the reference count if the watcher already exists - reference.ReferenceCount += 1; - return; + if (e.NewItems[0] is not ShelfItem shelfItem) + return; + + var parentPath = SystemIO.Path.GetDirectoryName(shelfItem.Inner.Id) ?? string.Empty; + if (_watchers.TryGetValue(parentPath, out var reference)) + { + // Only increase the reference count if the watcher already exists + reference.ReferenceCount += 1; + return; + } + + if (await shelfItem.Inner.GetParentAsync() is not IMutableFolder mutableFolder) + return; + + // Register new watcher + var watcher = await mutableFolder.GetFolderWatcherAsync(); + watcher.CollectionChanged += Watcher_CollectionChanged; + + _watchers.Add(parentPath, new(watcher, 1)); + break; } - if (await shelfItem.Inner.GetParentAsync() is not IMutableFolder mutableFolder) - return; - - // Register new watcher - var watcher = await mutableFolder.GetFolderWatcherAsync(); - watcher.CollectionChanged += Watcher_CollectionChanged; - - _watchers.Add(parentPath, new(watcher, 1)); - break; - } - case NotifyCollectionChangedAction.Remove when e.OldItems is not null: - { - if (e.OldItems[0] is not ShelfItem shelfItem) - return; - - var parentPath = SystemIO.Path.GetDirectoryName(shelfItem.Inner.Id) ?? string.Empty; - if (!_watchers.TryGetValue(parentPath, out var reference)) - return; - - // Decrease the reference count and remove the watcher if no references are present - reference.ReferenceCount -= 1; - if (reference.ReferenceCount < 1) { - reference.FolderWatcher.CollectionChanged -= Watcher_CollectionChanged; - reference.FolderWatcher.Dispose(); - _watchers.Remove(parentPath); + if (e.OldItems[0] is not ShelfItem shelfItem) + return; + + var parentPath = SystemIO.Path.GetDirectoryName(shelfItem.Inner.Id) ?? string.Empty; + if (!_watchers.TryGetValue(parentPath, out var reference)) + return; + + // Decrease the reference count and remove the watcher if no references are present + reference.ReferenceCount -= 1; + if (reference.ReferenceCount < 1) + { + reference.FolderWatcher.CollectionChanged -= Watcher_CollectionChanged; + reference.FolderWatcher.Dispose(); + _watchers.Remove(parentPath); + } + + break; } - - break; - } } } @@ -99,16 +99,16 @@ private async void Watcher_CollectionChanged(object? sender, NotifyCollectionCha switch (e.Action) { case NotifyCollectionChangedAction.Remove when e.OldItems is not null: - { - // Remove the matching item notified from the watcher - var item = e.OldItems.Cast().ElementAt(0); - var itemToRemove = Items.FirstOrDefault(x => x.Inner.Id == item.Id); - if (itemToRemove is null) - return; - - await MainWindow.Instance.DispatcherQueue.EnqueueOrInvokeAsync(() => Items.Remove(itemToRemove)); - break; - } + { + // Remove the matching item notified from the watcher + var item = e.OldItems.Cast().ElementAt(0); + var itemToRemove = Items.FirstOrDefault(x => x.Inner.Id == item.Id); + if (itemToRemove is null) + return; + + await MainWindow.Instance.DispatcherQueue.EnqueueOrInvokeAsync(() => Items.Remove(itemToRemove)); + break; + } } } } diff --git a/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs b/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs index ab3bb639884d..14253469729a 100644 --- a/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs +++ b/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs @@ -920,7 +920,7 @@ private void FileList_Loaded(object sender, RoutedEventArgs e) return; void OnZoomScrolled(object? s, ScrollViewerViewChangedEventArgs ve) { - scroller.ViewChanged -= OnZoomScrolled; + scroller.ViewChanged -= OnZoomScrolled; scroller.ChangeView(0, Math.Max(0, scroller.VerticalOffset - OffsetCorrection), null, true); } scroller.ViewChanged += OnZoomScrolled; From 9b14d12c045de1a13b3eb3de922768d523a8aa86 Mon Sep 17 00:00:00 2001 From: Yair <39923744+yair100@users.noreply.github.com> Date: Wed, 10 Jun 2026 10:31:28 -0400 Subject: [PATCH 3/5] Reverted whitespace changes --- .../Compress/CompressIntoSevenZipAction.cs | 4 +- .../Data/Contracts/IGeneralSettingsService.cs | 2 +- .../PropertiesNavigationViewItemFactory.cs | 2 +- .../PreviewPopupService.cs | 2 +- .../Services/Windows/WindowsDialogService.cs | 8 +- .../Windows/WindowsRecentItemsService.cs | 2 +- .../Utils/Global/QuickAccessManager.cs | 2 +- src/Files.App/Utils/Shell/LaunchHelper.cs | 2 +- .../Operations/FileOperationsHelpers.cs | 6 +- .../Storage/StorageItems/NativeStorageFile.cs | 6 +- .../Properties/Items/CombinedProperties.cs | 2 +- .../Properties/MainPropertiesViewModel.cs | 4 +- .../ViewModels/Settings/GeneralViewModel.cs | 2 +- .../NavigationToolbarViewModel.cs | 6 +- .../ViewModels/UserControls/ShelfViewModel.cs | 94 +++++++++---------- .../Views/Layouts/DetailsLayoutPage.xaml.cs | 2 +- 16 files changed, 73 insertions(+), 73 deletions(-) diff --git a/src/Files.App/Actions/Content/Archives/Compress/CompressIntoSevenZipAction.cs b/src/Files.App/Actions/Content/Archives/Compress/CompressIntoSevenZipAction.cs index 57ac65200add..f2453eb1c53c 100644 --- a/src/Files.App/Actions/Content/Archives/Compress/CompressIntoSevenZipAction.cs +++ b/src/Files.App/Actions/Content/Archives/Compress/CompressIntoSevenZipAction.cs @@ -8,10 +8,10 @@ internal sealed partial class CompressIntoSevenZipAction : BaseCompressArchiveAc { public override string Label => string.Format(Strings.CreateNamedArchive.GetLocalizedResource(), $"{StorageArchiveService.GenerateArchiveNameFromItems(context.SelectedItems)}.7z"); - + public override string ExtendedLabel => Strings.CompressIntoSevenZip.GetLocalizedResource(); - + public override string Description => Strings.CompressIntoSevenZipDescription.GetLocalizedFormatResource(context.SelectedItems.Count); diff --git a/src/Files.App/Data/Contracts/IGeneralSettingsService.cs b/src/Files.App/Data/Contracts/IGeneralSettingsService.cs index e04dc303c1c1..6540eb042dcc 100644 --- a/src/Files.App/Data/Contracts/IGeneralSettingsService.cs +++ b/src/Files.App/Data/Contracts/IGeneralSettingsService.cs @@ -344,7 +344,7 @@ public interface IGeneralSettingsService : IBaseSettingsService, INotifyProperty /// Gets or sets the thumbnail cache size limit in MB. /// double ThumbnailCacheSizeLimit { get; set; } - + /// Gets or sets a value indicating whether smooth scrolling is enabled. /// bool EnableSmoothScrolling { get; set; } diff --git a/src/Files.App/Data/Factories/PropertiesNavigationViewItemFactory.cs b/src/Files.App/Data/Factories/PropertiesNavigationViewItemFactory.cs index 0b691086e42e..c39a8c4f341a 100644 --- a/src/Files.App/Data/Factories/PropertiesNavigationViewItemFactory.cs +++ b/src/Files.App/Data/Factories/PropertiesNavigationViewItemFactory.cs @@ -110,7 +110,7 @@ public static ObservableCollection Initialize var detailsItemEnabled = !(isFolder && !listedItem.IsArchive) && !isLibrary && !listedItem.IsRecycleBinItem; var customizationItemEnabled = !isLibrary && (isFolder && !listedItem.IsArchive || isShortcut); var compatibilityItemEnabled = FileExtensionHelpers.IsExecutableFile(listedItem is IShortcutItem sht ? sht.TargetPath : fileExt, true); - var signaturesItemEnabled = + var signaturesItemEnabled = !isFolder && !isLibrary && !listedItem.IsRecycleBinItem && diff --git a/src/Files.App/Services/PreviewPopupProviders/PreviewPopupService.cs b/src/Files.App/Services/PreviewPopupProviders/PreviewPopupService.cs index 43055c2a7946..3a20899e9ee4 100644 --- a/src/Files.App/Services/PreviewPopupProviders/PreviewPopupService.cs +++ b/src/Files.App/Services/PreviewPopupProviders/PreviewPopupService.cs @@ -7,7 +7,7 @@ namespace Files.App.Services.PreviewPopupProviders internal sealed partial class PreviewPopupService : ObservableObject, IPreviewPopupService { public async Task GetProviderAsync() - { + { if (await QuickLookProvider.Instance.DetectAvailability()) return await Task.FromResult(QuickLookProvider.Instance); if (await SeerProProvider.Instance.DetectAvailability()) diff --git a/src/Files.App/Services/Windows/WindowsDialogService.cs b/src/Files.App/Services/Windows/WindowsDialogService.cs index 9c05ae5e77af..20612523bd0a 100644 --- a/src/Files.App/Services/Windows/WindowsDialogService.cs +++ b/src/Files.App/Services/Windows/WindowsDialogService.cs @@ -24,7 +24,7 @@ public unsafe bool Open_FileOpenDialog(nint hWnd, bool pickFoldersOnly, string[] { using ComPtr pDialog = default; HRESULT hr = pDialog.CoCreateInstance(CLSID.CLSID_FileOpenDialog, null, CLSCTX.CLSCTX_INPROC_SERVER); - + // Handle COM creation failure gracefully if (hr.Failed) { @@ -60,7 +60,7 @@ public unsafe bool Open_FileOpenDialog(nint hWnd, bool pickFoldersOnly, string[] null, IID.IID_IShellItem, (void**)pDefaultFolderShellItem.GetAddressOf()); - + // Handle shell item creation failure gracefully if (hr.Failed) { @@ -123,7 +123,7 @@ public unsafe bool Open_FileSaveDialog(nint hWnd, bool pickFoldersOnly, string[] { using ComPtr pDialog = default; HRESULT hr = pDialog.CoCreateInstance(CLSID.CLSID_FileSaveDialog, null, CLSCTX.CLSCTX_INPROC_SERVER); - + // Handle COM creation failure gracefully if (hr.Failed) { @@ -159,7 +159,7 @@ public unsafe bool Open_FileSaveDialog(nint hWnd, bool pickFoldersOnly, string[] null, IID.IID_IShellItem, (void**)pDefaultFolderShellItem.GetAddressOf()); - + // Handle shell item creation failure gracefully if (hr.Failed) { diff --git a/src/Files.App/Services/Windows/WindowsRecentItemsService.cs b/src/Files.App/Services/Windows/WindowsRecentItemsService.cs index f1952a4bca3c..7668078bd408 100644 --- a/src/Files.App/Services/Windows/WindowsRecentItemsService.cs +++ b/src/Files.App/Services/Windows/WindowsRecentItemsService.cs @@ -61,7 +61,7 @@ public IReadOnlyList RecentFolders public WindowsRecentItemsService() { var automaticDestinationsPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Recent), "AutomaticDestinations"); - + // Only create the file system watcher if the AutomaticDestinations directory exists if (Directory.Exists(automaticDestinationsPath)) { diff --git a/src/Files.App/Utils/Global/QuickAccessManager.cs b/src/Files.App/Utils/Global/QuickAccessManager.cs index 0c3e7798e5fa..6b2b1de36bd6 100644 --- a/src/Files.App/Utils/Global/QuickAccessManager.cs +++ b/src/Files.App/Utils/Global/QuickAccessManager.cs @@ -26,7 +26,7 @@ public QuickAccessManager() public void Initialize() { var automaticDestinationsPath = Path.Join(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Microsoft", "Windows", "Recent", "AutomaticDestinations"); - + // Only initialize FileSystemWatcher if the directory exists // This handles cases where AppData is redirected to network locations that don't contain Windows system directories if (Directory.Exists(automaticDestinationsPath)) diff --git a/src/Files.App/Utils/Shell/LaunchHelper.cs b/src/Files.App/Utils/Shell/LaunchHelper.cs index 6242cb067dc1..1ca4da412470 100644 --- a/src/Files.App/Utils/Shell/LaunchHelper.cs +++ b/src/Files.App/Utils/Shell/LaunchHelper.cs @@ -107,7 +107,7 @@ private static async Task HandleApplicationLaunch(string application, stri string key = (string)ent.Key; // Skip USERNAME to avoid issues where files were executed as SYSTEM user (#12139) - if (string.Equals(key, "USERNAME", StringComparison.OrdinalIgnoreCase)) + if (string.Equals(key, "USERNAME", StringComparison.OrdinalIgnoreCase)) continue; process.StartInfo.EnvironmentVariables[key] = (string)ent.Value; diff --git a/src/Files.App/Utils/Storage/Operations/FileOperationsHelpers.cs b/src/Files.App/Utils/Storage/Operations/FileOperationsHelpers.cs index ab88231a2b25..0ce4ed32fe50 100644 --- a/src/Files.App/Utils/Storage/Operations/FileOperationsHelpers.cs +++ b/src/Files.App/Utils/Storage/Operations/FileOperationsHelpers.cs @@ -817,7 +817,7 @@ public static bool SetLinkIcon(string filePath, string? iconFile, int iconIndex) filePath = filePath.Replace("'", "''"); iconFile = iconFile.Replace("'", "''"); - if (ext == ".url") + if(ext == ".url") { psScript = $@" $path = '{filePath}' @@ -901,10 +901,10 @@ private static bool TrySetUrlShortcutIcon(string filePath, string iconFile, int int index = 0; int insertedIndex = 0; - foreach (var line in lines) + foreach(var line in lines) { var isInternetShortcutHeader = line.Trim().Equals("[InternetShortcut]", StringComparison.OrdinalIgnoreCase); - if (isInternetShortcutHeader) + if(isInternetShortcutHeader) { insertedIndex = index + 1; break; diff --git a/src/Files.App/Utils/Storage/StorageItems/NativeStorageFile.cs b/src/Files.App/Utils/Storage/StorageItems/NativeStorageFile.cs index 17e48f9dc760..83c5e8f829d6 100644 --- a/src/Files.App/Utils/Storage/StorageItems/NativeStorageFile.cs +++ b/src/Files.App/Utils/Storage/StorageItems/NativeStorageFile.cs @@ -55,7 +55,7 @@ private unsafe string GetDisplayTypeFromShell() { SHFILEINFOW shfi = default; var flags = SHGFI_FLAGS.SHGFI_TYPENAME | SHGFI_FLAGS.SHGFI_USEFILEATTRIBUTES; - + fixed (char* pExtension = extension) { var result = PInvoke.SHGetFileInfo( @@ -64,7 +64,7 @@ private unsafe string GetDisplayTypeFromShell() &shfi, (uint)sizeof(SHFILEINFOW), flags); - + if (result != 0 && shfi.szTypeName.Value[0] != '\0') { var typeName = shfi.szTypeName.ToString(); @@ -78,7 +78,7 @@ private unsafe string GetDisplayTypeFromShell() var itemType = Strings.File.GetLocalizedResource(); if (Name.Contains('.', StringComparison.Ordinal)) itemType = extension?.Trim('.') + " " + itemType; - + return itemType; } diff --git a/src/Files.App/ViewModels/Properties/Items/CombinedProperties.cs b/src/Files.App/ViewModels/Properties/Items/CombinedProperties.cs index d87d5f46b949..da6721fcb94d 100644 --- a/src/Files.App/ViewModels/Properties/Items/CombinedProperties.cs +++ b/src/Files.App/ViewModels/Properties/Items/CombinedProperties.cs @@ -67,7 +67,7 @@ public override async Task GetSpecialPropertiesAsync() allNotCompressed &= !isCompressed; anyCanCompress |= Win32Helper.CanCompressContent(x.ItemPath); } - + if (allFiles) { if (allReadOnly) diff --git a/src/Files.App/ViewModels/Properties/MainPropertiesViewModel.cs b/src/Files.App/ViewModels/Properties/MainPropertiesViewModel.cs index 64d64f8806a1..c08207483881 100644 --- a/src/Files.App/ViewModels/Properties/MainPropertiesViewModel.cs +++ b/src/Files.App/ViewModels/Properties/MainPropertiesViewModel.cs @@ -40,8 +40,8 @@ public NavigationViewItemButtonStyleItem SelectedNavigationViewItem PropertiesNavigationViewItemType.Security => typeof(SecurityPage), PropertiesNavigationViewItemType.Customization => typeof(CustomizationPage), PropertiesNavigationViewItemType.Compatibility => typeof(CompatibilityPage), - PropertiesNavigationViewItemType.Hashes => typeof(HashesPage), - PropertiesNavigationViewItemType.Signatures => typeof(SignaturesPage), + PropertiesNavigationViewItemType.Hashes => typeof(HashesPage), + PropertiesNavigationViewItemType.Signatures => typeof(SignaturesPage), _ => typeof(GeneralPage), }; diff --git a/src/Files.App/ViewModels/Settings/GeneralViewModel.cs b/src/Files.App/ViewModels/Settings/GeneralViewModel.cs index 9efa8f618d7c..5e80e7c88c92 100644 --- a/src/Files.App/ViewModels/Settings/GeneralViewModel.cs +++ b/src/Files.App/ViewModels/Settings/GeneralViewModel.cs @@ -467,7 +467,7 @@ public bool ShowPinToStart } } } - + public bool ShowEditTagsMenu { get => UserSettingsService.GeneralSettingsService.ShowEditTagsMenu; diff --git a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs index b5965120913c..901f23a0f0c1 100644 --- a/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/NavigationToolbarViewModel.cs @@ -1030,12 +1030,12 @@ public async Task PopulateOmnibarSuggestionsForPathMode() void AddNoResultsItem() { PathModeSuggestionItems.Clear(); - + // Use null-safe access to avoid NullReferenceException during app lifecycle transitions var workingDirectory = string.IsNullOrEmpty(ContentPageContext.ShellPage?.ShellViewModel?.WorkingDirectory) ? Constants.UserEnvironmentPaths.HomePath : ContentPageContext.ShellPage.ShellViewModel.WorkingDirectory; - + PathModeSuggestionItems.Add(new( workingDirectory, Strings.NavigationToolbarVisiblePathNoResults.GetLocalizedResource())); @@ -1062,7 +1062,7 @@ public async Task PopulateOmnibarSuggestionsForCommandPaletteMode() int processedCount = 0; foreach (var command in commandsToProcess) - { + { if (!command.IsExecutable) { processedCount++; diff --git a/src/Files.App/ViewModels/UserControls/ShelfViewModel.cs b/src/Files.App/ViewModels/UserControls/ShelfViewModel.cs index f6aae67455b8..d6461384306e 100644 --- a/src/Files.App/ViewModels/UserControls/ShelfViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/ShelfViewModel.cs @@ -48,49 +48,49 @@ private async void Items_CollectionChanged(object? sender, NotifyCollectionChang switch (e.Action) { case NotifyCollectionChangedAction.Add when e.NewItems is not null: + { + if (e.NewItems[0] is not ShelfItem shelfItem) + return; + + var parentPath = SystemIO.Path.GetDirectoryName(shelfItem.Inner.Id) ?? string.Empty; + if (_watchers.TryGetValue(parentPath, out var reference)) { - if (e.NewItems[0] is not ShelfItem shelfItem) - return; - - var parentPath = SystemIO.Path.GetDirectoryName(shelfItem.Inner.Id) ?? string.Empty; - if (_watchers.TryGetValue(parentPath, out var reference)) - { - // Only increase the reference count if the watcher already exists - reference.ReferenceCount += 1; - return; - } - - if (await shelfItem.Inner.GetParentAsync() is not IMutableFolder mutableFolder) - return; - - // Register new watcher - var watcher = await mutableFolder.GetFolderWatcherAsync(); - watcher.CollectionChanged += Watcher_CollectionChanged; - - _watchers.Add(parentPath, new(watcher, 1)); - break; + // Only increase the reference count if the watcher already exists + reference.ReferenceCount += 1; + return; } + if (await shelfItem.Inner.GetParentAsync() is not IMutableFolder mutableFolder) + return; + + // Register new watcher + var watcher = await mutableFolder.GetFolderWatcherAsync(); + watcher.CollectionChanged += Watcher_CollectionChanged; + + _watchers.Add(parentPath, new(watcher, 1)); + break; + } + case NotifyCollectionChangedAction.Remove when e.OldItems is not null: + { + if (e.OldItems[0] is not ShelfItem shelfItem) + return; + + var parentPath = SystemIO.Path.GetDirectoryName(shelfItem.Inner.Id) ?? string.Empty; + if (!_watchers.TryGetValue(parentPath, out var reference)) + return; + + // Decrease the reference count and remove the watcher if no references are present + reference.ReferenceCount -= 1; + if (reference.ReferenceCount < 1) { - if (e.OldItems[0] is not ShelfItem shelfItem) - return; - - var parentPath = SystemIO.Path.GetDirectoryName(shelfItem.Inner.Id) ?? string.Empty; - if (!_watchers.TryGetValue(parentPath, out var reference)) - return; - - // Decrease the reference count and remove the watcher if no references are present - reference.ReferenceCount -= 1; - if (reference.ReferenceCount < 1) - { - reference.FolderWatcher.CollectionChanged -= Watcher_CollectionChanged; - reference.FolderWatcher.Dispose(); - _watchers.Remove(parentPath); - } - - break; + reference.FolderWatcher.CollectionChanged -= Watcher_CollectionChanged; + reference.FolderWatcher.Dispose(); + _watchers.Remove(parentPath); } + + break; + } } } @@ -99,16 +99,16 @@ private async void Watcher_CollectionChanged(object? sender, NotifyCollectionCha switch (e.Action) { case NotifyCollectionChangedAction.Remove when e.OldItems is not null: - { - // Remove the matching item notified from the watcher - var item = e.OldItems.Cast().ElementAt(0); - var itemToRemove = Items.FirstOrDefault(x => x.Inner.Id == item.Id); - if (itemToRemove is null) - return; - - await MainWindow.Instance.DispatcherQueue.EnqueueOrInvokeAsync(() => Items.Remove(itemToRemove)); - break; - } + { + // Remove the matching item notified from the watcher + var item = e.OldItems.Cast().ElementAt(0); + var itemToRemove = Items.FirstOrDefault(x => x.Inner.Id == item.Id); + if (itemToRemove is null) + return; + + await MainWindow.Instance.DispatcherQueue.EnqueueOrInvokeAsync(() => Items.Remove(itemToRemove)); + break; + } } } } diff --git a/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs b/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs index 14253469729a..ab3bb639884d 100644 --- a/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs +++ b/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs @@ -920,7 +920,7 @@ private void FileList_Loaded(object sender, RoutedEventArgs e) return; void OnZoomScrolled(object? s, ScrollViewerViewChangedEventArgs ve) { - scroller.ViewChanged -= OnZoomScrolled; + scroller.ViewChanged -= OnZoomScrolled; scroller.ChangeView(0, Math.Max(0, scroller.VerticalOffset - OffsetCorrection), null, true); } scroller.ViewChanged += OnZoomScrolled; From e517a7913e7016a7a53a8347c018a4c36d2e8b51 Mon Sep 17 00:00:00 2001 From: Yair <39923744+yair100@users.noreply.github.com> Date: Wed, 10 Jun 2026 11:38:13 -0400 Subject: [PATCH 4/5] Update FilesystemOperationDialog.xaml --- src/Files.App/Dialogs/FilesystemOperationDialog.xaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Files.App/Dialogs/FilesystemOperationDialog.xaml b/src/Files.App/Dialogs/FilesystemOperationDialog.xaml index 0316bb05394c..184b7e01b33c 100644 --- a/src/Files.App/Dialogs/FilesystemOperationDialog.xaml +++ b/src/Files.App/Dialogs/FilesystemOperationDialog.xaml @@ -12,6 +12,7 @@ xmlns:vm="using:Files.App.ViewModels.Dialogs.FileSystemDialog" x:Name="RootDialog" Title="{x:Bind ViewModel.Title, Mode=OneWay}" + CloseButtonText="{x:Bind ViewModel.CloseButtonText, Mode=OneWay}" Closing="RootDialog_Closing" CornerRadius="{StaticResource OverlayCornerRadius}" DefaultButton="Primary" @@ -22,7 +23,6 @@ RequestedTheme="{x:Bind RootAppElement.RequestedTheme, Mode=OneWay}" SecondaryButtonCommand="{x:Bind ViewModel.SecondaryButtonClickCommand, Mode=OneWay}" SecondaryButtonText="{x:Bind ViewModel.SecondaryButtonText, Mode=OneWay}" - CloseButtonText="{x:Bind ViewModel.CloseButtonText, Mode=OneWay}" Style="{StaticResource DefaultContentDialogStyle}" mc:Ignorable="d"> From 70f9104bafb06ec31a77f17eaad5caf72b275298 Mon Sep 17 00:00:00 2001 From: codenano077 Date: Mon, 15 Jun 2026 17:29:03 +0530 Subject: [PATCH 5/5] Replace Cancel with Skip button in File In Use dialog --- .../Utils/Storage/Operations/ShellFilesystemOperations.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Files.App/Utils/Storage/Operations/ShellFilesystemOperations.cs b/src/Files.App/Utils/Storage/Operations/ShellFilesystemOperations.cs index 857b7412277b..dd683065df1c 100644 --- a/src/Files.App/Utils/Storage/Operations/ShellFilesystemOperations.cs +++ b/src/Files.App/Utils/Storage/Operations/ShellFilesystemOperations.cs @@ -864,8 +864,7 @@ private Task GetFileInUseDialog(IEnumerable source, IEnume titleText, subtitleText, Strings.Retry.GetLocalizedResource(), - sourceCount > 1 ? Strings.Skip.GetLocalizedResource() : Strings.Cancel.GetLocalizedResource(), - sourceCount > 1 ? Strings.SkipAll.GetLocalizedResource() : null); + sourceCount > 1 ? Strings.Skip.GetLocalizedResource() : Strings.Cancel.GetLocalizedResource()); } private async Task GetFileListDialog(IEnumerable source, string titleText, string descriptionText = null, string primaryButtonText = null, string secondaryButtonText = null, string closeButtonText = null)