Skip to content

Commit afd77df

Browse files
authored
Fix: Fixed an issue where slightly dragging a tab would create a new window (#13584)
1 parent deb4641 commit afd77df

File tree

1 file changed

+20
-5
lines changed

1 file changed

+20
-5
lines changed

src/Files.App/UserControls/TabBar/TabBar.xaml.cs

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ public sealed partial class TabBar : BaseTabBar
2929

3030
public UIElement FooterElement
3131
{
32-
get => (UIElement)GetValue(FooterElementProperty);
33-
set => SetValue(FooterElementProperty, value);
32+
get => (UIElement)GetValue(FooterElementProperty);
33+
set => SetValue(FooterElementProperty, value);
3434
}
3535

3636
public static readonly DependencyProperty TabStripVisibilityProperty =
@@ -56,6 +56,12 @@ public bool AllowTabsDrag
5656
public Rectangle DragArea
5757
=> DragAreaRectangle;
5858

59+
/// <summary> Starting position when dragging a tab.</summary>
60+
private InteropHelpers.POINT dragStartPoint;
61+
62+
/// <summary> Starting time when dragging a tab. </summary>
63+
private DateTimeOffset dragStartTime;
64+
5965
public TabBar()
6066
{
6167
InitializeComponent();
@@ -136,6 +142,9 @@ private void TabView_TabDragStarting(TabView sender, TabViewTabDragStartingEvent
136142
var tabViewItemArgs = (args.Item as TabBarItem).NavigationParameter;
137143
args.Data.Properties.Add(TabPathIdentifier, tabViewItemArgs.Serialize());
138144
args.Data.RequestedOperation = DataPackageOperation.Move;
145+
146+
InteropHelpers.GetCursorPos(out dragStartPoint);
147+
dragStartTime = DateTimeOffset.UtcNow;
139148
}
140149

141150
private void TabView_TabStripDragOver(object sender, DragEventArgs e)
@@ -211,14 +220,20 @@ private void TabView_TabDragCompleted(TabView sender, TabViewTabDragCompletedEve
211220

212221
private async void TabView_TabDroppedOutside(TabView sender, TabViewTabDroppedOutsideEventArgs args)
213222
{
214-
if (sender.TabItems.Count == 1)
215-
{
223+
InteropHelpers.GetCursorPos(out var droppedPoint);
224+
var droppedTime = DateTimeOffset.UtcNow;
225+
var dragTime = droppedTime - dragStartTime;
226+
var dragDistance = Math.Sqrt(Math.Pow((dragStartPoint.X - droppedPoint.X), 2) + Math.Pow((dragStartPoint.Y - droppedPoint.Y), 2));
227+
228+
if (sender.TabItems.Count == 1 ||
229+
(dragTime.TotalSeconds < 1 &&
230+
dragDistance < 100))
216231
return;
217-
}
218232

219233
var indexOfTabViewItem = sender.TabItems.IndexOf(args.Item);
220234
var tabViewItemArgs = (args.Item as TabBarItem).NavigationParameter;
221235
var selectedTabViewItemIndex = sender.SelectedIndex;
236+
222237
Items.Remove(args.Item as TabBarItem);
223238
if (!await NavigationHelpers.OpenTabInNewWindowAsync(tabViewItemArgs.Serialize()))
224239
{

0 commit comments

Comments
 (0)