Skip to content

Commit e826ab6

Browse files
committed
Code Quality: Fixed issue where Omnibar returned focus to wrong pane
1 parent a23953f commit e826ab6

File tree

3 files changed

+20
-6
lines changed

3 files changed

+20
-6
lines changed

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,11 @@ public interface IShellPanesPage : IDisposable, INotifyPropertyChanged
6464
/// </summary>
6565
public void FocusOtherPane();
6666

67+
/// <summary>
68+
/// Focuses the active pane.
69+
/// </summary>
70+
public void FocusActivePane();
71+
6772
/// <summary>
6873
/// Gets open panes.
6974
/// </summary>

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ private async void Omnibar_QuerySubmitted(Omnibar sender, OmnibarQuerySubmittedE
177177
if (mode == OmnibarPathMode)
178178
{
179179
await ViewModel.HandleItemNavigationAsync(args.Text);
180-
(MainPageViewModel.SelectedTabItem?.TabItemContent as Control)?.Focus(FocusState.Programmatic);
180+
ContentPageContext.ShellPage!.PaneHolder.FocusActivePane();
181181
return;
182182
}
183183

@@ -197,7 +197,7 @@ private async void Omnibar_QuerySubmitted(Omnibar sender, OmnibarQuerySubmittedE
197197
continue;
198198

199199
await command.ExecuteAsync();
200-
(MainPageViewModel.SelectedTabItem?.TabItemContent as Control)?.Focus(FocusState.Programmatic);
200+
ContentPageContext.ShellPage!.PaneHolder.FocusActivePane();
201201
return;
202202
}
203203

@@ -214,14 +214,14 @@ private async void Omnibar_QuerySubmitted(Omnibar sender, OmnibarQuerySubmittedE
214214
await overload?.InvokeAsync(actionInstance.Context);
215215
}
216216

217-
(MainPageViewModel.SelectedTabItem?.TabItemContent as Control)?.Focus(FocusState.Programmatic);
217+
ContentPageContext.ShellPage!.PaneHolder.FocusActivePane();
218218
return;
219219
}
220220

221221
await DialogDisplayHelper.ShowDialogAsync(Strings.InvalidCommand.GetLocalizedResource(),
222222
string.Format(Strings.InvalidCommandContent.GetLocalizedResource(), args.Text));
223223

224-
(MainPageViewModel.SelectedTabItem?.TabItemContent as Control)?.Focus(FocusState.Programmatic);
224+
ContentPageContext.ShellPage!.PaneHolder.FocusActivePane();
225225
return;
226226
}
227227

@@ -242,7 +242,7 @@ await DialogDisplayHelper.ShowDialogAsync(Strings.InvalidCommand.GetLocalizedRes
242242
ViewModel.SaveSearchQueryToList(searchQuery);
243243
}
244244

245-
(MainPageViewModel.SelectedTabItem?.TabItemContent as Control)?.Focus(FocusState.Programmatic);
245+
ContentPageContext.ShellPage!.PaneHolder.FocusActivePane();
246246
return;
247247
}
248248
}
@@ -423,7 +423,7 @@ private async void Omnibar_PreviewKeyDown(object sender, KeyRoutedEventArgs e)
423423
if (e.Key is VirtualKey.Escape)
424424
{
425425
Omnibar.IsFocused = false;
426-
(MainPageViewModel.SelectedTabItem?.TabItemContent as Control)?.Focus(FocusState.Programmatic);
426+
ContentPageContext.ShellPage!.PaneHolder.FocusActivePane();
427427
}
428428
else if (e.Key is VirtualKey.Tab && Omnibar.IsFocused && !InputKeyboardSource.GetKeyStateForCurrentThread(VirtualKey.Shift).HasFlag(CoreVirtualKeyStates.Down))
429429
{

src/Files.App/Views/ShellPanesPage.xaml.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,15 @@ public void FocusOtherPane()
369369
GetPane(0)?.Focus(FocusState.Programmatic);
370370
}
371371

372+
/// <inheritdoc/>
373+
public void FocusActivePane()
374+
{
375+
if (ActivePane == (IShellPage)GetPane(0)!)
376+
GetPane(0)?.Focus(FocusState.Programmatic);
377+
else
378+
GetPane(1)?.Focus(FocusState.Programmatic);
379+
}
380+
372381
/// <inheritdoc/>
373382
public IEnumerable<ModernShellPage> GetPanes()
374383
{

0 commit comments

Comments
 (0)