Skip to content

Commit

Permalink
Address feedback and allow configuring delay
Browse files Browse the repository at this point in the history
  • Loading branch information
jaimecbernardo committed Jun 12, 2022
1 parent b540f9d commit 79a32f7
Show file tree
Hide file tree
Showing 8 changed files with 110 additions and 33 deletions.
20 changes: 10 additions & 10 deletions src/modules/launcher/PowerLauncher/MainWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -162,15 +162,15 @@ private void OnLoaded(object sender, RoutedEventArgs e)
SearchBox.QueryTextBox.DataContext = _viewModel;
SearchBox.QueryTextBox.PreviewKeyDown += Launcher_KeyDown;

SetupSearchTextBoxReactiveness(_viewModel.GetSearchQueryResultsWithoutDelaySetting());
SetupSearchTextBoxReactiveness(_viewModel.GetSearchQueryResultsWithDelaySetting(), _viewModel.GetSearchInputDelaySetting());
_viewModel.RegisterSettingsChangeListener(
(s, prop_e) =>
{
if (prop_e.PropertyName == nameof(PowerToysRunSettings.SearchQueryResultsWithoutDelay))
if (prop_e.PropertyName == nameof(PowerToysRunSettings.SearchQueryResultsWithDelay) || prop_e.PropertyName == nameof(PowerToysRunSettings.SearchInputDelay))
{
Application.Current.Dispatcher.Invoke(() =>
{
SetupSearchTextBoxReactiveness(_viewModel.GetSearchQueryResultsWithoutDelaySetting());
SetupSearchTextBoxReactiveness(_viewModel.GetSearchQueryResultsWithDelaySetting(), _viewModel.GetSearchInputDelaySetting());
});
}
});
Expand All @@ -194,7 +194,7 @@ private void OnLoaded(object sender, RoutedEventArgs e)
BringProcessToForeground();
}

private void SetupSearchTextBoxReactiveness(bool showResultsImmediately)
private void SetupSearchTextBoxReactiveness(bool showResultsWithDelay, int searchInputDelayMs)
{
if (_reactiveSubscription != null)
{
Expand All @@ -204,20 +204,20 @@ private void SetupSearchTextBoxReactiveness(bool showResultsImmediately)

SearchBox.QueryTextBox.TextChanged -= QueryTextBox_TextChanged;

if (showResultsImmediately)
{
SearchBox.QueryTextBox.TextChanged += QueryTextBox_TextChanged;
}
else
if (showResultsWithDelay)
{
_reactiveSubscription = Observable.FromEventPattern<TextChangedEventHandler, TextChangedEventArgs>(
add => SearchBox.QueryTextBox.TextChanged += add,
remove => SearchBox.QueryTextBox.TextChanged -= remove)
.Do(@event => ClearAutoCompleteText((TextBox)@event.Sender))
.Throttle(TimeSpan.FromMilliseconds(150))
.Throttle(TimeSpan.FromMilliseconds(searchInputDelayMs))
.Do(@event => Dispatcher.InvokeAsync(() => PerformSearchQuery((TextBox)@event.Sender)))
.Subscribe();
}
else
{
SearchBox.QueryTextBox.TextChanged += QueryTextBox_TextChanged;
}
}

private void SuggestionsList_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
Expand Down
9 changes: 7 additions & 2 deletions src/modules/launcher/PowerLauncher/SettingsReader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -105,9 +105,14 @@ public void ReadSettings()
_settings.UseCentralizedKeyboardHook = overloadSettings.Properties.UseCentralizedKeyboardHook;
}

if (_settings.SearchQueryResultsWithoutDelay != overloadSettings.Properties.SearchQueryResultsWithoutDelay)
if (_settings.SearchQueryResultsWithDelay != overloadSettings.Properties.SearchQueryResultsWithDelay)
{
_settings.SearchQueryResultsWithoutDelay = overloadSettings.Properties.SearchQueryResultsWithoutDelay;
_settings.SearchQueryResultsWithDelay = overloadSettings.Properties.SearchQueryResultsWithDelay;
}

