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