From b540f9d1911b8e644b509c46c8db9afd3c50664b Mon Sep 17 00:00:00 2001 From: Jaime Bernardo Date: Thu, 9 Jun 2022 11:31:52 +0100 Subject: [PATCH] [PTRun]Add setting to disable input delay --- .../launcher/PowerLauncher/MainWindow.xaml.cs | 53 ++++++++++++++++--- .../launcher/PowerLauncher/SettingsReader.cs | 5 ++ .../PowerLauncher/ViewModel/MainViewModel.cs | 10 ++++ .../UserSettings/PowerToysRunSettings.cs | 19 +++++++ .../PowerLauncherProperties.cs | 4 ++ .../ViewModels/PowerLauncherViewModel.cs | 17 ++++++ .../Settings.UI/Strings/en-us/Resources.resw | 3 ++ .../Settings.UI/Views/PowerLauncherPage.xaml | 5 +- 8 files changed, 108 insertions(+), 8 deletions(-) diff --git a/src/modules/launcher/PowerLauncher/MainWindow.xaml.cs b/src/modules/launcher/PowerLauncher/MainWindow.xaml.cs index 5e576c563c8..b7bb78b1b60 100644 --- a/src/modules/launcher/PowerLauncher/MainWindow.xaml.cs +++ b/src/modules/launcher/PowerLauncher/MainWindow.xaml.cs @@ -36,6 +36,7 @@ public partial class MainWindow : IDisposable private Timer _firstDeleteTimer = new Timer(); private bool _coldStateHotkeyPressed; private bool _disposedValue; + private IDisposable _reactiveSubscription; public MainWindow(PowerToysRunSettings settings, MainViewModel mainVM) : this() @@ -161,13 +162,18 @@ private void OnLoaded(object sender, RoutedEventArgs e) SearchBox.QueryTextBox.DataContext = _viewModel; SearchBox.QueryTextBox.PreviewKeyDown += Launcher_KeyDown; - Observable.FromEventPattern( - add => SearchBox.QueryTextBox.TextChanged += add, - remove => SearchBox.QueryTextBox.TextChanged -= remove) - .Do(@event => ClearAutoCompleteText((TextBox)@event.Sender)) - .Throttle(TimeSpan.FromMilliseconds(150)) - .Do(@event => Dispatcher.InvokeAsync(() => PerformSearchQuery((TextBox)@event.Sender))) - .Subscribe(); + SetupSearchTextBoxReactiveness(_viewModel.GetSearchQueryResultsWithoutDelaySetting()); + _viewModel.RegisterSettingsChangeListener( + (s, prop_e) => + { + if (prop_e.PropertyName == nameof(PowerToysRunSettings.SearchQueryResultsWithoutDelay)) + { + Application.Current.Dispatcher.Invoke(() => + { + SetupSearchTextBoxReactiveness(_viewModel.GetSearchQueryResultsWithoutDelaySetting()); + }); + } + }); // Set initial language flow direction SearchBox_UpdateFlowDirection(); @@ -188,6 +194,32 @@ private void OnLoaded(object sender, RoutedEventArgs e) BringProcessToForeground(); } + private void SetupSearchTextBoxReactiveness(bool showResultsImmediately) + { + if (_reactiveSubscription != null) + { + _reactiveSubscription.Dispose(); + _reactiveSubscription = null; + } + + SearchBox.QueryTextBox.TextChanged -= QueryTextBox_TextChanged; + + if (showResultsImmediately) + { + SearchBox.QueryTextBox.TextChanged += QueryTextBox_TextChanged; + } + else + { + _reactiveSubscription = Observable.FromEventPattern( + add => SearchBox.QueryTextBox.TextChanged += add, + remove => SearchBox.QueryTextBox.TextChanged -= remove) + .Do(@event => ClearAutoCompleteText((TextBox)@event.Sender)) + .Throttle(TimeSpan.FromMilliseconds(150)) + .Do(@event => Dispatcher.InvokeAsync(() => PerformSearchQuery((TextBox)@event.Sender))) + .Subscribe(); + } + } + private void SuggestionsList_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e) { var result = ((FrameworkElement)e.OriginalSource).DataContext; @@ -430,6 +462,13 @@ private void SuggestionsList_SelectionChanged(object sender, SelectionChangedEve } } + private void QueryTextBox_TextChanged(object sender, TextChangedEventArgs e) + { + var textBox = (TextBox)sender; + ClearAutoCompleteText(textBox); + PerformSearchQuery(textBox); + } + private void ClearAutoCompleteText(TextBox textBox) { var text = textBox.Text; diff --git a/src/modules/launcher/PowerLauncher/SettingsReader.cs b/src/modules/launcher/PowerLauncher/SettingsReader.cs index 588ef793ef5..1f16b84d488 100644 --- a/src/modules/launcher/PowerLauncher/SettingsReader.cs +++ b/src/modules/launcher/PowerLauncher/SettingsReader.cs @@ -105,6 +105,11 @@ public void ReadSettings() _settings.UseCentralizedKeyboardHook = overloadSettings.Properties.UseCentralizedKeyboardHook; } + if (_settings.SearchQueryResultsWithoutDelay != overloadSettings.Properties.SearchQueryResultsWithoutDelay) + { + _settings.SearchQueryResultsWithoutDelay = overloadSettings.Properties.SearchQueryResultsWithoutDelay; + } + if (_settings.MaxResultsToShow != overloadSettings.Properties.MaximumNumberOfResults) { _settings.MaxResultsToShow = overloadSettings.Properties.MaximumNumberOfResults; diff --git a/src/modules/launcher/PowerLauncher/ViewModel/MainViewModel.cs b/src/modules/launcher/PowerLauncher/ViewModel/MainViewModel.cs index 53a69f281f1..731a1965fb3 100644 --- a/src/modules/launcher/PowerLauncher/ViewModel/MainViewModel.cs +++ b/src/modules/launcher/PowerLauncher/ViewModel/MainViewModel.cs @@ -132,6 +132,11 @@ public void RegisterHotkey(IntPtr hwnd) // SetCustomPluginHotkey(); } + public void RegisterSettingsChangeListener(System.ComponentModel.PropertyChangedEventHandler handler) + { + _settings.PropertyChanged += handler; + } + private void RegisterResultsUpdatedEvent() { foreach (var pair in PluginManager.GetPluginsForInterface()) @@ -1104,5 +1109,10 @@ public long GetHotkeyEventTimeMs() _hotkeyTimer.Reset(); return recordedTime; } + + public bool GetSearchQueryResultsWithoutDelaySetting() + { + return _settings.SearchQueryResultsWithoutDelay; + } } } diff --git a/src/modules/launcher/Wox.Infrastructure/UserSettings/PowerToysRunSettings.cs b/src/modules/launcher/Wox.Infrastructure/UserSettings/PowerToysRunSettings.cs index 5ee3d9da0fb..943c87525bc 100644 --- a/src/modules/launcher/Wox.Infrastructure/UserSettings/PowerToysRunSettings.cs +++ b/src/modules/launcher/Wox.Infrastructure/UserSettings/PowerToysRunSettings.cs @@ -61,6 +61,25 @@ public bool UseCentralizedKeyboardHook } } + private bool _searchQueryResultsWithoutDelay; + + public bool SearchQueryResultsWithoutDelay + { + get + { + return _searchQueryResultsWithoutDelay; + } + + set + { + if (_searchQueryResultsWithoutDelay != value) + { + _searchQueryResultsWithoutDelay = value; + OnPropertyChanged(nameof(SearchQueryResultsWithoutDelay)); + } + } + } + public string Language { get; set; } = "en"; public Theme Theme { get; set; } = Theme.System; diff --git a/src/settings-ui/Settings.UI.Library/PowerLauncherProperties.cs b/src/settings-ui/Settings.UI.Library/PowerLauncherProperties.cs index aa42cd5e6ad..10bb4b58f96 100644 --- a/src/settings-ui/Settings.UI.Library/PowerLauncherProperties.cs +++ b/src/settings-ui/Settings.UI.Library/PowerLauncherProperties.cs @@ -51,6 +51,9 @@ public class PowerLauncherProperties [JsonPropertyName("use_centralized_keyboard_hook")] public bool UseCentralizedKeyboardHook { get; set; } + [JsonPropertyName("search_query_results_without_delay")] + public bool SearchQueryResultsWithoutDelay { get; set; } + public PowerLauncherProperties() { OpenPowerLauncher = new HotkeySettings(false, false, true, false, 32); @@ -65,6 +68,7 @@ public PowerLauncherProperties() Theme = Theme.System; Position = StartupPosition.Cursor; UseCentralizedKeyboardHook = false; + SearchQueryResultsWithoutDelay = false; } } } diff --git a/src/settings-ui/Settings.UI.Library/ViewModels/PowerLauncherViewModel.cs b/src/settings-ui/Settings.UI.Library/ViewModels/PowerLauncherViewModel.cs index 2c8e555b73f..c48f170094a 100644 --- a/src/settings-ui/Settings.UI.Library/ViewModels/PowerLauncherViewModel.cs +++ b/src/settings-ui/Settings.UI.Library/ViewModels/PowerLauncherViewModel.cs @@ -296,6 +296,23 @@ public bool UseCentralizedKeyboardHook } } + public bool SearchQueryResultsWithoutDelay + { + get + { + return settings.Properties.SearchQueryResultsWithoutDelay; + } + + set + { + if (settings.Properties.SearchQueryResultsWithoutDelay != value) + { + settings.Properties.SearchQueryResultsWithoutDelay = value; + UpdateSettings(); + } + } + } + public HotkeySettings OpenFileLocation { get diff --git a/src/settings-ui/Settings.UI/Strings/en-us/Resources.resw b/src/settings-ui/Settings.UI/Strings/en-us/Resources.resw index 90c811313e7..036749f2a5f 100644 --- a/src/settings-ui/Settings.UI/Strings/en-us/Resources.resw +++ b/src/settings-ui/Settings.UI/Strings/en-us/Resources.resw @@ -414,6 +414,9 @@ Clear the previous query on launch + + Search query results without introducing a delay to wait for more input + To: Keyboard Manager mapping keys view right header diff --git a/src/settings-ui/Settings.UI/Views/PowerLauncherPage.xaml b/src/settings-ui/Settings.UI/Views/PowerLauncherPage.xaml index f0b079536f1..e1d33349887 100644 --- a/src/settings-ui/Settings.UI/Views/PowerLauncherPage.xaml +++ b/src/settings-ui/Settings.UI/Views/PowerLauncherPage.xaml @@ -106,7 +106,10 @@ - + + + +