if (_settings.SearchInputDelay != overloadSettings.Properties.SearchInputDelay)
{
_settings.SearchInputDelay = overloadSettings.Properties.SearchInputDelay;
}

if (_settings.MaxResultsToShow != overloadSettings.Properties.MaximumNumberOfResults)
Expand Down
9 changes: 7 additions & 2 deletions src/modules/launcher/PowerLauncher/ViewModel/MainViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1110,9 +1110,14 @@ public long GetHotkeyEventTimeMs()
return recordedTime;
}

public bool GetSearchQueryResultsWithoutDelaySetting()
public bool GetSearchQueryResultsWithDelaySetting()
{
return _settings.SearchQueryResultsWithoutDelay;
return _settings.SearchQueryResultsWithDelay;
}

public int GetSearchInputDelaySetting()
{
return _settings.SearchInputDelay;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -61,21 +61,40 @@ public bool UseCentralizedKeyboardHook
}
}

private bool _searchQueryResultsWithoutDelay;
private bool _searchQueryResultsWithDelay = true;

public bool SearchQueryResultsWithoutDelay
public bool SearchQueryResultsWithDelay
{
get
{
return _searchQueryResultsWithoutDelay;
return _searchQueryResultsWithDelay;
}

set
{
if (_searchQueryResultsWithoutDelay != value)
if (_searchQueryResultsWithDelay != value)
{
_searchQueryResultsWithoutDelay = value;
OnPropertyChanged(nameof(SearchQueryResultsWithoutDelay));
_searchQueryResultsWithDelay = value;
OnPropertyChanged(nameof(SearchQueryResultsWithDelay));
}
}
}

private int _searchInputDelay = 150;

public int SearchInputDelay
{
get
{
return _searchInputDelay;
}

set
{
if (_searchInputDelay != value)
{
_searchInputDelay = value;
OnPropertyChanged(nameof(SearchInputDelay));
}
}
}
Expand Down
10 changes: 7 additions & 3 deletions src/settings-ui/Settings.UI.Library/PowerLauncherProperties.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,11 @@ public class PowerLauncherProperties
[JsonPropertyName("use_centralized_keyboard_hook")]
public bool UseCentralizedKeyboardHook { get; set; }

[JsonPropertyName("search_query_results_without_delay")]
public bool SearchQueryResultsWithoutDelay { get; set; }
[JsonPropertyName("search_query_results_with_delay")]
public bool SearchQueryResultsWithDelay { get; set; }

[JsonPropertyName("search_input_delay")]
public int SearchInputDelay { get; set; }

public PowerLauncherProperties()
{
Expand All @@ -68,7 +71,8 @@ public PowerLauncherProperties()
Theme = Theme.System;
Position = StartupPosition.Cursor;
UseCentralizedKeyboardHook = false;
SearchQueryResultsWithoutDelay = false;
SearchQueryResultsWithDelay = true;
SearchInputDelay = 150;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -296,18 +296,35 @@ public bool UseCentralizedKeyboardHook
}
}

public bool SearchQueryResultsWithoutDelay
public bool SearchQueryResultsWithDelay
{
get
{
return settings.Properties.SearchQueryResultsWithoutDelay;
return settings.Properties.SearchQueryResultsWithDelay;
}

set
{
if (settings.Properties.SearchQueryResultsWithoutDelay != value)
if (settings.Properties.SearchQueryResultsWithDelay != value)
{
settings.Properties.SearchQueryResultsWithoutDelay = value;
settings.Properties.SearchQueryResultsWithDelay = value;
UpdateSettings();
}
}
}

