From 6bbe47c9172071db38aa6f773b7ce0699721ce74 Mon Sep 17 00:00:00 2001
From: SGrahambo <70293810+SGrahambo@users.noreply.github.com>
Date: Thu, 30 Nov 2023 08:38:25 -0800
Subject: [PATCH] Feature: Added support for cycling tabs via mouse scrolling
 (#14123)

---
 src/Files.App/UserControls/TabBar/TabBar.xaml |  1 +
 .../UserControls/TabBar/TabBar.xaml.cs        | 20 +++++++++++++++++++
 2 files changed, 21 insertions(+)

diff --git a/src/Files.App/UserControls/TabBar/TabBar.xaml b/src/Files.App/UserControls/TabBar/TabBar.xaml
index efdd15677cf8..901ab856fca3 100644
--- a/src/Files.App/UserControls/TabBar/TabBar.xaml
+++ b/src/Files.App/UserControls/TabBar/TabBar.xaml
@@ -74,6 +74,7 @@
 			CanReorderTabs="{x:Bind AllowTabsDrag, Mode=OneWay}"
 			DragLeave="TabView_DragLeave"
 			IsAddTabButtonVisible="False"
+			PointerWheelChanged="TabView_PointerWheelChanged"
 			SelectedIndex="{x:Bind root:App.AppModel.TabStripSelectedIndex, Mode=TwoWay}"
 			SelectionChanged="TabView_SelectionChanged"
 			TabCloseRequested="TabView_TabCloseRequested"
diff --git a/src/Files.App/UserControls/TabBar/TabBar.xaml.cs b/src/Files.App/UserControls/TabBar/TabBar.xaml.cs
index cb63c21303ec..ce45d03dda15 100644
--- a/src/Files.App/UserControls/TabBar/TabBar.xaml.cs
+++ b/src/Files.App/UserControls/TabBar/TabBar.xaml.cs
@@ -266,6 +266,26 @@ private async void TabView_TabDroppedOutside(TabView sender, TabViewTabDroppedOu
 				(args.Item as TabBarItem)?.Unload();
 		}
 
+		private void TabView_PointerWheelChanged(object sender, PointerRoutedEventArgs e)
+		{
+			var delta = e.GetCurrentPoint(null).Properties.MouseWheelDelta;
+
+			if (delta > 0)
+			{
+				// Scroll up, select the next tab
+				if (HorizontalTabView.SelectedIndex < HorizontalTabView.TabItems.Count - 1)
+					HorizontalTabView.SelectedIndex++;
+			}
+			else
+			{
+				// Scroll down, select the previous tab
+				if (HorizontalTabView.SelectedIndex > 0)
+					HorizontalTabView.SelectedIndex--;
+			}
+
+			e.Handled = true;
+		}
+
 		private void TabItemContextMenu_Opening(object sender, object e)
 		{
 			MenuItemMoveTabToNewWindow.IsEnabled = Items.Count > 1;