use switch statement for Left/Right context menu logic

This commit is contained in:
Jeremy 2021-10-05 13:36:21 +11:00
parent 10accd5d0d
commit d902a1e2fa
2 changed files with 38 additions and 40 deletions

View file

@ -1,4 +1,4 @@
using System; using System;
using System.ComponentModel; using System.ComponentModel;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows; using System.Windows;
@ -313,47 +313,43 @@ namespace Flow.Launcher
/// </summary> /// </summary>
private void OnKeyDown(object sender, KeyEventArgs e) private void OnKeyDown(object sender, KeyEventArgs e)
{ {
if (e.Key == Key.Down) switch (e.Key)
{ {
_viewModel.SelectNextItemCommand.Execute(null); case Key.Down:
e.Handled = true; _viewModel.SelectNextItemCommand.Execute(null);
}
else if (e.Key == Key.Up)
{
_viewModel.SelectPrevItemCommand.Execute(null);
e.Handled = true;
}
else if (e.Key == Key.PageDown)
{
_viewModel.SelectNextPageCommand.Execute(null);
e.Handled = true;
}
else if (e.Key == Key.PageUp)
{
_viewModel.SelectPrevPageCommand.Execute(null);
e.Handled = true;
}
else if (e.Key == Key.Right)
{
int caretPosition = QueryTextBox.CaretIndex;
int queryLength = QueryTextBox.Text.Length;
if (caretPosition == queryLength && queryLength != 0)
{
_viewModel.LoadContextMenuCommand.Execute(null);
e.Handled = true; e.Handled = true;
} break;
else { } case Key.Up:
} _viewModel.SelectPrevItemCommand.Execute(null);
else if (e.Key == Key.Left)
{
int caretPosition = QueryTextBox.CaretIndex;
int queryLength = QueryTextBox.Text.Length;
if (caretPosition == queryLength && queryLength == 0)
{
_viewModel.EscCommand.Execute(null);
e.Handled = true; e.Handled = true;
} break;
else { } case Key.PageDown:
_viewModel.SelectNextPageCommand.Execute(null);
e.Handled = true;
break;
case Key.PageUp:
_viewModel.SelectPrevPageCommand.Execute(null);
e.Handled = true;
break;
case Key.Right:
if (_viewModel.SelectedIsFromQueryResults()
&& QueryTextBox.CaretIndex == QueryTextBox.Text.Length
&& !string.IsNullOrEmpty(QueryTextBox.Text))
{
_viewModel.LoadContextMenuCommand.Execute(null);
e.Handled = true;
}
break;
case Key.Left:
if (!_viewModel.SelectedIsFromQueryResults() && QueryTextBox.CaretIndex == 0)
{
_viewModel.EscCommand.Execute(null);
e.Handled = true;
}
break;
default:
break;
} }
} }

View file

@ -292,6 +292,8 @@ namespace Flow.Launcher.ViewModel
} }
public bool LastQuerySelected { get; set; } public bool LastQuerySelected { get; set; }
// This is not a reliable indicator of the cursor's position, it is manually set for a specific purpose.
public bool QueryTextCursorMovedToEnd { get; set; } public bool QueryTextCursorMovedToEnd { get; set; }
private ResultsViewModel _selectedResults; private ResultsViewModel _selectedResults;
@ -632,7 +634,7 @@ namespace Flow.Launcher.ViewModel
return menu; return menu;
} }
private bool SelectedIsFromQueryResults() internal bool SelectedIsFromQueryResults()
{ {
var selected = SelectedResults == Results; var selected = SelectedResults == Results;
return selected; return selected;