public int SearchInputDelay
{
get
{
return settings.Properties.SearchInputDelay;
}

set
{
if (settings.Properties.SearchInputDelay != value)
{
settings.Properties.SearchInputDelay = value;
UpdateSettings();
}
}
Expand Down
12 changes: 10 additions & 2 deletions src/settings-ui/Settings.UI/Strings/en-us/Resources.resw
Original file line number Diff line number Diff line change
Expand Up @@ -414,8 +414,16 @@
<data name="PowerLauncher_ClearInputOnLaunch.Content" xml:space="preserve">
<value>Clear the previous query on launch</value>
</data>
<data name="PowerLauncher_SearchQueryResultsWithoutDelay.Content" xml:space="preserve">
<value>Search query results without introducing a delay to wait for more input</value>
<data name="PowerLauncher_SearchQueryResultsWithDelay.Header" xml:space="preserve">
<value>Delay search</value>
<comment>This is about adding a delay to wait for more input before executing a search</comment>
</data>
<data name="PowerLauncher_SearchQueryResultsWithDelay.Description" xml:space="preserve">
<value>Add a delay to wait for more input before executing a search</value>
</data>
<data name="PowerLauncher_SearchInputDelayMs.Header" xml:space="preserve">
<value>Search delay (ms)</value>
<comment>ms = milliseconds</comment>
</data>
<data name="KeyboardManager_KeysMappingLayoutRightHeader.Text" xml:space="preserve">
<value>To:</value>
Expand Down
27 changes: 23 additions & 4 deletions src/settings-ui/Settings.UI/Views/PowerLauncherPage.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -106,10 +106,29 @@
</controls:Setting>
</controls:SettingExpander.Header>
<controls:SettingExpander.Content>
<StackPanel>
<CheckBox x:Uid="PowerLauncher_ClearInputOnLaunch" IsChecked="{x:Bind Mode=TwoWay, Path=ViewModel.ClearInputOnLaunch}" Margin="{StaticResource ExpanderSettingMargin}" />
<CheckBox x:Uid="PowerLauncher_SearchQueryResultsWithoutDelay" IsChecked="{x:Bind Mode=TwoWay, Path=ViewModel.SearchQueryResultsWithoutDelay}" Margin="{StaticResource ExpanderSettingMargin}" />
</StackPanel>
<CheckBox x:Uid="PowerLauncher_ClearInputOnLaunch" IsChecked="{x:Bind Mode=TwoWay, Path=ViewModel.ClearInputOnLaunch}" Margin="{StaticResource ExpanderSettingMargin}" />
</controls:SettingExpander.Content>
</controls:SettingExpander>
<controls:SettingExpander IsExpanded="True">
<controls:SettingExpander.Header>
<controls:Setting x:Uid="PowerLauncher_SearchQueryResultsWithDelay" Icon="&#xF182;" Style="{StaticResource ExpanderHeaderSettingStyle}" >
<controls:Setting.ActionContent>
<ToggleSwitch IsOn="{x:Bind Mode=TwoWay, Path=ViewModel.SearchQueryResultsWithDelay}"/>
</controls:Setting.ActionContent>
</controls:Setting>
</controls:SettingExpander.Header>
<controls:SettingExpander.Content>
<controls:Setting x:Uid="PowerLauncher_SearchInputDelayMs" IsEnabled="{x:Bind Mode=OneWay, Path=ViewModel.SearchQueryResultsWithDelay}" Style="{StaticResource ExpanderContentSettingStyle}">
<controls:Setting.ActionContent>
<muxc:NumberBox Minimum="0"
Value="{x:Bind Mode=TwoWay, Path=ViewModel.SearchInputDelay}"
MinWidth="{StaticResource SettingActionControlMinWidth}"
SpinButtonPlacementMode="Compact"
HorizontalAlignment="Left"
SmallChange="10"
LargeChange="50"/>
</controls:Setting.ActionContent>
</controls:Setting>
</controls:SettingExpander.Content>
</controls:SettingExpander>
</controls:SettingsGroup>
Expand Down

0 comments on commit 79a32f7

Please sign in to comment.