Skip to content

Commit 322513e

Browse files
Fixed: Fixed issue where holding the arrow key would cause preview pane to freeze (#15076)
1 parent abe586b commit 322513e

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

src/Files.App/ViewModels/UserControls/InfoPaneViewModel.cs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ public bool IsEnabled
3636
/// Current selected item in the file list.
3737
/// TODO see about removing this and accessing it from the page context instead
3838
/// </summary>
39-
private ListedItem selectedItem;
40-
public ListedItem SelectedItem
39+
private ListedItem? selectedItem;
40+
public ListedItem? SelectedItem
4141
{
4242
get => selectedItem;
4343
set
@@ -117,17 +117,24 @@ public InfoPaneViewModel()
117117
IsEnabled = infoPaneSettingsService.IsEnabled;
118118
}
119119

120-
private void ContentPageContext_PropertyChanged(object? sender, PropertyChangedEventArgs e)
120+
private async void ContentPageContext_PropertyChanged(object? sender, PropertyChangedEventArgs e)
121121
{
122122
switch (e.PropertyName)
123123
{
124124
case nameof(IContentPageContext.Folder):
125125
case nameof(IContentPageContext.SelectedItem):
126126

127+
ListedItem? tempSelectedItem = null;
127128
if (contentPageContext.SelectedItems.Count == 1)
128-
SelectedItem = contentPageContext.SelectedItems.First();
129-
else
130-
SelectedItem = null;
129+
tempSelectedItem = contentPageContext.SelectedItems.First();
130+
131+
// Don't update preview pane when the selected item changes too frequently
132+
const int delayBeforeUpdatingPreviewPane = 100;
133+
await Task.Delay(delayBeforeUpdatingPreviewPane);
134+
if (tempSelectedItem is not null && !tempSelectedItem.Equals(contentPageContext.SelectedItem))
135+
return;
136+
137+
SelectedItem = tempSelectedItem;
131138

132139
if (!App.AppModel.IsMainWindowClosed)
133140
{

0 commit comments

Comments
 (0)