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;