Skip to content

Commit 8a8c697

Browse files
Fixed: Properties window opens behind main app window (#9973)
1 parent 3359556 commit 8a8c697

File tree

7 files changed

+51
-11
lines changed

7 files changed

+51
-11
lines changed

src/Files.App/IBaseLayout.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Files.App.Filesystem;
22
using Files.App.Interacts;
33
using Files.App.ViewModels;
4+
using Microsoft.UI.Xaml.Controls;
45
using System;
56
using System.Collections.Generic;
67

@@ -25,5 +26,6 @@ public interface IBaseLayout : IDisposable
2526
public SelectedItemsPropertiesViewModel SelectedItemsPropertiesViewModel { get; }
2627
public DirectoryPropertiesViewModel DirectoryPropertiesViewModel { get; }
2728
public BaseLayoutCommandsViewModel CommandsViewModel { get; }
29+
public CommandBarFlyout ItemContextMenuFlyout { get; set; }
2830
}
2931
}

src/Files.App/Interacts/BaseLayoutCommandImplementationModel.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,11 +196,17 @@ public virtual async void DeleteItem(RoutedEventArgs e)
196196

197197
public virtual void ShowFolderProperties(RoutedEventArgs e)
198198
{
199-
FilePropertiesHelpers.ShowProperties(associatedInstance);
199+
SlimContentPage.ItemContextMenuFlyout.Closed += OpenProperties;
200200
}
201201

202202
public virtual void ShowProperties(RoutedEventArgs e)
203203
{
204+
SlimContentPage.ItemContextMenuFlyout.Closed += OpenProperties;
205+
}
206+
207+
private void OpenProperties(object sender, object e)
208+
{
209+
SlimContentPage.ItemContextMenuFlyout.Closed -= OpenProperties;
204210
FilePropertiesHelpers.ShowProperties(associatedInstance);
205211
}
206212

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

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
using CommunityToolkit.WinUI.UI;
3030
using Microsoft.UI.Input;
3131
using UWPToWinAppSDKUpgradeHelpers;
32+
using Windows.ApplicationModel.Search.Core;
3233

3334
namespace Files.App.UserControls
3435
{
@@ -58,6 +59,8 @@ public sealed partial class SidebarControl : NavigationView, INotifyPropertyChan
5859

5960
private bool isDropOnProcess = false;
6061

62+
private bool wasOpenPropertiesSelected = false;
63+
6164
/// <summary>
6265
/// true if the user is currently resizing the sidebar
6366
/// </summary>
@@ -490,14 +493,23 @@ private void MoveItemToBottom()
490493

491494
private void OpenProperties()
492495
{
493-
SidebarItemPropertiesInvoked?.Invoke(this, new SidebarItemPropertiesInvokedEventArgs(rightClickedItem));
496+
wasOpenPropertiesSelected = true;
494497
}
495498

496499
private async void EjectDevice()
497500
{
498501
await DriveHelpers.EjectDeviceAsync(rightClickedItem.Path);
499502
}
500503

504+
private void Flyout_Closed(object sender, object e)
505+
{
506+
((CommandBarFlyout)sender).Closed -= Flyout_Closed;
507+
if (!wasOpenPropertiesSelected)
508+
return;
509+
SidebarItemPropertiesInvoked?.Invoke(this, new SidebarItemPropertiesInvokedEventArgs(rightClickedItem));
510+
wasOpenPropertiesSelected = false;
511+
}
512+
501513
private async void Sidebar_ItemInvoked(NavigationView sender, NavigationViewItemInvokedEventArgs args)
502514
{
503515
if (IsInPointerPressed || args.InvokedItem == null || args.InvokedItemContainer == null)
@@ -555,6 +567,8 @@ private void NavigationViewItem_RightTapped(object sender, RightTappedRoutedEven
555567

556568
rightClickedItem = item;
557569

570+
itemContextMenuFlyout.Closed += Flyout_Closed;
571+
558572
var menuItems = GetLocationItemMenuItems(item);
559573
var (_, secondaryElements) = ItemModelListToContextFlyoutHelper.GetAppBarItemsFromModel(menuItems);
560574

src/Files.App/UserControls/Widgets/DrivesWidget.xaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,8 @@
7777
Tag="{x:Bind Item.Path}"
7878
ToolTipService.ToolTip="{x:Bind Item.Text, Mode=OneWay}">
7979
<Button.ContextFlyout>
80-
<MenuFlyout Opening="MenuFlyout_Opening">
80+
<MenuFlyout Opening="MenuFlyout_Opening"
81+
Closed="MenuFlyout_Closed">
8182
<MenuFlyout.Items>
8283
<MenuFlyoutItem
8384
x:Name="OpenInNewPane"

src/Files.App/UserControls/Widgets/DrivesWidget.xaml.cs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@ public IShellPage AppInstance
9292
}
9393
}
9494

95+
private DriveItem? propertiesItem = null;
96+
9597
public string WidgetName => nameof(DrivesWidget);
9698

9799
public string AutomationProperties => "DrivesWidgetAutomationProperties/Name".GetLocalizedResource();
@@ -189,8 +191,7 @@ private async void UnpinFromFavorites_Click(object sender, RoutedEventArgs e)
189191

190192
private async void OpenDriveProperties_Click(object sender, RoutedEventArgs e)
191193
{
192-
var item = ((MenuFlyoutItem)sender).DataContext as DriveItem;
193-
await FilePropertiesHelpers.OpenPropertiesWindowAsync(item, associatedInstance);
194+
propertiesItem = ((MenuFlyoutItem)sender).DataContext as DriveItem;
194195
}
195196

196197
private async void Button_Click(object sender, RoutedEventArgs e)
@@ -329,5 +330,13 @@ public void Dispose()
329330
{
330331

331332
}
333+
334+
private async void MenuFlyout_Closed(object sender, object e)
335+
{
336+
if (propertiesItem is null)
337+
return;
338+
await FilePropertiesHelpers.OpenPropertiesWindowAsync(propertiesItem, associatedInstance);
339+
propertiesItem = null;
340+
}
332341
}
333342
}

