From eb2b8d06a1141f25ccebbdf8384341773d3e0118 Mon Sep 17 00:00:00 2001
From: Jack251970 <1160210343@qq.com>
Date: Sun, 6 Jul 2025 21:15:00 +0800
Subject: [PATCH] Refactor CustomQueryHotkeySetting control
---
Flow.Launcher/CustomQueryHotkeySetting.xaml | 18 ++++-
.../CustomQueryHotkeySetting.xaml.cs | 72 +++++++------------
Flow.Launcher/Languages/en.xaml | 4 +-
.../ViewModels/SettingsPaneHotkeyViewModel.cs | 38 ++++++++--
4 files changed, 77 insertions(+), 55 deletions(-)
diff --git a/Flow.Launcher/CustomQueryHotkeySetting.xaml b/Flow.Launcher/CustomQueryHotkeySetting.xaml
index 0171e6d79..9575f8121 100644
--- a/Flow.Launcher/CustomQueryHotkeySetting.xaml
+++ b/Flow.Launcher/CustomQueryHotkeySetting.xaml
@@ -119,7 +119,8 @@
Grid.Column="1"
Margin="10"
HorizontalAlignment="Stretch"
- VerticalAlignment="Center" />
+ VerticalAlignment="Center"
+ Text="{Binding ActionKeyword}" />
diff --git a/Flow.Launcher/CustomQueryHotkeySetting.xaml.cs b/Flow.Launcher/CustomQueryHotkeySetting.xaml.cs
index 77febde9d..685fdf00a 100644
--- a/Flow.Launcher/CustomQueryHotkeySetting.xaml.cs
+++ b/Flow.Launcher/CustomQueryHotkeySetting.xaml.cs
@@ -1,73 +1,52 @@
-using System.Collections.ObjectModel;
-using System.Linq;
-using System.Windows;
-using System.Windows.Input;
+using System.Windows;
using System.Windows.Controls;
-using Flow.Launcher.Helper;
+using System.Windows.Input;
using Flow.Launcher.Infrastructure.UserSettings;
namespace Flow.Launcher
{
public partial class CustomQueryHotkeySetting : Window
{
- private readonly Settings _settings;
+ public string Hotkey { get; set; } = string.Empty;
+ public string ActionKeyword { get; set; } = string.Empty;
- private bool update;
- private CustomPluginHotkey updateCustomHotkey;
+ private readonly bool update;
+ private readonly CustomPluginHotkey originalCustomHotkey;
- public CustomQueryHotkeySetting(Settings settings)
+ public CustomQueryHotkeySetting()
{
- _settings = settings;
InitializeComponent();
+ lblAdd.Visibility = Visibility.Visible;
+ }
+
+ public CustomQueryHotkeySetting(CustomPluginHotkey hotkey)
+ {
+ originalCustomHotkey = hotkey;
+ update = true;
+ ActionKeyword = originalCustomHotkey.ActionKeyword;
+ InitializeComponent();
+ lblUpdate.Visibility = Visibility.Visible;
+ HotkeyControl.SetHotkey(originalCustomHotkey.Hotkey, false);
}
private void BtnCancel_OnClick(object sender, RoutedEventArgs e)
{
+ DialogResult = false;
Close();
}
private void btnAdd_OnClick(object sender, RoutedEventArgs e)
{
- if (!update)
+ Hotkey = HotkeyControl.CurrentHotkey.ToString();
+
+ if (string.IsNullOrEmpty(Hotkey) && string.IsNullOrEmpty(ActionKeyword))
{
- _settings.CustomPluginHotkeys ??= new ObservableCollection();
-
- var pluginHotkey = new CustomPluginHotkey
- {
- Hotkey = HotkeyControl.CurrentHotkey.ToString(), ActionKeyword = tbAction.Text
- };
- _settings.CustomPluginHotkeys.Add(pluginHotkey);
-
- HotKeyMapper.SetCustomQueryHotkey(pluginHotkey);
- }
- else
- {
- var oldHotkey = updateCustomHotkey.Hotkey;
- updateCustomHotkey.ActionKeyword = tbAction.Text;
- updateCustomHotkey.Hotkey = HotkeyControl.CurrentHotkey.ToString();
- //remove origin hotkey
- HotKeyMapper.RemoveHotkey(oldHotkey);
- HotKeyMapper.SetCustomQueryHotkey(updateCustomHotkey);
- }
-
- Close();
- }
-
- public void UpdateItem(CustomPluginHotkey item)
- {
- updateCustomHotkey = _settings.CustomPluginHotkeys.FirstOrDefault(o =>
- o.ActionKeyword == item.ActionKeyword && o.Hotkey == item.Hotkey);
- if (updateCustomHotkey == null)
- {
- App.API.ShowMsgBox(App.API.GetTranslation("invalidPluginHotkey"));
- Close();
+ App.API.ShowMsgBox(App.API.GetTranslation("emptyPluginHotkey"));
return;
}
- tbAction.Text = updateCustomHotkey.ActionKeyword;
- HotkeyControl.SetHotkey(updateCustomHotkey.Hotkey, false);
- update = true;
- lblAdd.Text = App.API.GetTranslation("update");
+ DialogResult = !update || originalCustomHotkey.Hotkey != Hotkey || originalCustomHotkey.ActionKeyword != ActionKeyword;
+ Close();
}
private void BtnTestActionKeyword_OnClick(object sender, RoutedEventArgs e)
@@ -79,6 +58,7 @@ namespace Flow.Launcher
private void cmdEsc_OnPress(object sender, ExecutedRoutedEventArgs e)
{
+ DialogResult = false;
Close();
}
diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml
index bd4cbd282..a6ec4718f 100644
--- a/Flow.Launcher/Languages/en.xaml
+++ b/Flow.Launcher/Languages/en.xaml
@@ -429,13 +429,14 @@
Press a custom hotkey to open Flow Launcher and input the specified query automatically.
Preview
Hotkey is unavailable, please select a new hotkey
- Invalid plugin hotkey
+ Hotkey is invalid
Update
Binding Hotkey
Current hotkey is unavailable.
This hotkey is reserved for "{0}" and can't be used. Please choose another hotkey.
This hotkey is already in use by "{0}". If you press "Overwrite", it will be removed from "{0}".
Press the keys you want to use for this function.
+ Hotkey and action keyword are empty
Custom Query Shortcut
@@ -444,6 +445,7 @@
Shortcut already exists, please enter a new Shortcut or edit the existing one.
Shortcut and/or its expansion is empty.
+ Shortcut is invalid
Save
diff --git a/Flow.Launcher/SettingPages/ViewModels/SettingsPaneHotkeyViewModel.cs b/Flow.Launcher/SettingPages/ViewModels/SettingsPaneHotkeyViewModel.cs
index 7a7c19dd3..fdc9ef530 100644
--- a/Flow.Launcher/SettingPages/ViewModels/SettingsPaneHotkeyViewModel.cs
+++ b/Flow.Launcher/SettingPages/ViewModels/SettingsPaneHotkeyViewModel.cs
@@ -69,15 +69,33 @@ public partial class SettingsPaneHotkeyViewModel : BaseModel
return;
}
- var window = new CustomQueryHotkeySetting(Settings);
- window.UpdateItem(item);
- window.ShowDialog();
+ var settingItem = Settings.CustomPluginHotkeys.FirstOrDefault(o =>
+ o.ActionKeyword == item.ActionKeyword && o.Hotkey == item.Hotkey);
+ if (settingItem == null)
+ {
+ App.API.ShowMsgBox(App.API.GetTranslation("invalidPluginHotkey"));
+ return;
+ }
+
+ var window = new CustomQueryHotkeySetting(settingItem);
+ if (window.ShowDialog() is not true) return;
+
+ var index = Settings.CustomPluginHotkeys.IndexOf(settingItem);
+ Settings.CustomPluginHotkeys[index] = new CustomPluginHotkey(window.Hotkey, window.ActionKeyword);
+ HotKeyMapper.RemoveHotkey(settingItem.Hotkey); // remove origin hotkey
+ HotKeyMapper.SetCustomQueryHotkey(Settings.CustomPluginHotkeys[index]); // set new hotkey
}
[RelayCommand]
private void CustomHotkeyAdd()
{
- new CustomQueryHotkeySetting(Settings).ShowDialog();
+ var window = new CustomQueryHotkeySetting();
+ if (window.ShowDialog() is true)
+ {
+ var customHotkey = new CustomPluginHotkey(window.Hotkey, window.ActionKeyword);
+ Settings.CustomPluginHotkeys.Add(customHotkey);
+ HotKeyMapper.SetCustomQueryHotkey(customHotkey); // set new hotkey
+ }
}
[RelayCommand]
@@ -114,10 +132,18 @@ public partial class SettingsPaneHotkeyViewModel : BaseModel
return;
}
- var window = new CustomShortcutSetting(item.Key, item.Value, this);
+ var settingItem = Settings.CustomShortcuts.FirstOrDefault(o =>
+ o.Key == item.Key && o.Value == item.Value);
+ if (settingItem == null)
+ {
+ App.API.ShowMsgBox(App.API.GetTranslation("invalidShortcut"));
+ return;
+ }
+
+ var window = new CustomShortcutSetting(settingItem.Key, settingItem.Value, this);
if (window.ShowDialog() is not true) return;
- var index = Settings.CustomShortcuts.IndexOf(item);
+ var index = Settings.CustomShortcuts.IndexOf(settingItem);
Settings.CustomShortcuts[index] = new CustomShortcutModel(window.Key, window.Value);
}