diff --git a/.github/actions/spell-check/expect.txt b/.github/actions/spell-check/expect.txt
index 6fb81c9ff7..c4915c60f8 100644
--- a/.github/actions/spell-check/expect.txt
+++ b/.github/actions/spell-check/expect.txt
@@ -1217,6 +1217,7 @@ QITAB
QITABENT
qoi
qps
+Quarternary
QUERYENDSESSION
QUERYOPEN
QUEUESYNC
diff --git a/src/modules/launcher/Plugins/Microsoft.Plugin.Program/Programs/UWPApplication.cs b/src/modules/launcher/Plugins/Microsoft.Plugin.Program/Programs/UWPApplication.cs
index f46295ec50..51d166e66a 100644
--- a/src/modules/launcher/Plugins/Microsoft.Plugin.Program/Programs/UWPApplication.cs
+++ b/src/modules/launcher/Plugins/Microsoft.Plugin.Program/Programs/UWPApplication.cs
@@ -118,8 +118,8 @@ namespace Microsoft.Plugin.Program.Programs
result.TitleHighlightData = StringMatcher.FuzzySearch(query, Name).MatchData;
// Using CurrentCulture since this is user facing
- var toolTipTitle = string.Format(CultureInfo.CurrentCulture, "{0}: {1}", Properties.Resources.powertoys_run_plugin_program_file_name, result.Title);
- var toolTipText = string.Format(CultureInfo.CurrentCulture, "{0}: {1}", Properties.Resources.powertoys_run_plugin_program_file_path, LocationLocalized);
+ var toolTipTitle = result.Title;
+ var toolTipText = LocationLocalized;
result.ToolTipData = new ToolTipData(toolTipTitle, toolTipText);
return result;
diff --git a/src/modules/launcher/Plugins/Microsoft.Plugin.Program/Programs/Win32Program.cs b/src/modules/launcher/Plugins/Microsoft.Plugin.Program/Programs/Win32Program.cs
index 6ee8293ed7..934f518bbf 100644
--- a/src/modules/launcher/Plugins/Microsoft.Plugin.Program/Programs/Win32Program.cs
+++ b/src/modules/launcher/Plugins/Microsoft.Plugin.Program/Programs/Win32Program.cs
@@ -261,9 +261,9 @@ namespace Microsoft.Plugin.Program.Programs
result.TitleHighlightData = StringMatcher.FuzzySearch(query, result.Title).MatchData;
// Using CurrentCulture since this is user facing
- var toolTipTitle = string.Format(CultureInfo.CurrentCulture, "{0}: {1}", Properties.Resources.powertoys_run_plugin_program_file_name, result.Title);
+ var toolTipTitle = result.Title;
string filePath = !string.IsNullOrEmpty(FullPathLocalized) ? FullPathLocalized : FullPath;
- var toolTipText = string.Format(CultureInfo.CurrentCulture, "{0}: {1}", Properties.Resources.powertoys_run_plugin_program_file_path, filePath);
+ var toolTipText = filePath;
result.ToolTipData = new ToolTipData(toolTipTitle, toolTipText);
return result;
diff --git a/src/modules/launcher/PowerLauncher/LauncherControl.xaml b/src/modules/launcher/PowerLauncher/LauncherControl.xaml
index d2108fba00..661905fb86 100644
--- a/src/modules/launcher/PowerLauncher/LauncherControl.xaml
+++ b/src/modules/launcher/PowerLauncher/LauncherControl.xaml
@@ -84,10 +84,10 @@
-
+
@@ -116,7 +116,7 @@
Foreground="{DynamicResource TextPlaceholderColorBrush}" />
diff --git a/src/modules/launcher/PowerLauncher/MainWindow.xaml b/src/modules/launcher/PowerLauncher/MainWindow.xaml
index 258dfe464b..942c07cd09 100644
--- a/src/modules/launcher/PowerLauncher/MainWindow.xaml
+++ b/src/modules/launcher/PowerLauncher/MainWindow.xaml
@@ -36,44 +36,42 @@
+
+ Padding="12,4,12,3">
-
+
-
+
@@ -89,29 +87,44 @@
+ CornerRadius="4"
+ ToolTipService.ToolTip="{Binding Metadata.ActionKeyword}">
+ Text="{Binding Metadata.ActionKeyword}"
+ TextAlignment="Left"
+ TextTrimming="WordEllipsis" />
+ TextTrimming="CharacterEllipsis"
+ TextWrapping="Wrap" />
+
+
+
diff --git a/src/modules/launcher/PowerLauncher/MainWindow.xaml.cs b/src/modules/launcher/PowerLauncher/MainWindow.xaml.cs
index 9c84498354..c7ae5a5bca 100644
--- a/src/modules/launcher/PowerLauncher/MainWindow.xaml.cs
+++ b/src/modules/launcher/PowerLauncher/MainWindow.xaml.cs
@@ -220,6 +220,7 @@ namespace PowerLauncher
_viewModel.PropertyChanged += ViewModel_PropertyChanged;
_viewModel.MainWindowVisibility = Visibility.Collapsed;
_viewModel.LoadedAtLeastOnce = true;
+ _viewModel.SetPluginsOverviewVisibility();
BringProcessToForeground();
}
@@ -362,6 +363,8 @@ namespace PowerLauncher
UpdatePosition();
BringProcessToForeground();
+ _viewModel.SetPluginsOverviewVisibility();
+
// HACK: Setting focus here again fixes some focus issues, like on first run or after showing a message box.
SearchBox.QueryTextBox.Focus();
Keyboard.Focus(SearchBox.QueryTextBox);
diff --git a/src/modules/launcher/PowerLauncher/ResultList.xaml b/src/modules/launcher/PowerLauncher/ResultList.xaml
index 614c14d2a3..2d512fa6ee 100644
--- a/src/modules/launcher/PowerLauncher/ResultList.xaml
+++ b/src/modules/launcher/PowerLauncher/ResultList.xaml
@@ -17,23 +17,7 @@
-
-
-
+
+
\ No newline at end of file
diff --git a/src/modules/launcher/PowerLauncher/ViewModel/MainViewModel.cs b/src/modules/launcher/PowerLauncher/ViewModel/MainViewModel.cs
index 14dc995814..363ff61148 100644
--- a/src/modules/launcher/PowerLauncher/ViewModel/MainViewModel.cs
+++ b/src/modules/launcher/PowerLauncher/ViewModel/MainViewModel.cs
@@ -346,15 +346,8 @@ namespace PowerLauncher.ViewModel
if (_queryText != value)
{
_queryText = value;
- if (string.IsNullOrEmpty(_queryText) || string.IsNullOrWhiteSpace(_queryText))
- {
- PluginsOverviewVisibility = Visibility.Visible;
- }
- else
- {
- PluginsOverviewVisibility = Visibility.Collapsed;
- }
+ SetPluginsOverviewVisibility();
OnPropertyChanged(nameof(QueryText));
}
}
@@ -378,6 +371,18 @@ namespace PowerLauncher.ViewModel
}
}
+ public void SetPluginsOverviewVisibility()
+ {
+ if (_settings.ShowPluginsOverview != PowerToysRunSettings.ShowPluginsOverviewMode.None && (string.IsNullOrEmpty(_queryText) || string.IsNullOrWhiteSpace(_queryText)))
+ {
+ PluginsOverviewVisibility = Visibility.Visible;
+ }
+ else
+ {
+ PluginsOverviewVisibility = Visibility.Collapsed;
+ }
+ }
+
public bool LastQuerySelected { get; set; }
private ResultsViewModel _selectedResults;
@@ -394,17 +399,17 @@ namespace PowerLauncher.ViewModel
_selectedResults = value;
if (SelectedIsFromQueryResults())
{
- ContextMenu.Visibility = Visibility.Hidden;
- History.Visibility = Visibility.Hidden;
+ ContextMenu.Visibility = Visibility.Collapsed;
+ History.Visibility = Visibility.Collapsed;
ChangeQueryText(_queryTextBeforeLeaveResults);
}
else
{
- Results.Visibility = Visibility.Hidden;
+ Results.Visibility = Visibility.Collapsed;
_queryTextBeforeLeaveResults = QueryText;
}
- _selectedResults.Visibility = Visibility.Visible;
+ _selectedResults.Visibility = Visibility.Collapsed;
}
}
@@ -732,7 +737,7 @@ namespace PowerLauncher.ViewModel
_updateSource?.Cancel();
_currentQuery = _emptyQuery;
Results.SelectedItem = null;
- Results.Visibility = Visibility.Hidden;
+ Results.Visibility = Visibility.Collapsed;
Task.Run(() =>
{
lock (_addResultsLock)
@@ -769,7 +774,7 @@ namespace PowerLauncher.ViewModel
}
else
{
- Results.Visibility = Visibility.Hidden;
+ Results.Visibility = Visibility.Collapsed;
}
}
}));
@@ -1233,7 +1238,10 @@ namespace PowerLauncher.ViewModel
foreach (var p in PluginManager.AllPlugins.Where(a => a.IsPluginInitialized && !a.Metadata.Disabled && a.Metadata.ActionKeyword != string.Empty))
{
- Plugins.Add(p);
+ if (_settings.ShowPluginsOverview == PowerToysRunSettings.ShowPluginsOverviewMode.All || (_settings.ShowPluginsOverview == PowerToysRunSettings.ShowPluginsOverviewMode.NonGlobal && !p.Metadata.IsGlobal))
+ {
+ Plugins.Add(p);
+ }
}
});
}
diff --git a/src/modules/launcher/PowerLauncher/ViewModel/ResultsViewModel.cs b/src/modules/launcher/PowerLauncher/ViewModel/ResultsViewModel.cs
index 65b505106e..4047722718 100644
--- a/src/modules/launcher/PowerLauncher/ViewModel/ResultsViewModel.cs
+++ b/src/modules/launcher/PowerLauncher/ViewModel/ResultsViewModel.cs
@@ -50,7 +50,7 @@ namespace PowerLauncher.ViewModel
{
get
{
- return (_settings.MaxResultsToShow * 50) + 40;
+ return (_settings.MaxResultsToShow * 56) + 16;
}
}
@@ -97,7 +97,7 @@ namespace PowerLauncher.ViewModel
}
}
- private Visibility _visibility = Visibility.Hidden;
+ private Visibility _visibility = Visibility.Collapsed;
public Visibility Visibility
{
diff --git a/src/modules/launcher/Wox.Infrastructure/UserSettings/PowerToysRunSettings.cs b/src/modules/launcher/Wox.Infrastructure/UserSettings/PowerToysRunSettings.cs
index 173de229bb..d063c24218 100644
--- a/src/modules/launcher/Wox.Infrastructure/UserSettings/PowerToysRunSettings.cs
+++ b/src/modules/launcher/Wox.Infrastructure/UserSettings/PowerToysRunSettings.cs
@@ -319,6 +319,15 @@ namespace Wox.Infrastructure.UserSettings
public bool RememberLastLaunchLocation { get; set; }
+ public enum ShowPluginsOverviewMode
+ {
+ All,
+ NonGlobal,
+ None,
+ }
+
+ public ShowPluginsOverviewMode ShowPluginsOverview { get; set; } = ShowPluginsOverviewMode.All;
+
public bool IgnoreHotkeysOnFullscreen { get; set; }
public bool StartedFromPowerToysRunner { get; set; }
diff --git a/src/settings-ui/Settings.UI.Library/PowerLauncherProperties.cs b/src/settings-ui/Settings.UI.Library/PowerLauncherProperties.cs
index 3f6c83289b..1e1c35bbc9 100644
--- a/src/settings-ui/Settings.UI.Library/PowerLauncherProperties.cs
+++ b/src/settings-ui/Settings.UI.Library/PowerLauncherProperties.cs
@@ -48,6 +48,9 @@ namespace Microsoft.PowerToys.Settings.UI.Library
[JsonPropertyName("theme")]
public Theme Theme { get; set; }
+ [JsonPropertyName("show_plugins_overview")]
+ public int ShowPluginsOverview { get; set; }
+
[JsonPropertyName("startupPosition")]
public StartupPosition Position { get; set; }
@@ -107,6 +110,7 @@ namespace Microsoft.PowerToys.Settings.UI.Library
SearchWaitForSlowResults = false;
GenerateThumbnailsFromFiles = true;
UsePinyin = false;
+ ShowPluginsOverview = 0;
}
}
}
diff --git a/src/settings-ui/Settings.UI.UnitTests/ViewModelTests/PowerLauncherViewModelTest.cs b/src/settings-ui/Settings.UI.UnitTests/ViewModelTests/PowerLauncherViewModelTest.cs
index 0381e5f453..8f48faa8ac 100644
--- a/src/settings-ui/Settings.UI.UnitTests/ViewModelTests/PowerLauncherViewModelTest.cs
+++ b/src/settings-ui/Settings.UI.UnitTests/ViewModelTests/PowerLauncherViewModelTest.cs
@@ -82,6 +82,7 @@ namespace ViewModelTests
Assert.AreEqual(originalSettings.Properties.SearchTypePreference, viewModel.SearchTypePreference);
Assert.AreEqual(originalSettings.Properties.GenerateThumbnailsFromFiles, viewModel.GenerateThumbnailsFromFiles);
Assert.AreEqual(originalSettings.Properties.UsePinyin, viewModel.UsePinyin);
+ Assert.AreEqual(originalSettings.Properties.ShowPluginsOverview, viewModel.ShowPluginsOverviewIndex);
// Verify that the stub file was used
var expectedCallCount = 2; // once via the view model, and once by the test (GetSettings)
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerLauncherPage.xaml b/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerLauncherPage.xaml
index c397d6a645..18a13c6a1a 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerLauncherPage.xaml
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerLauncherPage.xaml
@@ -157,10 +157,9 @@
-
+
-
-
+
@@ -2183,7 +2186,7 @@ From there, simply click on one of the supported files in the File Explorer and
Welcome to PowerToys
Don't loc "PowerToys"
-
+
What's New
@@ -2996,6 +2999,12 @@ Right-click to remove the key combination, thereby deactivating the shortcut.
Wait on slower plugin results before selecting top item in results
+
+ Plugin hints
+
+
+ Choose which plugin keywords to be shown when the searchbox is empty
+
Use a higher number to have this plugin's result show higher in the global results. Default is 0.
@@ -3364,7 +3373,7 @@ Activate by holding the key for the character you want to add an accent to, then
German
- Greek
+ Greek
Hebrew
@@ -3898,4 +3907,13 @@ Activate by holding the key for the character you want to add an accent to, then
Wrap text
-
+
+ All
+
+
+ None
+
+
+ Not included in global results
+
+
\ No newline at end of file
diff --git a/src/settings-ui/Settings.UI/ViewModels/PowerLauncherViewModel.cs b/src/settings-ui/Settings.UI/ViewModels/PowerLauncherViewModel.cs
index ad7d92bd3a..604c7a91ea 100644
--- a/src/settings-ui/Settings.UI/ViewModels/PowerLauncherViewModel.cs
+++ b/src/settings-ui/Settings.UI/ViewModels/PowerLauncherViewModel.cs
@@ -597,6 +597,23 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels
}
}
+ public int ShowPluginsOverviewIndex
+ {
+ get
+ {
+ return settings.Properties.ShowPluginsOverview;
+ }
+
+ set
+ {
+ if (settings.Properties.ShowPluginsOverview != value)
+ {
+ settings.Properties.ShowPluginsOverview = value;
+ UpdateSettings();
+ }
+ }
+ }
+
private ObservableCollection _plugins;
public ObservableCollection Plugins