diff --git a/src/Files.App/Data/Items/FileTagItem.cs b/src/Files.App/Data/Items/FileTagItem.cs index 3a74b7dbbfed..9752fcf67efc 100644 --- a/src/Files.App/Data/Items/FileTagItem.cs +++ b/src/Files.App/Data/Items/FileTagItem.cs @@ -2,8 +2,6 @@ // Licensed under the MIT License. See the LICENSE. using CommunityToolkit.WinUI.Helpers; -using Files.App.Converters; -using Files.Core.ViewModels.FileTags; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Markup; diff --git a/src/Files.App/UserControls/SideBar/ISideBarViewModel.cs b/src/Files.App/UserControls/SideBar/ISideBarViewModel.cs index e95afe1a0d0e..fff130ac7ed9 100644 --- a/src/Files.App/UserControls/SideBar/ISideBarViewModel.cs +++ b/src/Files.App/UserControls/SideBar/ISideBarViewModel.cs @@ -1,6 +1,7 @@ // Copyright (c) 2023 Files Community // Licensed under the MIT License. See the LICENSE. +using Microsoft.UI.Input; using Microsoft.UI.Xaml; using Windows.ApplicationModel.DataTransfer; using Windows.Foundation; @@ -42,6 +43,6 @@ public interface ISidebarViewModel /// Gets invoked when an item is invoked (double clicked) on any item of the sidebar. /// /// The item that was invoked. - void HandleItemInvokedAsync(object item); + void HandleItemInvokedAsync(object item, PointerUpdateKind pointerUpdateKind); } } diff --git a/src/Files.App/UserControls/SideBar/SideBarItem.cs b/src/Files.App/UserControls/SideBar/SideBarItem.cs index e55f6e82c824..6e17aabf71db 100644 --- a/src/Files.App/UserControls/SideBar/SideBarItem.cs +++ b/src/Files.App/UserControls/SideBar/SideBarItem.cs @@ -37,7 +37,7 @@ public SidebarItem() { if (args.Key == Windows.System.VirtualKey.Enter) { - Clicked(); + Clicked(PointerUpdateKind.Other); args.Handled = true; } }; @@ -237,7 +237,7 @@ private void ChildrenPresenter_ElementPrepared(ItemsRepeater sender, ItemsRepeat } } - internal void Clicked() + internal void Clicked(PointerUpdateKind pointerUpdateKind) { if (IsGroupHeader) { @@ -250,12 +250,12 @@ internal void Clicked() SetFlyoutOpen(true); } } - RaiseItemInvoked(); + RaiseItemInvoked(pointerUpdateKind); } - internal void RaiseItemInvoked() + internal void RaiseItemInvoked(PointerUpdateKind pointerUpdateKind) { - Owner?.RaiseItemInvoked(this); + Owner?.RaiseItemInvoked(this, pointerUpdateKind); } private void SidebarDisplayModeChanged(SidebarDisplayMode oldValue) @@ -386,10 +386,11 @@ private void Item_PointerReleased(object sender, Microsoft.UI.Xaml.Input.Pointer UpdatePointerState(); VisualStateManager.GoToState(this, IsExpanded ? "ExpandedIconNormal" : "CollapsedIconNormal", true); - var updateKind = e.GetCurrentPoint(null).Properties.PointerUpdateKind; - if (updateKind == PointerUpdateKind.LeftButtonReleased) + var pointerUpdateKind = e.GetCurrentPoint(null).Properties.PointerUpdateKind; + if (pointerUpdateKind == PointerUpdateKind.LeftButtonReleased || + pointerUpdateKind == PointerUpdateKind.MiddleButtonReleased) { - Clicked(); + Clicked(pointerUpdateKind); } } diff --git a/src/Files.App/UserControls/SideBar/SideBarView.xaml.cs b/src/Files.App/UserControls/SideBar/SideBarView.xaml.cs index aaf747b7d451..44c25ba7ea02 100644 --- a/src/Files.App/UserControls/SideBar/SideBarView.xaml.cs +++ b/src/Files.App/UserControls/SideBar/SideBarView.xaml.cs @@ -39,14 +39,14 @@ internal void UpdateSelectedItemContainer(SidebarItem container) SelectedItemContainer = container; } - internal void RaiseItemInvoked(SidebarItem item) + internal void RaiseItemInvoked(SidebarItem item, PointerUpdateKind pointerUpdateKind) { // Only leaves can be selected if (item.Item is null || item.IsGroupHeader) return; SelectedItem = item.Item; ItemInvoked?.Invoke(item, item.Item); - ViewModel.HandleItemInvokedAsync(item.Item); + ViewModel.HandleItemInvokedAsync(item.Item, pointerUpdateKind); } internal void RaiseContextRequested(SidebarItem item, Point e) diff --git a/src/Files.App/UserControls/SideBar/SidebarItemAutomationPeer.cs b/src/Files.App/UserControls/SideBar/SidebarItemAutomationPeer.cs index 4a981d0ea8b1..312e4101d66f 100644 --- a/src/Files.App/UserControls/SideBar/SidebarItemAutomationPeer.cs +++ b/src/Files.App/UserControls/SideBar/SidebarItemAutomationPeer.cs @@ -2,6 +2,7 @@ // Licensed under the MIT License. See the LICENSE. using CommunityToolkit.WinUI.UI; +using Microsoft.UI.Input; using Microsoft.UI.Xaml.Automation; using Microsoft.UI.Xaml.Automation.Peers; using Microsoft.UI.Xaml.Automation.Provider; @@ -74,7 +75,7 @@ public void Expand() public void Invoke() { - Owner.RaiseItemInvoked(); + Owner.RaiseItemInvoked(PointerUpdateKind.Other); } public void AddToSelection() diff --git a/src/Files.App/ViewModels/UserControls/SidebarViewModel.cs b/src/Files.App/ViewModels/UserControls/SidebarViewModel.cs index 9681570f969a..fb572049be2a 100644 --- a/src/Files.App/ViewModels/UserControls/SidebarViewModel.cs +++ b/src/Files.App/ViewModels/UserControls/SidebarViewModel.cs @@ -713,7 +713,7 @@ private async void ItemContextMenuFlyout_Opened(object? sender, object e) await ShellContextmenuHelper.LoadShellMenuItemsAsync(rightClickedItem.Path, itemContextMenuFlyout, rightClickedItem.MenuOptions); } - public async void HandleItemInvokedAsync(object item) + public async void HandleItemInvokedAsync(object item, PointerUpdateKind pointerUpdateKind) { if (item is not INavigationControlItem navigationControlItem) return; var navigationPath = item as string; @@ -722,9 +722,12 @@ public async void HandleItemInvokedAsync(object item) return; var ctrlPressed = InputKeyboardSource.GetKeyStateForCurrentThread(VirtualKey.Control).HasFlag(CoreVirtualKeyStates.Down); - if (ctrlPressed && navigationPath is not null) + var middleClickPressed = pointerUpdateKind == PointerUpdateKind.MiddleButtonReleased; + if ((ctrlPressed || + middleClickPressed) && + navigationControlItem.Path is not null) { - await NavigationHelpers.OpenPathInNewTab(navigationPath); + await NavigationHelpers.OpenPathInNewTab(navigationControlItem.Path); return; }