Skip to content

Commit 3b1e014

Browse files
committed
Add change support for Flow Launcher hotkeys
1 parent e41eccc commit 3b1e014

File tree

1 file changed

+85
-0
lines changed

1 file changed

+85
-0
lines changed

Flow.Launcher/Helper/HotKeyMapper.cs

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.ComponentModel;
34
using System.Linq;
45
using System.Windows;
56
using System.Windows.Input;
@@ -37,6 +38,8 @@ internal static void Initialize()
3738
_settings = Ioc.Default.GetService<Settings>();
3839

3940
InitializeRegisteredHotkeys();
41+
42+
_settings.PropertyChanged += Settings_PropertyChanged;
4043
}
4144

4245
private static void InitializeRegisteredHotkeys()
@@ -159,6 +162,88 @@ private static void InitializeRegisteredHotkeys()
159162
App.API.LogDebug(ClassName, $"Initialize {_settings.RegisteredHotkeys.Count} hotkeys:\n[\n\t{string.Join(",\n\t", _settings.RegisteredHotkeys)}\n]");
160163
}
161164

165+
private static void Settings_PropertyChanged(object sender, PropertyChangedEventArgs e)
166+
{
167+
switch (e.PropertyName)
168+
{
169+
// Flow Launcher global hotkeys
170+
case nameof(_settings.Hotkey):
171+
ChangeRegisteredHotkey(RegisteredHotkeyType.Toggle, _settings.Hotkey);
172+
break;
173+
174+
// Flow Launcher window hotkeys
175+
case nameof(_settings.PreviewHotkey):
176+
ChangeRegisteredHotkey(RegisteredHotkeyType.Preview, _settings.PreviewHotkey);
177+
break;
178+
case nameof(_settings.AutoCompleteHotkey):
179+
ChangeRegisteredHotkey(RegisteredHotkeyType.AutoComplete, _settings.AutoCompleteHotkey);
180+
break;
181+
case nameof(_settings.AutoCompleteHotkey2):
182+
ChangeRegisteredHotkey(RegisteredHotkeyType.AutoComplete2, _settings.AutoCompleteHotkey2);
183+
break;
184+
case nameof(_settings.SelectNextItemHotkey):
185+
ChangeRegisteredHotkey(RegisteredHotkeyType.SelectNextItem, _settings.SelectNextItemHotkey);
186+
break;
187+
case nameof(_settings.SelectNextItemHotkey2):
188+
ChangeRegisteredHotkey(RegisteredHotkeyType.SelectNextItem2, _settings.SelectNextItemHotkey2);
189+
break;
190+
case nameof(_settings.SelectPrevItemHotkey):
191+
ChangeRegisteredHotkey(RegisteredHotkeyType.SelectPrevItem, _settings.SelectPrevItemHotkey);
192+
break;
193+
case nameof(_settings.SelectPrevItemHotkey2):
194+
ChangeRegisteredHotkey(RegisteredHotkeyType.SelectPrevItem2, _settings.SelectPrevItemHotkey2);
195+
break;
196+
case nameof(_settings.SettingWindowHotkey):
197+
ChangeRegisteredHotkey(RegisteredHotkeyType.SettingWindow, _settings.SettingWindowHotkey);
198+
break;
199+
case nameof(_settings.OpenHistoryHotkey):
200+
ChangeRegisteredHotkey(RegisteredHotkeyType.OpenHistory, _settings.OpenHistoryHotkey);
201+
break;
202+
case nameof(_settings.OpenContextMenuHotkey):
203+
ChangeRegisteredHotkey(RegisteredHotkeyType.OpenContextMenu, _settings.OpenContextMenuHotkey);
204+
break;
205+
case nameof(_settings.SelectNextPageHotkey):
206+
ChangeRegisteredHotkey(RegisteredHotkeyType.SelectNextPage, _settings.SelectNextPageHotkey);
207+
break;
208+
case nameof(_settings.SelectPrevPageHotkey):
209+
ChangeRegisteredHotkey(RegisteredHotkeyType.SelectPrevPage, _settings.SelectPrevPageHotkey);
210+
break;
211+
case nameof(_settings.CycleHistoryUpHotkey):
212+
ChangeRegisteredHotkey(RegisteredHotkeyType.CycleHistoryUp, _settings.CycleHistoryUpHotkey);
213+
break;
214+
case nameof(_settings.CycleHistoryDownHotkey):
215+
ChangeRegisteredHotkey(RegisteredHotkeyType.CycleHistoryDown, _settings.CycleHistoryDownHotkey);
216+
break;
217+
}
218+
}
219+
220+
private static void ChangeRegisteredHotkey(RegisteredHotkeyType registeredType, string newHotkeyStr)
221+
{
222+
var newHotkey = new HotkeyModel(newHotkeyStr);
223+
ChangeRegisteredHotkey(registeredType, newHotkey);
224+
}
225+
226+
private static void ChangeRegisteredHotkey(RegisteredHotkeyType registeredType, HotkeyModel newHotkey)
227+
{
228+
// Find the old registered hotkey data item
229+
var registeredHotkeyData = _settings.RegisteredHotkeys.FirstOrDefault(h => h.RegisteredType == registeredType);
230+
231+
// If it is not found, return
232+
if (registeredHotkeyData == null)
233+
{
234+
return;
235+
}
236+
237+
// Remove the old hotkey
238+
RemoveHotkey(registeredHotkeyData);
239+
240+
// Update the hotkey string
241+
registeredHotkeyData.Hotkey = newHotkey;
242+
243+
// Set the new hotkey
244+
SetHotkey(registeredHotkeyData);
245+
}
246+
162247
#endregion
163248

164249
// TODO: Deprecated

0 commit comments

Comments
 (0)