From e14bb23a7a2a2d0bdd2cc512ccbe235697389482 Mon Sep 17 00:00:00 2001 From: Dobin Park Date: Tue, 5 Oct 2021 17:37:58 +0900 Subject: [PATCH] - Merge "use switch statement for Left/Right context menu logic" --- Flow.Launcher/MainWindow.xaml.cs | 72 +++++++++++------------- Flow.Launcher/ViewModel/MainViewModel.cs | 6 +- 2 files changed, 38 insertions(+), 40 deletions(-) diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index 973be252c..9533e6144 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -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..5616ccbfb 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; @@ -524,7 +526,7 @@ namespace Flow.Launcher.ViewModel try { // Check the code, WhenAll will translate all type of IEnumerable or Collection to Array, so make an array at first - await Task.WhenAll(tasks); + await Task.WhenAll(tasks); } catch (OperationCanceledException) { @@ -632,7 +634,7 @@ namespace Flow.Launcher.ViewModel return menu; } - private bool SelectedIsFromQueryResults() + internal bool SelectedIsFromQueryResults() { var selected = SelectedResults == Results; return selected;