src/Files.App/UserControls/Widgets/FolderWidget.xaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@
3939
PointerPressed="Button_PointerPressed"
4040
Tag="{x:Bind Path}">
4141
<Button.ContextFlyout>
42-
<MenuFlyout Opening="MenuFlyout_Opening">
42+
<MenuFlyout Opening="MenuFlyout_Opening"
43+
Closed="MenuFlyout_Closed">
4344
<MenuFlyout.Items>
4445
<MenuFlyoutItem
4546
x:Name="OpenInNewPane"

src/Files.App/UserControls/Widgets/FolderWidget.xaml.cs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ public sealed partial class FolderWidget : UserControl, IWidgetItemModel, INotif
8888
public BulkConcurrentObservableCollection<FolderCardItem> ItemsAdded = new BulkConcurrentObservableCollection<FolderCardItem>();
8989
private bool showMultiPaneControls;
9090

91+
private FolderCardItem? propertiesItem = null;
92+
9193
public FolderWidget()
9294
{
9395
InitializeComponent();
@@ -239,11 +241,7 @@ private async void OpenInNewWindow_Click(object sender, RoutedEventArgs e)
239241

240242
private void OpenLibraryProperties_Click(object sender, RoutedEventArgs e)
241243
{
242-
var item = (sender as MenuFlyoutItem).DataContext as FolderCardItem;
243-
if (item.IsLibrary)
244-
{
245-
LibraryCardPropertiesInvoked?.Invoke(this, new LibraryCardEventArgs { Library = item.Item as LibraryLocationItem });
246-
}
244+
propertiesItem = (sender as MenuFlyoutItem)?.DataContext as FolderCardItem;
247245
}
248246

249247
private async Task OpenLibraryCard(FolderCardItem item)
@@ -277,5 +275,14 @@ public void Dispose()
277275
{
278276

279277
}
278+
279+
private void MenuFlyout_Closed(object sender, object e)
280+
{
281+
if (propertiesItem is null || !propertiesItem.IsLibrary)
282+
return;
283+
284+
LibraryCardPropertiesInvoked?.Invoke(this, new LibraryCardEventArgs { Library = (propertiesItem.Item as LibraryLocationItem)! });
285+
propertiesItem = null;
286+
}
280287
}
281288
}

0 commit comments

Comments
 (0)