From d902a1e2fa89f7ab6258d51bbf41ec631de7bdc3 Mon Sep 17 00:00:00 2001 From: Jeremy Date: Tue, 5 Oct 2021 13:36:21 +1100 Subject: [PATCH] use switch statement for Left/Right context menu logic --- Flow.Launcher/MainWindow.xaml.cs | 74 +++++++++++------------- Flow.Launcher/ViewModel/MainViewModel.cs | 4 +- 2 files changed, 38 insertions(+), 40 deletions(-) diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index 973be252c..1f1080b34 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.ComponentModel; using System.Threading.Tasks; using System.Windows; @@ -313,47 +313,43 @@ namespace Flow.Launcher /// private void OnKeyDown(object sender, KeyEventArgs e) { - if (e.Key == Key.Down) + switch (e.Key) { - _viewModel.SelectNextItemCommand.Execute(null); - e.Handled = true; - } - 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); + case Key.Down: + _viewModel.SelectNextItemCommand.Execute(null); e.Handled = true; - } - else { } - } - else if (e.Key == Key.Left) - { - int caretPosition = QueryTextBox.CaretIndex; - int queryLength = QueryTextBox.Text.Length; - if (caretPosition == queryLength && queryLength == 0) - { - _viewModel.EscCommand.Execute(null); + break; + case Key.Up: + _viewModel.SelectPrevItemCommand.Execute(null); e.Handled = true; - } - else { } + break; + 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; + } } diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs index 2f09c8e71..030aa3d16 100644 --- a/Flow.Launcher/ViewModel/MainViewModel.cs +++ b/Flow.Launcher/ViewModel/MainViewModel.cs @@ -292,6 +292,8 @@ namespace Flow.Launcher.ViewModel } 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; } private ResultsViewModel _selectedResults; @@ -632,7 +634,7 @@ namespace Flow.Launcher.ViewModel return menu; } - private bool SelectedIsFromQueryResults() + internal bool SelectedIsFromQueryResults() { var selected = SelectedResults == Results; return selected;