Skip to content

Commit ea1ea6f

Browse files
authored
Feature: Added media duration to tooltips (#18371)
1 parent 267c67b commit ea1ea6f

7 files changed

Lines changed: 39 additions & 24 deletions

File tree

src/Files.App/Data/Items/ListedItem.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ public string ItemTooltipText
5151
tooltipBuilder.Append($"{Environment.NewLine}{Strings.SizeLabel.GetLocalizedResource()} {FileSize}");
5252
if (!string.IsNullOrWhiteSpace(ImageDimensions))
5353
tooltipBuilder.Append($"{Environment.NewLine}{Strings.PropertyDimensionsColon.GetLocalizedResource()} {ImageDimensions}");
54+
if (!string.IsNullOrWhiteSpace(MediaDuration))
55+
tooltipBuilder.Append($"{Environment.NewLine}{Strings.PropertyDuration.GetLocalizedResource()}: {MediaDuration}");
5456
if (SyncStatusUI.LoadSyncStatus)
5557
tooltipBuilder.Append($"{Environment.NewLine}{Strings.StatusWithColon.GetLocalizedResource()} {syncStatusUI.SyncStatusString}");
5658

src/Files.App/Views/Layouts/BaseLayoutPage.cs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1206,6 +1206,7 @@ protected void FileList_ContainerContentChanging(ListViewBase sender, ContainerC
12061206

12071207
private void RefreshContainer(SelectorItem container, bool inRecycleQueue)
12081208
{
1209+
container.Loaded -= FileListItem_Loaded;
12091210
container.PointerPressed -= FileListItem_PointerPressed;
12101211
container.PointerEntered -= FileListItem_PointerEntered;
12111212
container.PointerExited -= FileListItem_PointerExited;
@@ -1219,6 +1220,7 @@ private void RefreshContainer(SelectorItem container, bool inRecycleQueue)
12191220
}
12201221
else
12211222
{
1223+
container.Loaded += FileListItem_Loaded;
12221224
container.PointerPressed += FileListItem_PointerPressed;
12231225
container.PointerEntered += FileListItem_PointerEntered;
12241226
container.PointerExited += FileListItem_PointerExited;
@@ -1235,10 +1237,12 @@ private void RefreshItem(SelectorItem container, object item, bool inRecycleQueu
12351237

12361238
if (inRecycleQueue)
12371239
{
1240+
UpdateItemToolTip(container, null);
12381241
ParentShellPageInstance!.ShellViewModel.CancelExtendedPropertiesLoadingForItem(listedItem);
12391242
}
12401243
else
12411244
{
1245+
UpdateItemToolTip(container, listedItem.ItemTooltipText);
12421246
InitializeDrag(container, listedItem);
12431247

12441248
if (listedItem.PreloadedIconData is not null && listedItem.FileImage is null)
@@ -1257,6 +1261,32 @@ private void RefreshItem(SelectorItem container, object item, bool inRecycleQueu
12571261
}
12581262
}
12591263

1264+
private static void UpdateItemToolTip(SelectorItem container, string? tooltipText)
1265+
{
1266+
// Apply the tooltip to both the container and the realized template root so every layout
1267+
// gets the same behavior, even when the DataTemplate is wrapped in a UserControl.
1268+
UpdateItemToolTip(container as FrameworkElement, tooltipText);
1269+
1270+
if (container.ContentTemplateRoot is FrameworkElement contentTemplateRoot)
1271+
UpdateItemToolTip(contentTemplateRoot, tooltipText);
1272+
}
1273+
1274+
private static void UpdateItemToolTip(FrameworkElement? target, string? tooltipText)
1275+
{
1276+
if (target is null)
1277+
return;
1278+
1279+
ToolTipService.SetToolTip(target, tooltipText);
1280+
target.SetValue(ToolTipService.PlacementProperty, PlacementMode.Mouse);
1281+
}
1282+
1283+
private void FileListItem_Loaded(object sender, RoutedEventArgs e)
1284+
{
1285+
// Set the initial tooltip before hover starts so WinUI doesn't miss the first dwell.
1286+
if (sender is SelectorItem container && container.Content is ListedItem listedItem)
1287+
UpdateItemToolTip(container, listedItem.ItemTooltipText);
1288+
}
1289+
12601290
private static async Task ApplyPreloadedIconAsync(ListedItem item)
12611291
{
12621292
var image = await item.PreloadedIconData.ToBitmapAsync();
@@ -1299,6 +1329,9 @@ protected internal void FileListItem_PointerEntered(object sender, PointerRouted
12991329
if (sender is SelectorItem selectorItem && selectorItem.IsSelected)
13001330
MainWindow.Instance.SetCanWindowToFront(false);
13011331

1332+
if (sender is SelectorItem tooltipContainer && tooltipContainer.Content is ListedItem listedItem)
1333+
UpdateItemToolTip(tooltipContainer, listedItem.ItemTooltipText);
1334+
13021335
if (!UserSettingsService.FoldersSettingsService.SelectFilesOnHover)
13031336
return;
13041337

src/Files.App/Views/Layouts/ColumnLayoutPage.xaml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -216,8 +216,7 @@
216216
VerticalAlignment="Center"
217217
CornerRadius="{StaticResource ControlCornerRadius}"
218218
IsRightTapEnabled="True"
219-
Loaded="Grid_Loaded"
220-
PointerEntered="Grid_PointerEntered">
219+
Loaded="Grid_Loaded">
221220
<Grid.ColumnDefinitions>
222221
<ColumnDefinition Width="Auto" />
223222
<ColumnDefinition Width="*" />

src/Files.App/Views/Layouts/ColumnLayoutPage.xaml.cs

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -574,13 +574,6 @@ private void Grid_Loaded(object sender, RoutedEventArgs e)
574574
itemContainer.ContextFlyout = ItemContextMenuFlyout;
575575
}
576576

577-
private void Grid_PointerEntered(object sender, PointerRoutedEventArgs e)
578-
{
579-
if (sender is FrameworkElement element && element.DataContext is ListedItem item)
580-
// Reassign values to update date display
581-
ToolTipService.SetToolTip(element, item.ItemTooltipText);
582-
}
583-
584577
protected override void BaseFolderSettings_LayoutModeChangeRequested(object? sender, LayoutModeEventArgs e)
585578
{
586579
var parent = this.FindAscendant<ModernShellPage>();

src/Files.App/Views/Layouts/DetailsLayoutPage.xaml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1001,8 +1001,6 @@
10011001
x:Name="ItemName"
10021002
Padding="6,0,0,0"
10031003
VerticalAlignment="Center"
1004-
DataContextChanged="TextBlock_DataContextChanged"
1005-
IsTextTrimmedChanged="TextBlock_IsTextTrimmedChanged"
10061004
Opacity="{x:Bind Opacity, Mode=OneWay}"
10071005
Text="{x:Bind Name, Mode=OneWay}"
10081006
TextTrimming="CharacterEllipsis" />

src/Files.App/Views/Layouts/GridLayoutPage.xaml

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,7 @@
100100
tui:FrameworkElementExtensions.EnableActualSizeBinding="True"
101101
Background="Transparent"
102102
IsRightTapEnabled="True"
103-
Loaded="Grid_Loaded"
104-
PointerEntered="Grid_PointerEntered">
103+
Loaded="Grid_Loaded">
105104
<Grid.RowDefinitions>
106105
<RowDefinition Height="Auto" />
107106
<RowDefinition Height="*" />
@@ -282,8 +281,7 @@
282281
VerticalAlignment="Center"
283282
CornerRadius="{StaticResource ControlCornerRadius}"
284283
IsRightTapEnabled="True"
285-
Loaded="Grid_Loaded"
286-
PointerEntered="Grid_PointerEntered">
284+
Loaded="Grid_Loaded">
287285
<Grid.ColumnDefinitions>
288286
<ColumnDefinition Width="Auto" />
289287
<ColumnDefinition Width="*" />
@@ -442,8 +440,7 @@
442440
BorderThickness="1"
443441
CornerRadius="8"
444442
IsRightTapEnabled="True"
445-
Loaded="Grid_Loaded"
446-
PointerEntered="Grid_PointerEntered">
443+
Loaded="Grid_Loaded">
447444
<StackPanel Orientation="{Binding ElementName=PageRoot, Path=CardsViewOrientation, Mode=OneWay}">
448445

449446
<!-- Preview -->

src/Files.App/Views/Layouts/GridLayoutPage.xaml.cs

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -756,13 +756,6 @@ private void Grid_Loaded(object sender, RoutedEventArgs e)
756756
}
757757
}
758758

759-
private void Grid_PointerEntered(object sender, PointerRoutedEventArgs e)
760-
{
761-
if (sender is FrameworkElement element && element.DataContext is ListedItem item)
762-
// Reassign values to update date display
763-
ToolTipService.SetToolTip(element, item.ItemTooltipText);
764-
}
765-
766759
private void SelectionCheckbox_PointerEntered(object sender, PointerRoutedEventArgs e)
767760
{
768761
UpdateCheckboxVisibility((sender as FrameworkElement)!.FindAscendant<GridViewItem>()!, true);

0 commit comments

Comments
 (0)