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();