[PTRun]Allow interaction with plugin hints (#30531)

This commit is contained in:
Davide Giacometti
2023-12-20 16:19:58 +01:00
committed by GitHub
parent 0e01314bbd
commit e73e73fa6c
5 changed files with 216 additions and 65 deletions

View File

@@ -364,6 +364,11 @@ namespace PowerLauncher
BringProcessToForeground();
_viewModel.SetPluginsOverviewVisibility();
if (_viewModel.Plugins.Count > 0)
{
_viewModel.SelectedPlugin = null;
pluginsHintsList.ScrollIntoView(pluginsHintsList.Items[0]);
}
// HACK: Setting focus here again fixes some focus issues, like on first run or after showing a message box.
SearchBox.QueryTextBox.Focus();
@@ -484,66 +489,101 @@ namespace PowerLauncher
private void Launcher_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Tab && (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift)))
if (_viewModel.PluginsOverviewVisibility == Visibility.Visible)
{
_viewModel.SelectPrevTabItemCommand.Execute(null);
UpdateTextBoxToSelectedItem();
e.Handled = true;
}
else if (e.Key == Key.Tab)
{
_viewModel.SelectNextTabItemCommand.Execute(null);
UpdateTextBoxToSelectedItem();
e.Handled = true;
}
else if (e.Key == Key.Down)
{
_viewModel.SelectNextItemCommand.Execute(null);
UpdateTextBoxToSelectedItem();
e.Handled = true;
}
else if (e.Key == Key.Up)
{
_viewModel.SelectPrevItemCommand.Execute(null);
UpdateTextBoxToSelectedItem();
e.Handled = true;
}
else if (e.Key == Key.Right)
{
if (SearchBox.QueryTextBox.CaretIndex == SearchBox.QueryTextBox.Text.Length)
if (e.Key == Key.Up)
{
_viewModel.SelectNextContextMenuItemCommand.Execute(null);
_viewModel.SelectPrevOverviewPluginCommand.Execute(null);
pluginsHintsList.ScrollIntoView(_viewModel.SelectedPlugin);
e.Handled = true;
}
else if (e.Key == Key.Down)
{
_viewModel.SelectNextOverviewPluginCommand.Execute(null);
pluginsHintsList.ScrollIntoView(_viewModel.SelectedPlugin);
e.Handled = true;
}
else if (e.Key == Key.Tab && (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift)))
{
_viewModel.SelectPrevOverviewPluginCommand.Execute(null);
pluginsHintsList.ScrollIntoView(_viewModel.SelectedPlugin);
e.Handled = true;
}
else if (e.Key == Key.Tab)
{
_viewModel.SelectNextOverviewPluginCommand.Execute(null);
pluginsHintsList.ScrollIntoView(_viewModel.SelectedPlugin);
e.Handled = true;
}
else if (e.Key == Key.Enter)
{
QueryForSelectedPlugin();
e.Handled = true;
}
}
else if (e.Key == Key.Left)
else
{
if (SearchBox.QueryTextBox.CaretIndex == SearchBox.QueryTextBox.Text.Length)
if (e.Key == Key.Tab && (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift)))
{
if (_viewModel.Results != null && _viewModel.Results.IsContextMenuItemSelected())
_viewModel.SelectPrevTabItemCommand.Execute(null);
UpdateTextBoxToSelectedItem();
e.Handled = true;
}
else if (e.Key == Key.Tab)
{
_viewModel.SelectNextTabItemCommand.Execute(null);
UpdateTextBoxToSelectedItem();
e.Handled = true;
}
else if (e.Key == Key.Down)
{
_viewModel.SelectNextItemCommand.Execute(null);
UpdateTextBoxToSelectedItem();
e.Handled = true;
}
else if (e.Key == Key.Up)
{
_viewModel.SelectPrevItemCommand.Execute(null);
UpdateTextBoxToSelectedItem();
e.Handled = true;
}
else if (e.Key == Key.Right)
{
if (SearchBox.QueryTextBox.CaretIndex == SearchBox.QueryTextBox.Text.Length)
{
_viewModel.SelectPreviousContextMenuItemCommand.Execute(null);
_viewModel.SelectNextContextMenuItemCommand.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.Back)
{
_deletePressed = true;
}
else
{
_viewModel.HandleContextMenu(e.Key, Keyboard.Modifiers);
else if (e.Key == Key.Left)
{
if (SearchBox.QueryTextBox.CaretIndex == SearchBox.QueryTextBox.Text.Length)
{
if (_viewModel.Results != null && _viewModel.Results.IsContextMenuItemSelected())
{
_viewModel.SelectPreviousContextMenuItemCommand.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.Back)
{
_deletePressed = true;
}
else
{
_viewModel.HandleContextMenu(e.Key, Keyboard.Modifiers);
}
}
}
@@ -796,5 +836,25 @@ namespace PowerLauncher
_hwndSource = null;
}
private void PluginsHintsList_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
QueryForSelectedPlugin();
}
private void QueryForSelectedPlugin()
{
if (_viewModel.Plugins.Count > 0 && _viewModel.SelectedPlugin != null)
{
// Needed to update UI in case the user choose the same plugin multiple times
_viewModel.ChangeQueryText(string.Empty);
_viewModel.ChangeQueryText(_viewModel.SelectedPlugin.Metadata.ActionKeyword, true);
SearchBox.QueryTextBox.Focus();
_viewModel.SelectedPlugin = null;
pluginsHintsList.ScrollIntoView(pluginsHintsList.Items[0]);
}
}
}
}