Skip to content

Commit d609eb8

Browse files
authored
Code Quality: Fixed Omnibar issues (#17408)
1 parent 4890b48 commit d609eb8

File tree

3 files changed

+23
-8
lines changed

3 files changed

+23
-8
lines changed

src/Files.App.Controls/Omnibar/Omnibar.Events.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,14 @@ private void AutoSuggestBox_LostFocus(object sender, RoutedEventArgs e)
5656

5757
IsFocused = false;
5858
IsFocusedChanged?.Invoke(this, new(IsFocused));
59+
60+
// Workaround to prevent an issue where if the window loses focus and then regains focus,
61+
// the AutoSuggestBox will regain focus and the suggestions popup will open again.
62+
if (element is TextBox)
63+
{
64+
_previouslyFocusedElement.TryGetTarget(out var previouslyFocusedElement);
65+
previouslyFocusedElement?.Focus(FocusState.Programmatic);
66+
}
5967
}
6068

6169
private async void AutoSuggestBox_KeyDown(object sender, KeyRoutedEventArgs e)

src/Files.App/Data/Contracts/IAddressToolbarViewModel.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,5 @@ public interface IAddressToolbarViewModel
3131
public event ItemDraggedOverPathItemEventHandler ItemDraggedOverPathItem;
3232

3333
public event EventHandler RefreshWidgetsRequested;
34-
35-
public void SwitchToSearchMode();
3634
}
3735
}

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

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -602,16 +602,26 @@ public void SwitchToCommandPaletteMode()
602602
OmnibarCurrentSelectedModeName = OmnibarPaletteModeName;
603603
}
604604

605-
public void SwitchToSearchMode()
605+
public async Task SwitchToSearchMode()
606606
{
607+
// If the Omnibar is already focused such as when the user initiates a search via the Command Palette,
608+
// add a short delay to allow the Command Palette to fully close before switching modes.
609+
var omnibar = AddressToolbar?.FindDescendant("Omnibar") as Omnibar;
610+
if (omnibar is not null && omnibar.IsFocused)
611+
await Task.Delay(100);
612+
607613
OmnibarCurrentSelectedModeName = OmnibarSearchModeName;
608614
}
609615

610-
public void SwitchToPathMode()
616+
public async Task SwitchToPathMode()
611617
{
612-
OmnibarCurrentSelectedModeName = OmnibarPathModeName;
613-
618+
// If the Omnibar is already focused such as when the user initiates the Edit Path action via the
619+
// Command Palette, add a short delay to allow the Command Palette to fully close before switching modes.
614620
var omnibar = AddressToolbar?.FindDescendant("Omnibar") as Omnibar;
621+
if (omnibar is not null && omnibar.IsFocused)
622+
await Task.Delay(100);
623+
624+
OmnibarCurrentSelectedModeName = OmnibarPathModeName;
615625
omnibar?.Focus(FocusState.Programmatic);
616626
omnibar.IsFocused = true;
617627
}
@@ -997,8 +1007,7 @@ await Task.Run(() =>
9971007
HotKeys = command.HotKeys,
9981008
SearchText = OmnibarCommandPaletteModeText,
9991009
})
1000-
.Where(item => item.Text != Commands.OpenCommandPalette.Description.ToString()
1001-
&& item.Text != Commands.EditPath.Description.ToString());
1010+
.Where(item => item.Text != Commands.OpenCommandPalette.Description.ToString());
10021011
});
10031012

10041013
newSuggestions.AddRange(suggestionItems);

0 commit comments

Comments
 (0)