mirror of
https://github.com/Flow-Launcher/Flow.Launcher.git
synced 2026-03-11 08:54:32 +00:00
commit
e69b454139
4 changed files with 87 additions and 48 deletions
|
|
@ -6,6 +6,8 @@ using NHotkey.Wpf;
|
||||||
using Flow.Launcher.Core.Resource;
|
using Flow.Launcher.Core.Resource;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using Flow.Launcher.ViewModel;
|
using Flow.Launcher.ViewModel;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Threading;
|
||||||
|
|
||||||
namespace Flow.Launcher.Helper
|
namespace Flow.Launcher.Helper
|
||||||
{
|
{
|
||||||
|
|
@ -19,10 +21,15 @@ namespace Flow.Launcher.Helper
|
||||||
mainViewModel = mainVM;
|
mainViewModel = mainVM;
|
||||||
settings = mainViewModel._settings;
|
settings = mainViewModel._settings;
|
||||||
|
|
||||||
SetHotkey(settings.Hotkey, OnHotkey);
|
SetHotkey(settings.Hotkey, OnToggleHotkey);
|
||||||
LoadCustomPluginHotkey();
|
LoadCustomPluginHotkey();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal static void OnToggleHotkey(object sender, HotkeyEventArgs args)
|
||||||
|
{
|
||||||
|
mainViewModel.ToggleFlowLauncher();
|
||||||
|
}
|
||||||
|
|
||||||
private static void SetHotkey(string hotkeyStr, EventHandler<HotkeyEventArgs> action)
|
private static void SetHotkey(string hotkeyStr, EventHandler<HotkeyEventArgs> action)
|
||||||
{
|
{
|
||||||
var hotkey = new HotkeyModel(hotkeyStr);
|
var hotkey = new HotkeyModel(hotkeyStr);
|
||||||
|
|
@ -53,44 +60,6 @@ namespace Flow.Launcher.Helper
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static void OnHotkey(object sender, HotkeyEventArgs e)
|
|
||||||
{
|
|
||||||
if (!ShouldIgnoreHotkeys())
|
|
||||||
{
|
|
||||||
UpdateLastQUeryMode();
|
|
||||||
|
|
||||||
mainViewModel.ToggleFlowLauncher();
|
|
||||||
e.Handled = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Checks if Flow Launcher should ignore any hotkeys
|
|
||||||
/// </summary>
|
|
||||||
private static bool ShouldIgnoreHotkeys()
|
|
||||||
{
|
|
||||||
return settings.IgnoreHotkeysOnFullscreen && WindowsInteropHelper.IsWindowFullscreen();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void UpdateLastQUeryMode()
|
|
||||||
{
|
|
||||||
switch(settings.LastQueryMode)
|
|
||||||
{
|
|
||||||
case LastQueryMode.Empty:
|
|
||||||
mainViewModel.ChangeQueryText(string.Empty);
|
|
||||||
break;
|
|
||||||
case LastQueryMode.Preserved:
|
|
||||||
mainViewModel.LastQuerySelected = true;
|
|
||||||
break;
|
|
||||||
case LastQueryMode.Selected:
|
|
||||||
mainViewModel.LastQuerySelected = false;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw new ArgumentException($"wrong LastQueryMode: <{settings.LastQueryMode}>");
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal static void LoadCustomPluginHotkey()
|
internal static void LoadCustomPluginHotkey()
|
||||||
{
|
{
|
||||||
if (settings.CustomPluginHotkeys == null)
|
if (settings.CustomPluginHotkeys == null)
|
||||||
|
|
@ -106,7 +75,7 @@ namespace Flow.Launcher.Helper
|
||||||
{
|
{
|
||||||
SetHotkey(hotkey.Hotkey, (s, e) =>
|
SetHotkey(hotkey.Hotkey, (s, e) =>
|
||||||
{
|
{
|
||||||
if (ShouldIgnoreHotkeys())
|
if (mainViewModel.ShouldIgnoreHotkeys())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
mainViewModel.MainWindowVisibility = Visibility.Visible;
|
mainViewModel.MainWindowVisibility = Visibility.Visible;
|
||||||
|
|
|
||||||
|
|
@ -262,7 +262,7 @@ namespace Flow.Launcher
|
||||||
{
|
{
|
||||||
if (_settings.HideWhenDeactive)
|
if (_settings.HideWhenDeactive)
|
||||||
{
|
{
|
||||||
Hide();
|
_viewModel.Hide();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ namespace Flow.Launcher
|
||||||
public readonly IPublicAPI API;
|
public readonly IPublicAPI API;
|
||||||
private Settings settings;
|
private Settings settings;
|
||||||
private SettingWindowViewModel viewModel;
|
private SettingWindowViewModel viewModel;
|
||||||
|
private static MainViewModel mainViewModel;
|
||||||
|
|
||||||
public SettingWindow(IPublicAPI api, SettingWindowViewModel viewModel)
|
public SettingWindow(IPublicAPI api, SettingWindowViewModel viewModel)
|
||||||
{
|
{
|
||||||
|
|
@ -126,7 +127,7 @@ namespace Flow.Launcher
|
||||||
if (HotkeyControl.CurrentHotkeyAvailable)
|
if (HotkeyControl.CurrentHotkeyAvailable)
|
||||||
{
|
{
|
||||||
|
|
||||||
HotKeyMapper.SetHotkey(HotkeyControl.CurrentHotkey, HotKeyMapper.OnHotkey);
|
HotKeyMapper.SetHotkey(HotkeyControl.CurrentHotkey, HotKeyMapper.OnToggleHotkey);
|
||||||
HotKeyMapper.RemoveHotkey(settings.Hotkey);
|
HotKeyMapper.RemoveHotkey(settings.Hotkey);
|
||||||
settings.Hotkey = HotkeyControl.CurrentHotkey.ToString();
|
settings.Hotkey = HotkeyControl.CurrentHotkey.ToString();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,8 @@ using Microsoft.VisualStudio.Threading;
|
||||||
using System.Threading.Channels;
|
using System.Threading.Channels;
|
||||||
using ISavable = Flow.Launcher.Plugin.ISavable;
|
using ISavable = Flow.Launcher.Plugin.ISavable;
|
||||||
using System.Windows.Threading;
|
using System.Windows.Threading;
|
||||||
|
using NHotkey;
|
||||||
|
|
||||||
|
|
||||||
namespace Flow.Launcher.ViewModel
|
namespace Flow.Launcher.ViewModel
|
||||||
{
|
{
|
||||||
|
|
@ -108,7 +110,9 @@ namespace Flow.Launcher.ViewModel
|
||||||
}
|
}
|
||||||
|
|
||||||
Log.Error("MainViewModel", "Unexpected ResultViewUpdate ends");
|
Log.Error("MainViewModel", "Unexpected ResultViewUpdate ends");
|
||||||
};
|
}
|
||||||
|
|
||||||
|
;
|
||||||
|
|
||||||
void continueAction(Task t)
|
void continueAction(Task t)
|
||||||
{
|
{
|
||||||
|
|
@ -145,6 +149,24 @@ namespace Flow.Launcher.ViewModel
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void UpdateLastQUeryMode()
|
||||||
|
{
|
||||||
|
switch (_settings.LastQueryMode)
|
||||||
|
{
|
||||||
|
case LastQueryMode.Empty:
|
||||||
|
ChangeQueryText(string.Empty);
|
||||||
|
break;
|
||||||
|
case LastQueryMode.Preserved:
|
||||||
|
LastQuerySelected = true;
|
||||||
|
break;
|
||||||
|
case LastQueryMode.Selected:
|
||||||
|
LastQuerySelected = false;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new ArgumentException($"wrong LastQueryMode: <{_settings.LastQueryMode}>");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void InitializeKeyCommands()
|
private void InitializeKeyCommands()
|
||||||
{
|
{
|
||||||
|
|
@ -156,7 +178,18 @@ namespace Flow.Launcher.ViewModel
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
MainWindowVisibility = Visibility.Collapsed;
|
Hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
ClearQueryCommand = new RelayCommand(_ =>
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(QueryText))
|
||||||
|
{
|
||||||
|
ChangeQueryText(string.Empty);
|
||||||
|
|
||||||
|
// Push Event to UI SystemQuery has changed
|
||||||
|
//OnPropertyChanged(nameof(SystemQueryText));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -194,7 +227,7 @@ namespace Flow.Launcher.ViewModel
|
||||||
|
|
||||||
if (hideWindow)
|
if (hideWindow)
|
||||||
{
|
{
|
||||||
MainWindowVisibility = Visibility.Collapsed;
|
Hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SelectedIsFromQueryResults())
|
if (SelectedIsFromQueryResults())
|
||||||
|
|
@ -244,7 +277,7 @@ namespace Flow.Launcher.ViewModel
|
||||||
Owner = Application.Current.MainWindow
|
Owner = Application.Current.MainWindow
|
||||||
};
|
};
|
||||||
|
|
||||||
MainWindowVisibility = Visibility.Collapsed;
|
Hide();
|
||||||
|
|
||||||
PluginManager
|
PluginManager
|
||||||
.ReloadData()
|
.ReloadData()
|
||||||
|
|
@ -343,7 +376,6 @@ namespace Flow.Launcher.ViewModel
|
||||||
}
|
}
|
||||||
|
|
||||||
public Visibility ProgressBarVisibility { get; set; }
|
public Visibility ProgressBarVisibility { get; set; }
|
||||||
|
|
||||||
public Visibility MainWindowVisibility { get; set; }
|
public Visibility MainWindowVisibility { get; set; }
|
||||||
|
|
||||||
public ICommand EscCommand { get; set; }
|
public ICommand EscCommand { get; set; }
|
||||||
|
|
@ -357,6 +389,7 @@ namespace Flow.Launcher.ViewModel
|
||||||
public ICommand LoadHistoryCommand { get; set; }
|
public ICommand LoadHistoryCommand { get; set; }
|
||||||
public ICommand OpenResultCommand { get; set; }
|
public ICommand OpenResultCommand { get; set; }
|
||||||
public ICommand ReloadPluginDataCommand { get; set; }
|
public ICommand ReloadPluginDataCommand { get; set; }
|
||||||
|
public ICommand ClearQueryCommand { get; private set; }
|
||||||
|
|
||||||
public string OpenResultCommandModifiers { get; private set; }
|
public string OpenResultCommandModifiers { get; private set; }
|
||||||
|
|
||||||
|
|
@ -668,7 +701,7 @@ namespace Flow.Launcher.ViewModel
|
||||||
OpenResultCommandModifiers = _settings.OpenResultModifiers ?? DefaultOpenResultModifiers;
|
OpenResultCommandModifiers = _settings.OpenResultModifiers ?? DefaultOpenResultModifiers;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void ToggleFlowLauncher()
|
public async void ToggleFlowLauncher()
|
||||||
{
|
{
|
||||||
if (MainWindowVisibility != Visibility.Visible)
|
if (MainWindowVisibility != Visibility.Visible)
|
||||||
{
|
{
|
||||||
|
|
@ -676,12 +709,48 @@ namespace Flow.Launcher.ViewModel
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
switch (_settings.LastQueryMode)
|
||||||
|
{
|
||||||
|
case LastQueryMode.Empty:
|
||||||
|
ChangeQueryText(string.Empty);
|
||||||
|
Application.Current.MainWindow.Opacity = 0; // Trick for no delay
|
||||||
|
await Task.Delay(100);
|
||||||
|
Application.Current.MainWindow.Opacity = 1;
|
||||||
|
break;
|
||||||
|
case LastQueryMode.Preserved:
|
||||||
|
LastQuerySelected = true;
|
||||||
|
break;
|
||||||
|
case LastQueryMode.Selected:
|
||||||
|
LastQuerySelected = false;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new ArgumentException($"wrong LastQueryMode: <{_settings.LastQueryMode}>");
|
||||||
|
}
|
||||||
MainWindowVisibility = Visibility.Collapsed;
|
MainWindowVisibility = Visibility.Collapsed;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Hide()
|
||||||
|
{
|
||||||
|
if (MainWindowVisibility != Visibility.Collapsed)
|
||||||
|
{
|
||||||
|
ToggleFlowLauncher();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Checks if Flow Launcher should ignore any hotkeys
|
||||||
|
/// </summary>
|
||||||
|
public bool ShouldIgnoreHotkeys()
|
||||||
|
{
|
||||||
|
return _settings.IgnoreHotkeysOnFullscreen && WindowsInteropHelper.IsWindowFullscreen();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#region Public Methods
|
#region Public Methods
|
||||||
|
|
||||||
public void Save()
|
public void Save()
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue