From 51db72c214f1185819151b3f58a1e85886b200b8 Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Tue, 1 Jul 2025 17:01:48 -0400 Subject: [PATCH 01/11] Code Quality: Fixed Command Palette text when switching between modes --- src/Files.App.Controls/Omnibar/Omnibar.Events.cs | 6 ++++++ src/Files.App.Controls/Omnibar/Omnibar.cs | 1 + src/Files.App/UserControls/NavigationToolbar.xaml | 2 +- src/Files.App/UserControls/NavigationToolbar.xaml.cs | 6 ++---- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/Files.App.Controls/Omnibar/Omnibar.Events.cs b/src/Files.App.Controls/Omnibar/Omnibar.Events.cs index 9b224f0f442f..968968005d72 100644 --- a/src/Files.App.Controls/Omnibar/Omnibar.Events.cs +++ b/src/Files.App.Controls/Omnibar/Omnibar.Events.cs @@ -15,6 +15,12 @@ private void Omnibar_SizeChanged(object sender, SizeChangedEventArgs e) // Popup width has to be set manually because it doesn't stretch with the parent _textBoxSuggestionsContainerBorder.Width = ActualWidth; } + + private void Omnibar_LostFocus(object sender, RoutedEventArgs e) + { + // Reset to the default mode when Omnibar loses focus + CurrentSelectedMode = Modes?.FirstOrDefault(); + } private void AutoSuggestBox_GettingFocus(UIElement sender, GettingFocusEventArgs args) { diff --git a/src/Files.App.Controls/Omnibar/Omnibar.cs b/src/Files.App.Controls/Omnibar/Omnibar.cs index ff02da54c508..24666499ae0d 100644 --- a/src/Files.App.Controls/Omnibar/Omnibar.cs +++ b/src/Files.App.Controls/Omnibar/Omnibar.cs @@ -75,6 +75,7 @@ protected override void OnApplyTemplate() PopulateModes(); SizeChanged += Omnibar_SizeChanged; + LostFocus += Omnibar_LostFocus; _textBox.GettingFocus += AutoSuggestBox_GettingFocus; _textBox.GotFocus += AutoSuggestBox_GotFocus; _textBox.LosingFocus += AutoSuggestBox_LosingFocus; diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml b/src/Files.App/UserControls/NavigationToolbar.xaml index acf1697fc5f4..5d4a2db52e38 100644 --- a/src/Files.App/UserControls/NavigationToolbar.xaml +++ b/src/Files.App/UserControls/NavigationToolbar.xaml @@ -351,7 +351,7 @@ x:Load="{x:Bind ViewModel.EnableOmnibar, Mode=OneWay}" CurrentSelectedModeName="{x:Bind ViewModel.OmnibarCurrentSelectedModeName, Mode=TwoWay}" IsFocused="{x:Bind ViewModel.IsOmnibarFocused, Mode=TwoWay}" - LostFocus="Omnibar_LostFocus" + ModeChanged="Omnibar_ModeChanged" PreviewKeyDown="Omnibar_PreviewKeyDown" QuerySubmitted="Omnibar_QuerySubmitted" TextChanged="Omnibar_TextChanged"> diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml.cs b/src/Files.App/UserControls/NavigationToolbar.xaml.cs index 900d19f769d6..199dd0ce3bb2 100644 --- a/src/Files.App/UserControls/NavigationToolbar.xaml.cs +++ b/src/Files.App/UserControls/NavigationToolbar.xaml.cs @@ -427,13 +427,11 @@ private void BreadcrumbBar_ItemDropDownFlyoutClosed(object sender, BreadcrumbBar e.Flyout.Items.Clear(); } - private void Omnibar_LostFocus(object sender, RoutedEventArgs e) + private void Omnibar_ModeChanged(object sender, OmnibarModeChangedEventArgs e) { + // Reset the command palette text when switching modes if (Omnibar.CurrentSelectedMode == OmnibarCommandPaletteMode) - { - Omnibar.CurrentSelectedMode = OmnibarPathMode; ViewModel.OmnibarCommandPaletteModeText = string.Empty; - } } private void Omnibar_PreviewKeyDown(object sender, KeyRoutedEventArgs e) From 2b2a1540cbb1f34300b8a4d8acb5e8dcb258ee47 Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Tue, 1 Jul 2025 17:33:19 -0400 Subject: [PATCH 02/11] Fixed clicking tab in command mode --- src/Files.App.Controls/Omnibar/Omnibar.Events.cs | 10 ---------- .../UserControls/NavigationToolbar.xaml.cs | 14 +++++++++++++- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/Files.App.Controls/Omnibar/Omnibar.Events.cs b/src/Files.App.Controls/Omnibar/Omnibar.Events.cs index 968968005d72..9264cbcfdf7c 100644 --- a/src/Files.App.Controls/Omnibar/Omnibar.Events.cs +++ b/src/Files.App.Controls/Omnibar/Omnibar.Events.cs @@ -118,16 +118,6 @@ private async void AutoSuggestBox_KeyDown(object sender, KeyRoutedEventArgs e) previouslyFocusedElement?.Focus(FocusState.Programmatic); } } - else if (e.Key == VirtualKey.Tab && !InputKeyboardSource.GetKeyStateForCurrentThread(VirtualKey.Shift).HasFlag(CoreVirtualKeyStates.Down)) - { - GlobalHelper.WriteDebugStringForOmnibar("The TextBox accepted the Tab key."); - - // Focus on inactive content when pressing Tab instead of moving to the next control in the tab order - e.Handled = true; - IsFocused = false; - await Task.Delay(15); - CurrentSelectedMode?.ContentOnInactive?.Focus(FocusState.Keyboard); - } else { _textChangeReason = OmnibarTextChangeReason.UserInput; diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml.cs b/src/Files.App/UserControls/NavigationToolbar.xaml.cs index 199dd0ce3bb2..d13cba57089a 100644 --- a/src/Files.App/UserControls/NavigationToolbar.xaml.cs +++ b/src/Files.App/UserControls/NavigationToolbar.xaml.cs @@ -12,6 +12,7 @@ using Microsoft.UI.Xaml.Navigation; using Windows.AI.Actions.Hosting; using Windows.System; +using Windows.UI.Core; namespace Files.App.UserControls { @@ -434,13 +435,24 @@ private void Omnibar_ModeChanged(object sender, OmnibarModeChangedEventArgs e) ViewModel.OmnibarCommandPaletteModeText = string.Empty; } - private void Omnibar_PreviewKeyDown(object sender, KeyRoutedEventArgs e) + private async void Omnibar_PreviewKeyDown(object sender, KeyRoutedEventArgs e) { if (e.Key is VirtualKey.Escape) { Omnibar.IsFocused = false; (MainPageViewModel.SelectedTabItem?.TabItemContent as Control)?.Focus(FocusState.Programmatic); } + else if (e.Key is VirtualKey.Tab && Omnibar.IsFocused && !InputKeyboardSource.GetKeyStateForCurrentThread(VirtualKey.Shift).HasFlag(CoreVirtualKeyStates.Down)) + { + var currentSelectedMode = Omnibar.CurrentSelectedMode; + Omnibar.IsFocused = false; + await Task.Delay(15); + + if (currentSelectedMode == OmnibarPathMode) + BreadcrumbBar.Focus(FocusState.Keyboard); + else if (Omnibar.CurrentSelectedMode == OmnibarCommandPaletteMode) + OmnibarCommandPaletteMode.Focus(FocusState.Keyboard); + } } private void NavigationButtonOverflowFlyoutButton_LosingFocus(UIElement sender, LosingFocusEventArgs args) From 5aba34d09e7bb0970d58edc9fcc23b8aa8fcc1fe Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Tue, 1 Jul 2025 17:39:23 -0400 Subject: [PATCH 03/11] Fixed text selection --- src/Files.App.Controls/Omnibar/Omnibar.Events.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Files.App.Controls/Omnibar/Omnibar.Events.cs b/src/Files.App.Controls/Omnibar/Omnibar.Events.cs index 9264cbcfdf7c..b8bbfeab03fa 100644 --- a/src/Files.App.Controls/Omnibar/Omnibar.Events.cs +++ b/src/Files.App.Controls/Omnibar/Omnibar.Events.cs @@ -137,6 +137,8 @@ private void AutoSuggestBox_TextChanged(object sender, TextChangedEventArgs e) _textChangeReason = OmnibarTextChangeReason.UserInput; _userInput = _textBox.Text; } + else if (_textChangeReason is OmnibarTextChangeReason.ProgrammaticChange) + _textBox.SelectAll(); TextChanged?.Invoke(this, new(CurrentSelectedMode, _textChangeReason)); From c69bcda00c2553bcef496bda9fb85962cf2584cd Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Tue, 1 Jul 2025 19:05:21 -0400 Subject: [PATCH 04/11] Update NavigationToolbar.xaml.cs --- src/Files.App/UserControls/NavigationToolbar.xaml.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml.cs b/src/Files.App/UserControls/NavigationToolbar.xaml.cs index d13cba57089a..719b32093f3c 100644 --- a/src/Files.App/UserControls/NavigationToolbar.xaml.cs +++ b/src/Files.App/UserControls/NavigationToolbar.xaml.cs @@ -450,7 +450,7 @@ private async void Omnibar_PreviewKeyDown(object sender, KeyRoutedEventArgs e) if (currentSelectedMode == OmnibarPathMode) BreadcrumbBar.Focus(FocusState.Keyboard); - else if (Omnibar.CurrentSelectedMode == OmnibarCommandPaletteMode) + else if (currentSelectedMode == OmnibarCommandPaletteMode) OmnibarCommandPaletteMode.Focus(FocusState.Keyboard); } } From cf87b52d22dbeeb09585113bb1fcd84c979f752e Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Tue, 1 Jul 2025 19:11:57 -0400 Subject: [PATCH 05/11] Moved lost focus event back to app --- src/Files.App.Controls/Omnibar/Omnibar.Events.cs | 6 ------ src/Files.App.Controls/Omnibar/Omnibar.cs | 1 - src/Files.App/UserControls/NavigationToolbar.xaml | 1 + src/Files.App/UserControls/NavigationToolbar.xaml.cs | 6 ++++++ 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Files.App.Controls/Omnibar/Omnibar.Events.cs b/src/Files.App.Controls/Omnibar/Omnibar.Events.cs index b8bbfeab03fa..bb4667c4d557 100644 --- a/src/Files.App.Controls/Omnibar/Omnibar.Events.cs +++ b/src/Files.App.Controls/Omnibar/Omnibar.Events.cs @@ -16,12 +16,6 @@ private void Omnibar_SizeChanged(object sender, SizeChangedEventArgs e) _textBoxSuggestionsContainerBorder.Width = ActualWidth; } - private void Omnibar_LostFocus(object sender, RoutedEventArgs e) - { - // Reset to the default mode when Omnibar loses focus - CurrentSelectedMode = Modes?.FirstOrDefault(); - } - private void AutoSuggestBox_GettingFocus(UIElement sender, GettingFocusEventArgs args) { if (args.OldFocusedElement is null) diff --git a/src/Files.App.Controls/Omnibar/Omnibar.cs b/src/Files.App.Controls/Omnibar/Omnibar.cs index 24666499ae0d..ff02da54c508 100644 --- a/src/Files.App.Controls/Omnibar/Omnibar.cs +++ b/src/Files.App.Controls/Omnibar/Omnibar.cs @@ -75,7 +75,6 @@ protected override void OnApplyTemplate() PopulateModes(); SizeChanged += Omnibar_SizeChanged; - LostFocus += Omnibar_LostFocus; _textBox.GettingFocus += AutoSuggestBox_GettingFocus; _textBox.GotFocus += AutoSuggestBox_GotFocus; _textBox.LosingFocus += AutoSuggestBox_LosingFocus; diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml b/src/Files.App/UserControls/NavigationToolbar.xaml index 5d4a2db52e38..06be1a91dd78 100644 --- a/src/Files.App/UserControls/NavigationToolbar.xaml +++ b/src/Files.App/UserControls/NavigationToolbar.xaml @@ -351,6 +351,7 @@ x:Load="{x:Bind ViewModel.EnableOmnibar, Mode=OneWay}" CurrentSelectedModeName="{x:Bind ViewModel.OmnibarCurrentSelectedModeName, Mode=TwoWay}" IsFocused="{x:Bind ViewModel.IsOmnibarFocused, Mode=TwoWay}" + LostFocus="Omnibar_LostFocus" ModeChanged="Omnibar_ModeChanged" PreviewKeyDown="Omnibar_PreviewKeyDown" QuerySubmitted="Omnibar_QuerySubmitted" diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml.cs b/src/Files.App/UserControls/NavigationToolbar.xaml.cs index 719b32093f3c..0e4429c222b5 100644 --- a/src/Files.App/UserControls/NavigationToolbar.xaml.cs +++ b/src/Files.App/UserControls/NavigationToolbar.xaml.cs @@ -435,6 +435,12 @@ private void Omnibar_ModeChanged(object sender, OmnibarModeChangedEventArgs e) ViewModel.OmnibarCommandPaletteModeText = string.Empty; } + private void Omnibar_LostFocus(object sender, RoutedEventArgs e) + { + // Reset to the default mode when Omnibar loses focus + Omnibar.CurrentSelectedMode = Omnibar.Modes?.FirstOrDefault(); + } + private async void Omnibar_PreviewKeyDown(object sender, KeyRoutedEventArgs e) { if (e.Key is VirtualKey.Escape) From 6cd9d8d8414033bd036e4a51207408d360acfb8a Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Tue, 1 Jul 2025 19:12:29 -0400 Subject: [PATCH 06/11] Update Omnibar.Events.cs --- src/Files.App.Controls/Omnibar/Omnibar.Events.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Files.App.Controls/Omnibar/Omnibar.Events.cs b/src/Files.App.Controls/Omnibar/Omnibar.Events.cs index bb4667c4d557..a3e1388298a4 100644 --- a/src/Files.App.Controls/Omnibar/Omnibar.Events.cs +++ b/src/Files.App.Controls/Omnibar/Omnibar.Events.cs @@ -1,10 +1,8 @@ // Copyright (c) Files Community // Licensed under the MIT License. -using Microsoft.UI.Input; using Microsoft.UI.Xaml.Input; using Windows.System; -using Windows.UI.Core; namespace Files.App.Controls { @@ -15,7 +13,7 @@ private void Omnibar_SizeChanged(object sender, SizeChangedEventArgs e) // Popup width has to be set manually because it doesn't stretch with the parent _textBoxSuggestionsContainerBorder.Width = ActualWidth; } - + private void AutoSuggestBox_GettingFocus(UIElement sender, GettingFocusEventArgs args) { if (args.OldFocusedElement is null) From 164a6655c80e5df7ce3ebbb6c78cba51a0947616 Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Tue, 1 Jul 2025 19:14:19 -0400 Subject: [PATCH 07/11] Cleanup diff --- src/Files.App/UserControls/NavigationToolbar.xaml.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml.cs b/src/Files.App/UserControls/NavigationToolbar.xaml.cs index 0e4429c222b5..ad9fa81b26fb 100644 --- a/src/Files.App/UserControls/NavigationToolbar.xaml.cs +++ b/src/Files.App/UserControls/NavigationToolbar.xaml.cs @@ -428,6 +428,12 @@ private void BreadcrumbBar_ItemDropDownFlyoutClosed(object sender, BreadcrumbBar e.Flyout.Items.Clear(); } + private void Omnibar_LostFocus(object sender, RoutedEventArgs e) + { + // Reset to the default mode when Omnibar loses focus + Omnibar.CurrentSelectedMode = Omnibar.Modes?.FirstOrDefault(); + } + private void Omnibar_ModeChanged(object sender, OmnibarModeChangedEventArgs e) { // Reset the command palette text when switching modes @@ -435,12 +441,6 @@ private void Omnibar_ModeChanged(object sender, OmnibarModeChangedEventArgs e) ViewModel.OmnibarCommandPaletteModeText = string.Empty; } - private void Omnibar_LostFocus(object sender, RoutedEventArgs e) - { - // Reset to the default mode when Omnibar loses focus - Omnibar.CurrentSelectedMode = Omnibar.Modes?.FirstOrDefault(); - } - private async void Omnibar_PreviewKeyDown(object sender, KeyRoutedEventArgs e) { if (e.Key is VirtualKey.Escape) From fad37dfc9d0ac4f2a710d43b4bed700aa539abe5 Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Tue, 1 Jul 2025 22:28:47 -0400 Subject: [PATCH 08/11] Fixed 'When breadcrumb flyout is open, clicking on Command mode switches to path mode' --- src/Files.App.Controls/Omnibar/Omnibar.Events.cs | 5 +++++ src/Files.App/UserControls/NavigationToolbar.xaml | 1 - src/Files.App/UserControls/NavigationToolbar.xaml.cs | 6 ------ 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/Files.App.Controls/Omnibar/Omnibar.Events.cs b/src/Files.App.Controls/Omnibar/Omnibar.Events.cs index a3e1388298a4..a3e6f38abd25 100644 --- a/src/Files.App.Controls/Omnibar/Omnibar.Events.cs +++ b/src/Files.App.Controls/Omnibar/Omnibar.Events.cs @@ -32,6 +32,11 @@ private void AutoSuggestBox_LosingFocus(UIElement sender, LosingFocusEventArgs a args.TryCancel(); return; } + else + { + // Reset to the default mode when Omnibar loses focus + CurrentSelectedMode = Modes?.FirstOrDefault(); + } } private void AutoSuggestBox_GotFocus(object sender, RoutedEventArgs e) diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml b/src/Files.App/UserControls/NavigationToolbar.xaml index 06be1a91dd78..5d4a2db52e38 100644 --- a/src/Files.App/UserControls/NavigationToolbar.xaml +++ b/src/Files.App/UserControls/NavigationToolbar.xaml @@ -351,7 +351,6 @@ x:Load="{x:Bind ViewModel.EnableOmnibar, Mode=OneWay}" CurrentSelectedModeName="{x:Bind ViewModel.OmnibarCurrentSelectedModeName, Mode=TwoWay}" IsFocused="{x:Bind ViewModel.IsOmnibarFocused, Mode=TwoWay}" - LostFocus="Omnibar_LostFocus" ModeChanged="Omnibar_ModeChanged" PreviewKeyDown="Omnibar_PreviewKeyDown" QuerySubmitted="Omnibar_QuerySubmitted" diff --git a/src/Files.App/UserControls/NavigationToolbar.xaml.cs b/src/Files.App/UserControls/NavigationToolbar.xaml.cs index ad9fa81b26fb..719b32093f3c 100644 --- a/src/Files.App/UserControls/NavigationToolbar.xaml.cs +++ b/src/Files.App/UserControls/NavigationToolbar.xaml.cs @@ -428,12 +428,6 @@ private void BreadcrumbBar_ItemDropDownFlyoutClosed(object sender, BreadcrumbBar e.Flyout.Items.Clear(); } - private void Omnibar_LostFocus(object sender, RoutedEventArgs e) - { - // Reset to the default mode when Omnibar loses focus - Omnibar.CurrentSelectedMode = Omnibar.Modes?.FirstOrDefault(); - } - private void Omnibar_ModeChanged(object sender, OmnibarModeChangedEventArgs e) { // Reset the command palette text when switching modes From 86d375bfc03fadd70ef736acd958c803362b27a6 Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Wed, 2 Jul 2025 10:34:47 -0400 Subject: [PATCH 09/11] Fixed right clicking in Command mode --- src/Files.App.Controls/Omnibar/Omnibar.Events.cs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/Files.App.Controls/Omnibar/Omnibar.Events.cs b/src/Files.App.Controls/Omnibar/Omnibar.Events.cs index a3e6f38abd25..ffd3024edcb4 100644 --- a/src/Files.App.Controls/Omnibar/Omnibar.Events.cs +++ b/src/Files.App.Controls/Omnibar/Omnibar.Events.cs @@ -32,11 +32,6 @@ private void AutoSuggestBox_LosingFocus(UIElement sender, LosingFocusEventArgs a args.TryCancel(); return; } - else - { - // Reset to the default mode when Omnibar loses focus - CurrentSelectedMode = Modes?.FirstOrDefault(); - } } private void AutoSuggestBox_GotFocus(object sender, RoutedEventArgs e) @@ -50,12 +45,16 @@ private void AutoSuggestBox_GotFocus(object sender, RoutedEventArgs e) private void AutoSuggestBox_LostFocus(object sender, RoutedEventArgs e) { // TextBox still has focus if the context menu for selected text is open - if (_textBox.ContextFlyout.IsOpen) - return; - + var element = Microsoft.UI.Xaml.Input.FocusManager.GetFocusedElement(this.XamlRoot); + if (element is FlyoutBase or Popup) + return; + GlobalHelper.WriteDebugStringForOmnibar("The TextBox lost the focus."); IsFocused = false; + + // Reset to the default mode when Omnibar loses focus + CurrentSelectedMode = Modes?.FirstOrDefault(); } private async void AutoSuggestBox_KeyDown(object sender, KeyRoutedEventArgs e) From ae591bc40115e807f897fe80dbcfe72d23580636 Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Wed, 2 Jul 2025 21:14:52 -0400 Subject: [PATCH 10/11] Fix tab focus on mode --- .../Omnibar/Omnibar.Events.cs | 4 +-- src/Files.App.Controls/Omnibar/Omnibar.cs | 2 +- src/Files.App.Controls/Omnibar/Omnibar.xaml | 30 +++++++------------ .../Omnibar/OmnibarMode.Events.cs | 16 ++++++---- src/Files.App.Controls/Omnibar/OmnibarMode.cs | 5 ++-- 5 files changed, 26 insertions(+), 31 deletions(-) diff --git a/src/Files.App.Controls/Omnibar/Omnibar.Events.cs b/src/Files.App.Controls/Omnibar/Omnibar.Events.cs index ffd3024edcb4..d1acef9a81bf 100644 --- a/src/Files.App.Controls/Omnibar/Omnibar.Events.cs +++ b/src/Files.App.Controls/Omnibar/Omnibar.Events.cs @@ -47,8 +47,8 @@ private void AutoSuggestBox_LostFocus(object sender, RoutedEventArgs e) // TextBox still has focus if the context menu for selected text is open var element = Microsoft.UI.Xaml.Input.FocusManager.GetFocusedElement(this.XamlRoot); if (element is FlyoutBase or Popup) - return; - + return; + GlobalHelper.WriteDebugStringForOmnibar("The TextBox lost the focus."); IsFocused = false; diff --git a/src/Files.App.Controls/Omnibar/Omnibar.cs b/src/Files.App.Controls/Omnibar/Omnibar.cs index ff02da54c508..fbe301a3b9df 100644 --- a/src/Files.App.Controls/Omnibar/Omnibar.cs +++ b/src/Files.App.Controls/Omnibar/Omnibar.cs @@ -128,7 +128,7 @@ protected void ChangeMode(OmnibarMode? oldMode, OmnibarMode newMode) // Add the reposition transition to the all modes mode.Transitions = [new RepositionThemeTransition()]; mode.UpdateLayout(); - mode.IsTabStop = true; + mode.IsTabStop = false; } var index = _modesHostGrid.Children.IndexOf(newMode); diff --git a/src/Files.App.Controls/Omnibar/Omnibar.xaml b/src/Files.App.Controls/Omnibar/Omnibar.xaml index c5afe0825931..546902e4663a 100644 --- a/src/Files.App.Controls/Omnibar/Omnibar.xaml +++ b/src/Files.App.Controls/Omnibar/Omnibar.xaml @@ -117,9 +117,6 @@ - - - @@ -127,23 +124,21 @@ x:Name="PART_RootGrid" Height="{TemplateBinding Height}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" - Background="{TemplateBinding Background}" - TabFocusNavigation="Local"> + Background="{TemplateBinding Background}"> - - - - + ToolTipService.ToolTip="{Binding ModeName, RelativeSource={RelativeSource TemplatedParent}, Mode=OneWay}"> + + + + - + - - - - - + - diff --git a/src/Files.App.Controls/Omnibar/OmnibarMode.Events.cs b/src/Files.App.Controls/Omnibar/OmnibarMode.Events.cs index 39fed9ea25b1..a40dd8abbdcb 100644 --- a/src/Files.App.Controls/Omnibar/OmnibarMode.Events.cs +++ b/src/Files.App.Controls/Omnibar/OmnibarMode.Events.cs @@ -35,11 +35,6 @@ private void ModeButton_PointerReleased(object sender, PointerRoutedEventArgs e) GlobalHelper.WriteDebugStringForOmnibar($"The mouse pointer has been unpressed from the UI area of this Mode ({this})"); VisualStateManager.GoToState(this, "PointerOver", true); - - owner.IsModeButtonPressed = true; - - // Change the current mode - owner.CurrentSelectedMode = this; } private void ModeButton_PointerExited(object sender, PointerRoutedEventArgs e) @@ -48,5 +43,14 @@ private void ModeButton_PointerExited(object sender, PointerRoutedEventArgs e) VisualStateManager.GoToState(this, "PointerNormal", true); } + + private void ModeButton_Click(object sender, RoutedEventArgs e) + { + if (_ownerRef is null || _ownerRef.TryGetTarget(out var owner) is false || owner.CurrentSelectedMode == this) + return; + + owner.IsModeButtonPressed = true; + owner.CurrentSelectedMode = this; + } } -} +} \ No newline at end of file diff --git a/src/Files.App.Controls/Omnibar/OmnibarMode.cs b/src/Files.App.Controls/Omnibar/OmnibarMode.cs index f75bffcb9412..e91e05abe24b 100644 --- a/src/Files.App.Controls/Omnibar/OmnibarMode.cs +++ b/src/Files.App.Controls/Omnibar/OmnibarMode.cs @@ -16,7 +16,7 @@ public partial class OmnibarMode : ItemsControl private WeakReference? _ownerRef; - private Border _modeButton = null!; + private Button _modeButton = null!; // Constructor @@ -33,7 +33,7 @@ protected override void OnApplyTemplate() { base.OnApplyTemplate(); - _modeButton = GetTemplateChild(TemplatePartName_ModeButton) as Border + _modeButton = GetTemplateChild(TemplatePartName_ModeButton) as Button ?? throw new MissingFieldException($"Could not find {TemplatePartName_ModeButton} in the given {nameof(OmnibarMode)}'s style."); Loaded += OmnibarMode_Loaded; @@ -41,6 +41,7 @@ protected override void OnApplyTemplate() _modeButton.PointerPressed += ModeButton_PointerPressed; _modeButton.PointerReleased += ModeButton_PointerReleased; _modeButton.PointerExited += ModeButton_PointerExited; + _modeButton.Click += ModeButton_Click; GlobalHelper.WriteDebugStringForOmnibar($"The template and the events of the Omnibar Mode ({this}) have been initialized."); } From eed7abe3fceb01aec018e143d8db52b0b99d3af6 Mon Sep 17 00:00:00 2001 From: Yair <39923744+yaira2@users.noreply.github.com> Date: Wed, 2 Jul 2025 21:27:16 -0400 Subject: [PATCH 11/11] When Command mode flyout is open, focusing elsewhere doesn't always close the flyout --- src/Files.App.Controls/Omnibar/Omnibar.Events.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Files.App.Controls/Omnibar/Omnibar.Events.cs b/src/Files.App.Controls/Omnibar/Omnibar.Events.cs index d1acef9a81bf..f33680ad704f 100644 --- a/src/Files.App.Controls/Omnibar/Omnibar.Events.cs +++ b/src/Files.App.Controls/Omnibar/Omnibar.Events.cs @@ -26,7 +26,7 @@ private void AutoSuggestBox_GettingFocus(UIElement sender, GettingFocusEventArgs private void AutoSuggestBox_LosingFocus(UIElement sender, LosingFocusEventArgs args) { - if (IsModeButtonPressed) + if (args.NewFocusedElement is Button && IsModeButtonPressed) { IsModeButtonPressed = false; args.TryCancel();