From d41dd780ce631d1ef0aa61dd53a68204bb85fc72 Mon Sep 17 00:00:00 2001 From: Spencer Hedrick Date: Sat, 9 Oct 2021 02:36:38 -0700 Subject: [PATCH 001/107] add initial ShellRun support for JsonRPC --- Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs | 6 ++++++ Flow.Launcher/PublicAPIInstance.cs | 10 ++++++++++ 2 files changed, 16 insertions(+) diff --git a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs index d9cdf5581..3cadae176 100644 --- a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs +++ b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs @@ -29,6 +29,12 @@ namespace Flow.Launcher.Plugin /// void RestartApp(); + /// + /// Run a shell command or external program + /// + /// The command or program to run + void ShellRun(string cmd); + /// /// Save everything, all of Flow Launcher and plugins' data and settings /// diff --git a/Flow.Launcher/PublicAPIInstance.cs b/Flow.Launcher/PublicAPIInstance.cs index 6f995671d..c528b8229 100644 --- a/Flow.Launcher/PublicAPIInstance.cs +++ b/Flow.Launcher/PublicAPIInstance.cs @@ -103,6 +103,16 @@ namespace Flow.Launcher }); } + public void ShellRun(string cmd) + { + System.Diagnostics.Process process = new(); + var startInfo = process.StartInfo; + startInfo.FileName = "cmd.exe"; + startInfo.Arguments = $"/C {cmd}"; + startInfo.CreateNoWindow = true; + process.Start(); + } + public void StartLoadingBar() => _mainVM.ProgressBarVisibility = Visibility.Visible; public void StopLoadingBar() => _mainVM.ProgressBarVisibility = Visibility.Collapsed; From 342bf306ef27465671cdd575658b96901938c5a2 Mon Sep 17 00:00:00 2001 From: DB p Date: Fri, 12 Nov 2021 06:20:43 +0900 Subject: [PATCH 002/107] - Add Slide Up Animation - Chnage Toggle/Hide Code for animation - Change Tray Open menu to toggle --- Flow.Launcher/MainWindow.xaml | 319 +++++++++++++++-------- Flow.Launcher/MainWindow.xaml.cs | 44 +++- Flow.Launcher/ViewModel/MainViewModel.cs | 19 +- 3 files changed, 271 insertions(+), 111 deletions(-) diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml index daea406db..cf471beb7 100644 --- a/Flow.Launcher/MainWindow.xaml +++ b/Flow.Launcher/MainWindow.xaml @@ -1,105 +1,192 @@ - + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - + + - + - - - + + + - - + + - + @@ -121,49 +208,69 @@ - + - - + - - - + + + - + - - - + + + - - - + + + - + - - - + + + - - - - + + + + diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index 16e4be8a0..9b44c7b78 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -196,7 +196,7 @@ namespace Flow.Launcher Header = InternationalizationManager.Instance.GetTranslation("iconTrayExit") }; - open.Click += (o, e) => Visibility = Visibility.Visible; + open.Click += (o, e) => _viewModel.ToggleFlowLauncher(); settings.Click += (o, e) => App.API.OpenSettingDialog(); exit.Click += (o, e) => Close(); contextMenu.Items.Add(header); @@ -235,6 +235,48 @@ namespace Flow.Launcher isProgressBarStoryboardPaused = true; } + public void WindowAnimator() + { + InitializePosition(); + Storyboard sb = new Storyboard(); + var da = new DoubleAnimation + { + From = 0, + To = 1, + Duration = TimeSpan.FromSeconds(0.2), + FillBehavior = FillBehavior.Stop + }; + + var da2 = new DoubleAnimation + { + From = Top + 8, + To = Top, + Duration = TimeSpan.FromSeconds(0.2), + FillBehavior = FillBehavior.Stop + }; + + var da3 = new DoubleAnimation + { + From = Left, + To = Left, + Duration = TimeSpan.FromSeconds(0.1), + FillBehavior = FillBehavior.Stop + }; + System.Diagnostics.Debug.WriteLine("Left: " + Left); + System.Diagnostics.Debug.WriteLine("Top: " + Top); + Storyboard.SetTargetProperty(da3, new PropertyPath(Window.LeftProperty)); + sb.Children.Add(da3); + Storyboard.SetTarget(da, this); + Storyboard.SetTargetProperty(da, new PropertyPath(Window.OpacityProperty)); + Storyboard.SetTargetProperty(da2, new PropertyPath(Window.TopProperty)); + + sb.Children.Add(da); + sb.Children.Add(da2); + + sb.Begin(FlowMainWindow); + } + + private void OnMouseDown(object sender, MouseButtonEventArgs e) { if (e.ChangedButton == MouseButton.Left) DragMove(); diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs index 547228ee3..02f2908d2 100644 --- a/Flow.Launcher/ViewModel/MainViewModel.cs +++ b/Flow.Launcher/ViewModel/MainViewModel.cs @@ -380,6 +380,8 @@ namespace Flow.Launcher.ViewModel public Visibility ProgressBarVisibility { get; set; } public Visibility MainWindowVisibility { get; set; } + public double MainWindowOpacity { get; set; } = 1; + public bool WinToggleStatus { get; set; } = true; public double MainWindowWidth => _settings.WindowSize; @@ -708,9 +710,12 @@ namespace Flow.Launcher.ViewModel public void ToggleFlowLauncher() { - if (MainWindowVisibility != Visibility.Visible) + if (WinToggleStatus != true) { MainWindowVisibility = Visibility.Visible; + ((MainWindow)Application.Current.MainWindow).WindowAnimator(); + WinToggleStatus = true; + MainWindowOpacity = 1; } else { @@ -720,24 +725,30 @@ namespace Flow.Launcher.ViewModel public async void Hide() { + MainWindowOpacity = 0; 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; + MainWindowOpacity = 0; // Trick for no delay + await Task.Delay(100); //Time for change to opacity break; case LastQueryMode.Preserved: + MainWindowOpacity = 0; + await Task.Delay(100); LastQuerySelected = true; break; case LastQueryMode.Selected: + MainWindowOpacity = 0; + await Task.Delay(100); LastQuerySelected = false; break; default: throw new ArgumentException($"wrong LastQueryMode: <{_settings.LastQueryMode}>"); } + WinToggleStatus = false; MainWindowVisibility = Visibility.Collapsed; + } #endregion From a4e941b954aefe8cf900c3ac0e281e2d6cf94117 Mon Sep 17 00:00:00 2001 From: DB p Date: Fri, 12 Nov 2021 07:49:20 +0900 Subject: [PATCH 003/107] Change Property toggle base to Var from visibility --- Flow.Launcher/MainWindow.xaml.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index 9b44c7b78..a0662e9ed 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -52,6 +52,8 @@ namespace Flow.Launcher private async void OnClosing(object sender, CancelEventArgs e) { + _settings.WindowTop = Top; + _settings.WindowLeft = Left; _notifyIcon.Visible = false; _viewModel.Save(); e.Cancel = true; @@ -79,9 +81,9 @@ namespace Flow.Launcher { switch (e.PropertyName) { - case nameof(MainViewModel.MainWindowVisibility): + case nameof(MainViewModel.WinToggleStatus): { - if (_viewModel.MainWindowVisibility == Visibility.Visible) + if (_viewModel.WinToggleStatus == true) { Activate(); QueryTextBox.Focus(); @@ -157,7 +159,7 @@ namespace Flow.Launcher Top = WindowTop(); Left = WindowLeft(); _settings.WindowTop = Top; - _settings.WindowLeft = Left; + _settings.WindowLeft = Left; } private void UpdateNotifyIconText() @@ -237,7 +239,6 @@ namespace Flow.Launcher public void WindowAnimator() { - InitializePosition(); Storyboard sb = new Storyboard(); var da = new DoubleAnimation { From 5a969b212f1b178ffade0df888aa4e983c5ea717 Mon Sep 17 00:00:00 2001 From: DB p Date: Fri, 12 Nov 2021 09:18:16 +0900 Subject: [PATCH 004/107] Add InitPosition in WindowAnimator --- Flow.Launcher/MainWindow.xaml.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index a0662e9ed..4b717298d 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -239,6 +239,7 @@ namespace Flow.Launcher public void WindowAnimator() { + InitializePosition(); Storyboard sb = new Storyboard(); var da = new DoubleAnimation { From f1222f948f1eb81a01823cfaeedf30e7c2d6f4d5 Mon Sep 17 00:00:00 2001 From: DB p Date: Fri, 12 Nov 2021 12:14:37 +0900 Subject: [PATCH 005/107] Fix Positioning when turn on remember last launch position --- Flow.Launcher/MainWindow.xaml.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index 4b717298d..61035da74 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -239,7 +239,8 @@ namespace Flow.Launcher public void WindowAnimator() { - InitializePosition(); + //InitializePosition(); + UpdatePosition(); Storyboard sb = new Storyboard(); var da = new DoubleAnimation { From 6d8ee6411775e4dfa7341601285820dfb0542379 Mon Sep 17 00:00:00 2001 From: DB p Date: Fri, 12 Nov 2021 13:02:59 +0900 Subject: [PATCH 006/107] - Change trigger animation Timing - Change HideOnStartup using Animator --- Flow.Launcher/App.xaml.cs | 10 +++++++++- Flow.Launcher/ViewModel/MainViewModel.cs | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher/App.xaml.cs b/Flow.Launcher/App.xaml.cs index 8c869e941..52faf8658 100644 --- a/Flow.Launcher/App.xaml.cs +++ b/Flow.Launcher/App.xaml.cs @@ -101,7 +101,15 @@ namespace Flow.Launcher API.SaveAppAllSettings(); - _mainVM.MainWindowVisibility = _settings.HideOnStartup ? Visibility.Hidden : Visibility.Visible; + if (_settings.HideOnStartup) + { + _mainVM.Hide(); + } + else + { + window.WindowAnimator(); + } + Log.Info("|App.OnStartup|End Flow Launcher startup ---------------------------------------------------- "); }); } diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs index 02f2908d2..4509d1fce 100644 --- a/Flow.Launcher/ViewModel/MainViewModel.cs +++ b/Flow.Launcher/ViewModel/MainViewModel.cs @@ -713,8 +713,8 @@ namespace Flow.Launcher.ViewModel if (WinToggleStatus != true) { MainWindowVisibility = Visibility.Visible; - ((MainWindow)Application.Current.MainWindow).WindowAnimator(); WinToggleStatus = true; + ((MainWindow)Application.Current.MainWindow).WindowAnimator(); MainWindowOpacity = 1; } else From 037c3439b5b3d6f54e1e1a3ecbdb30d9f4508456 Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 14 Nov 2021 02:09:25 +0900 Subject: [PATCH 007/107] - Change InitializePosition for load setting - add Save Position in onclosing - Remove Debug Log write --- Flow.Launcher/MainWindow.xaml.cs | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index 61035da74..02a21a44c 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -87,7 +87,7 @@ namespace Flow.Launcher { Activate(); QueryTextBox.Focus(); - UpdatePosition(); + //UpdatePosition(); _settings.ActivateTimes++; if (!_viewModel.LastQuerySelected) { @@ -156,10 +156,22 @@ namespace Flow.Launcher private void InitializePosition() { + /* Top = WindowTop(); Left = WindowLeft(); _settings.WindowTop = Top; _settings.WindowLeft = Left; + */ + if (_settings.RememberLastLaunchLocation) + { + Left = _settings.WindowLeft; + Top = _settings.WindowTop; + } + else + { + Left = WindowLeft(); + Top = WindowTop(); + } } private void UpdateNotifyIconText() @@ -265,17 +277,13 @@ namespace Flow.Launcher Duration = TimeSpan.FromSeconds(0.1), FillBehavior = FillBehavior.Stop }; - System.Diagnostics.Debug.WriteLine("Left: " + Left); - System.Diagnostics.Debug.WriteLine("Top: " + Top); Storyboard.SetTargetProperty(da3, new PropertyPath(Window.LeftProperty)); - sb.Children.Add(da3); Storyboard.SetTarget(da, this); Storyboard.SetTargetProperty(da, new PropertyPath(Window.OpacityProperty)); Storyboard.SetTargetProperty(da2, new PropertyPath(Window.TopProperty)); - sb.Children.Add(da); sb.Children.Add(da2); - + sb.Children.Add(da3); sb.Begin(FlowMainWindow); } From 4a8696268d111dd744f0ea3399b6ae030be5b353 Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 14 Nov 2021 04:54:17 +0900 Subject: [PATCH 008/107] - Fix RememberLastPosition when Re-Excute --- Flow.Launcher/MainWindow.xaml | 1 + Flow.Launcher/MainWindow.xaml.cs | 33 +++++++++++++++++--------------- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml index cf471beb7..359ddc7e6 100644 --- a/Flow.Launcher/MainWindow.xaml +++ b/Flow.Launcher/MainWindow.xaml @@ -26,6 +26,7 @@ PreviewKeyDown="OnKeyDown" ResizeMode="NoResize" ShowInTaskbar="False" + SizeChanged="OnSizeChanged" SizeToContent="Height" Style="{DynamicResource WindowStyle}" Topmost="True" diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index 02a21a44c..b17749e64 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -42,6 +42,7 @@ namespace Flow.Launcher DataContext = mainVM; _viewModel = mainVM; _settings = settings; + InitializePosition(); InitializeComponent(); } @@ -69,10 +70,8 @@ namespace Flow.Launcher { // show notify icon when flowlauncher is hidden InitializeNotifyIcon(); - WindowsInteropHelper.DisableControlBox(this); InitProgressbarAnimation(); - InitializePosition(); // since the default main window visibility is visible // so we need set focus during startup QueryTextBox.Focus(); @@ -85,9 +84,9 @@ namespace Flow.Launcher { if (_viewModel.WinToggleStatus == true) { + UpdatePosition(); Activate(); QueryTextBox.Focus(); - //UpdatePosition(); _settings.ActivateTimes++; if (!_viewModel.LastQuerySelected) { @@ -156,21 +155,15 @@ namespace Flow.Launcher private void InitializePosition() { - /* - Top = WindowTop(); - Left = WindowLeft(); - _settings.WindowTop = Top; - _settings.WindowLeft = Left; - */ if (_settings.RememberLastLaunchLocation) { - Left = _settings.WindowLeft; - Top = _settings.WindowTop; + this.Top = this._settings.WindowTop; + this.Left = this._settings.WindowLeft; } else { - Left = WindowLeft(); - Top = WindowTop(); + this.Left = WindowLeft(); + this.Top = WindowTop(); } } @@ -251,7 +244,6 @@ namespace Flow.Launcher public void WindowAnimator() { - //InitializePosition(); UpdatePosition(); Storyboard sb = new Storyboard(); var da = new DoubleAnimation @@ -277,10 +269,10 @@ namespace Flow.Launcher Duration = TimeSpan.FromSeconds(0.1), FillBehavior = FillBehavior.Stop }; - Storyboard.SetTargetProperty(da3, new PropertyPath(Window.LeftProperty)); Storyboard.SetTarget(da, this); Storyboard.SetTargetProperty(da, new PropertyPath(Window.OpacityProperty)); Storyboard.SetTargetProperty(da2, new PropertyPath(Window.TopProperty)); + Storyboard.SetTargetProperty(da3, new PropertyPath(Window.LeftProperty)); sb.Children.Add(da); sb.Children.Add(da2); sb.Children.Add(da3); @@ -328,6 +320,7 @@ namespace Flow.Launcher private void OnDeactivated(object sender, EventArgs e) { + _viewModel.Save(); if (_settings.HideWhenDeactive) { _viewModel.Hide(); @@ -348,6 +341,16 @@ namespace Flow.Launcher } } + private void OnSizeChanged(object sender, SizeChangedEventArgs e) + { + if (_settings.RememberLastLaunchLocation) + { + return; + _settings.WindowLeft = Left; + _settings.WindowTop = Top; + } + } + private void OnLocationChanged(object sender, EventArgs e) { if (_settings.RememberLastLaunchLocation) From 6744e21775cc9b5cc70e5cc0f3c1061d1a804bdb Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Sat, 13 Nov 2021 14:48:46 -0600 Subject: [PATCH 009/107] Remove some unused code --- Flow.Launcher/MainWindow.xaml | 1 - Flow.Launcher/MainWindow.xaml.cs | 24 ++++-------------------- 2 files changed, 4 insertions(+), 21 deletions(-) diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml index 359ddc7e6..cf471beb7 100644 --- a/Flow.Launcher/MainWindow.xaml +++ b/Flow.Launcher/MainWindow.xaml @@ -26,7 +26,6 @@ PreviewKeyDown="OnKeyDown" ResizeMode="NoResize" ShowInTaskbar="False" - SizeChanged="OnSizeChanged" SizeToContent="Height" Style="{DynamicResource WindowStyle}" Topmost="True" diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index b17749e64..e6dc377a4 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -11,16 +11,11 @@ using Flow.Launcher.Core.Resource; using Flow.Launcher.Helper; using Flow.Launcher.Infrastructure.UserSettings; using Flow.Launcher.ViewModel; -using Microsoft.AspNetCore.Authorization; -using Application = System.Windows.Application; using Screen = System.Windows.Forms.Screen; using ContextMenuStrip = System.Windows.Forms.ContextMenuStrip; -using DataFormats = System.Windows.DataFormats; using DragEventArgs = System.Windows.DragEventArgs; using KeyEventArgs = System.Windows.Input.KeyEventArgs; -using MessageBox = System.Windows.MessageBox; using NotifyIcon = System.Windows.Forms.NotifyIcon; -using System.Windows.Interop; namespace Flow.Launcher { @@ -149,21 +144,19 @@ namespace Flow.Launcher break; } }; - - InitializePosition(); } private void InitializePosition() { if (_settings.RememberLastLaunchLocation) { - this.Top = this._settings.WindowTop; - this.Left = this._settings.WindowLeft; + Top = _settings.WindowTop; + Left = _settings.WindowLeft; } else { - this.Left = WindowLeft(); - this.Top = WindowTop(); + Left = WindowLeft(); + Top = WindowTop(); } } @@ -341,15 +334,6 @@ namespace Flow.Launcher } } - private void OnSizeChanged(object sender, SizeChangedEventArgs e) - { - if (_settings.RememberLastLaunchLocation) - { - return; - _settings.WindowLeft = Left; - _settings.WindowTop = Top; - } - } private void OnLocationChanged(object sender, EventArgs e) { From ca2d696791d676f7c584af0b1ee14b8ec7e63bd8 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Sat, 13 Nov 2021 15:16:02 -0600 Subject: [PATCH 010/107] Remove redundant animation and potential position change --- Flow.Launcher/MainWindow.xaml.cs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index e6dc377a4..db38f0fad 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -29,6 +29,7 @@ namespace Flow.Launcher private NotifyIcon _notifyIcon; private ContextMenu contextMenu; private MainViewModel _viewModel; + private bool _animating; #endregion @@ -37,8 +38,8 @@ namespace Flow.Launcher DataContext = mainVM; _viewModel = mainVM; _settings = settings; - InitializePosition(); InitializeComponent(); + InitializePosition(); } public MainWindow() @@ -180,7 +181,7 @@ namespace Flow.Launcher var header = new MenuItem { - Header = "Flow Launcher", + Header = "Flow Launcher", IsEnabled = false }; var open = new MenuItem @@ -237,6 +238,10 @@ namespace Flow.Launcher public void WindowAnimator() { + if (_animating) + return; + + _animating = true; UpdatePosition(); Storyboard sb = new Storyboard(); var da = new DoubleAnimation @@ -269,6 +274,7 @@ namespace Flow.Launcher sb.Children.Add(da); sb.Children.Add(da2); sb.Children.Add(da3); + sb.Completed += (_, _) => _animating = false; sb.Begin(FlowMainWindow); } @@ -322,6 +328,9 @@ namespace Flow.Launcher private void UpdatePosition() { + if (_animating) + return; + if (_settings.RememberLastLaunchLocation) { Left = _settings.WindowLeft; @@ -337,6 +346,8 @@ namespace Flow.Launcher private void OnLocationChanged(object sender, EventArgs e) { + if (_animating) + return; if (_settings.RememberLastLaunchLocation) { _settings.WindowLeft = Left; From 62eb1b6cff052df66a3e1540195581002187aa6c Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 14 Nov 2021 07:45:47 +0900 Subject: [PATCH 011/107] - Add Sound - Add Sound/Animation in Setting - Add related String --- .../UserSettings/Settings.cs | 3 + Flow.Launcher/Languages/en.xaml | 4 + Flow.Launcher/MainWindow.xaml.cs | 73 +++++------ Flow.Launcher/Resources/open.wav | Bin 0 -> 4784 bytes Flow.Launcher/SettingWindow.xaml | 119 ++++++++++++++---- Flow.Launcher/ViewModel/MainViewModel.cs | 7 ++ .../ViewModel/SettingWindowViewModel.cs | 12 ++ 7 files changed, 159 insertions(+), 59 deletions(-) create mode 100644 Flow.Launcher/Resources/open.wav diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index 5f9082fe9..d0351af51 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -37,6 +37,9 @@ namespace Flow.Launcher.Infrastructure.UserSettings public string ResultFontStretch { get; set; } public bool UseGlyphIcons { get; set; } = true; + public bool UseAnimation { get; set; } = true; + public bool UseSound { get; set; } = false; + /// /// when false Alphabet static service will always return empty results diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 1cb203515..9721ad869 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -80,6 +80,10 @@ Fail to load theme {0}, fallback to default theme Theme Folder Open Theme Folder + Sound Effect + Play a small sound when window open. + Animation + Use Animation in UI. Hotkey diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index db38f0fad..2d8e2f822 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -238,44 +238,47 @@ namespace Flow.Launcher public void WindowAnimator() { - if (_animating) - return; + if (_settings.UseAnimation) + { + if (_animating) + return; - _animating = true; - UpdatePosition(); - Storyboard sb = new Storyboard(); - var da = new DoubleAnimation - { - From = 0, - To = 1, - Duration = TimeSpan.FromSeconds(0.2), - FillBehavior = FillBehavior.Stop - }; + _animating = true; + UpdatePosition(); + Storyboard sb = new Storyboard(); + var da = new DoubleAnimation + { + From = 0, + To = 1, + Duration = TimeSpan.FromSeconds(0.2), + FillBehavior = FillBehavior.Stop + }; - var da2 = new DoubleAnimation - { - From = Top + 8, - To = Top, - Duration = TimeSpan.FromSeconds(0.2), - FillBehavior = FillBehavior.Stop - }; + var da2 = new DoubleAnimation + { + From = Top + 8, + To = Top, + Duration = TimeSpan.FromSeconds(0.2), + FillBehavior = FillBehavior.Stop + }; - var da3 = new DoubleAnimation - { - From = Left, - To = Left, - Duration = TimeSpan.FromSeconds(0.1), - FillBehavior = FillBehavior.Stop - }; - Storyboard.SetTarget(da, this); - Storyboard.SetTargetProperty(da, new PropertyPath(Window.OpacityProperty)); - Storyboard.SetTargetProperty(da2, new PropertyPath(Window.TopProperty)); - Storyboard.SetTargetProperty(da3, new PropertyPath(Window.LeftProperty)); - sb.Children.Add(da); - sb.Children.Add(da2); - sb.Children.Add(da3); - sb.Completed += (_, _) => _animating = false; - sb.Begin(FlowMainWindow); + var da3 = new DoubleAnimation + { + From = Left, + To = Left, + Duration = TimeSpan.FromSeconds(0.1), + FillBehavior = FillBehavior.Stop + }; + Storyboard.SetTarget(da, this); + Storyboard.SetTargetProperty(da, new PropertyPath(Window.OpacityProperty)); + Storyboard.SetTargetProperty(da2, new PropertyPath(Window.TopProperty)); + Storyboard.SetTargetProperty(da3, new PropertyPath(Window.LeftProperty)); + sb.Children.Add(da); + sb.Children.Add(da2); + sb.Children.Add(da3); + sb.Completed += (_, _) => _animating = false; + sb.Begin(FlowMainWindow); + } } diff --git a/Flow.Launcher/Resources/open.wav b/Flow.Launcher/Resources/open.wav new file mode 100644 index 0000000000000000000000000000000000000000..c3e0619975cac92469bbfa0b64c66f046c2ad767 GIT binary patch literal 4784 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 literal 0 HcmV?d00001 diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index e69b26f63..e49465176 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -1388,11 +1388,15 @@ TextAlignment="left" /> - - + + @@ -1470,26 +1474,29 @@ - - + + - + @@ -1749,6 +1756,70 @@ + + + + + + + + + + + +  + + + + + + + + + + + + +  + + + + + + diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs index 4509d1fce..6e1befeaf 100644 --- a/Flow.Launcher/ViewModel/MainViewModel.cs +++ b/Flow.Launcher/ViewModel/MainViewModel.cs @@ -5,6 +5,7 @@ using System.Threading; using System.Threading.Tasks; using System.Threading.Tasks.Dataflow; using System.Windows; +using System.Windows.Media; using System.Windows.Input; using Flow.Launcher.Core.Plugin; using Flow.Launcher.Core.Resource; @@ -712,6 +713,12 @@ namespace Flow.Launcher.ViewModel { if (WinToggleStatus != true) { + if (_settings.UseSound) + { + MediaPlayer media = new MediaPlayer(); + media.Open(new Uri(AppDomain.CurrentDomain.BaseDirectory + "Resources\\open.wav")); + media.Play(); + } MainWindowVisibility = Visibility.Visible; WinToggleStatus = true; ((MainWindow)Application.Current.MainWindow).WindowAnimator(); diff --git a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs index 4947ca380..773c4733c 100644 --- a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs +++ b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs @@ -328,6 +328,18 @@ namespace Flow.Launcher.ViewModel set => Settings.UseGlyphIcons = value; } + public bool UseAnimation + { + get => Settings.UseAnimation; + set => Settings.UseAnimation = value; + } + + public bool UseSound + { + get => Settings.UseSound; + set => Settings.UseSound = value; + } + public Brush PreviewBackground { get From 15266f25853409609ea237d2af3f5ec4131d68bd Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 14 Nov 2021 09:13:56 +0900 Subject: [PATCH 012/107] - Add time for hide when open setting (using context menu) - Adjust String --- Flow.Launcher/Languages/en.xaml | 51 +++++++++++++++++--------------- Flow.Launcher/MainWindow.xaml.cs | 10 ++++--- 2 files changed, 33 insertions(+), 28 deletions(-) diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 9721ad869..416773c54 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -1,7 +1,8 @@ - - + + Failed to register hotkey: {0} Could not start {0} Invalid Flow Launcher plugin file format @@ -15,7 +16,7 @@ Exit Close - + Flow Launcher Settings General Portable Mode @@ -44,7 +45,7 @@ Allows using Pinyin to search. Pinyin is the standard system of romanized spelling for translating Chinese Shadow effect is not allowed while current theme has blur effect enabled - + Plugins Find more plugins On @@ -62,12 +63,12 @@ Query time: - + Plugin Store Refresh Install - + Theme Theme Gallery How to create a theme @@ -81,11 +82,11 @@ Theme Folder Open Theme Folder Sound Effect - Play a small sound when window open. + Play a small sound when window open Animation - Use Animation in UI. + Use Animation in UI - + Hotkey Flow Launcher Hotkey Enter shortcut to show/hide Flow Launcher. @@ -106,7 +107,7 @@ Use Segoe Fluent Icons Use Segoe Fluent Icons for query results where supported - + HTTP Proxy Enable HTTP Proxy HTTP Server @@ -122,7 +123,7 @@ Proxy configured correctly Proxy connection failed - + About Website Version @@ -131,18 +132,18 @@ New version {0} is available, would you like to restart Flow Launcher to use the update? Check updates failed, please check your connection and proxy settings to api.github.com. - Download updates failed, please check your connection and proxy settings to github-cloud.s3.amazonaws.com, + Download updates failed, please check your connection and proxy settings to github-cloud.s3.amazonaws.com, or go to https://github.com/Flow-Launcher/Flow.Launcher/releases to download updates manually. Release Notes Usage Tips: - + Change Priority Greater the number, the higher the result will be ranked. Try setting it as 5. If you want the results to be lower than any other plugin's, provide a negative number Please provide an valid integer for Priority! - + Old Action Keyword New Action Keyword Cancel @@ -152,9 +153,9 @@ This new Action Keyword is already assigned to another plugin, please choose a different one Success Completed successfully - Enter the action keyword you need to start the plug-in. Use * if you don't want to specify an action keyword. In the case, The plug-in works without keywords. + Enter the action keyword you need to start the plug-in. Use * if you don't want to specify an action keyword. In the case, The plug-in works without keywords. - + Custom Query Hotkey Press the custom hotkey to automatically insert the specified query. Preview @@ -162,10 +163,10 @@ Invalid plugin hotkey Update - + Hotkey Unavailable - + Version Time Please tell us how application crashed so we can fix it @@ -181,16 +182,18 @@ Failed to send report Flow Launcher got an error - + Please wait... - + Checking for new update You already have the latest Flow Launcher version Update found Updating... - Flow Launcher was not able to move your user profile data to the new update version. - Please manually move your profile data folder from {0} to {1} + + Flow Launcher was not able to move your user profile data to the new update version. + Please manually move your profile data folder from {0} to {1} + New Update New Flow Launcher release {0} is now available An error occurred while trying to install software updates diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index 2d8e2f822..bae41788c 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -250,7 +250,7 @@ namespace Flow.Launcher { From = 0, To = 1, - Duration = TimeSpan.FromSeconds(0.2), + Duration = TimeSpan.FromSeconds(0.18), FillBehavior = FillBehavior.Stop }; @@ -258,7 +258,7 @@ namespace Flow.Launcher { From = Top + 8, To = Top, - Duration = TimeSpan.FromSeconds(0.2), + Duration = TimeSpan.FromSeconds(0.18), FillBehavior = FillBehavior.Stop }; @@ -266,7 +266,7 @@ namespace Flow.Launcher { From = Left, To = Left, - Duration = TimeSpan.FromSeconds(0.1), + Duration = TimeSpan.FromSeconds(0.18), FillBehavior = FillBehavior.Stop }; Storyboard.SetTarget(da, this); @@ -314,8 +314,10 @@ namespace Flow.Launcher e.Handled = true; } - private void OnContextMenusForSettingsClick(object sender, RoutedEventArgs e) + private async void OnContextMenusForSettingsClick(object sender, RoutedEventArgs e) { + _viewModel.Hide(); + await Task.Delay(100); App.API.OpenSettingDialog(); } From 42f1b574276be0304769e1c3882386743196e085 Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 14 Nov 2021 11:30:25 +0900 Subject: [PATCH 013/107] - Change Setting Window Size to responsive --- Flow.Launcher/SettingWindow.xaml | 2 +- Flow.Launcher/SettingWindow.xaml.cs | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index e49465176..550b3e85d 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -14,7 +14,7 @@ xmlns:vm="clr-namespace:Flow.Launcher.ViewModel" Title="{DynamicResource flowlauncher_settings}" Width="1000" - Height="700" + Height="650" MinWidth="900" MinHeight="600" d:DataContext="{d:DesignInstance vm:SettingWindowViewModel}" diff --git a/Flow.Launcher/SettingWindow.xaml.cs b/Flow.Launcher/SettingWindow.xaml.cs index 203248ad6..0aa647146 100644 --- a/Flow.Launcher/SettingWindow.xaml.cs +++ b/Flow.Launcher/SettingWindow.xaml.cs @@ -15,6 +15,7 @@ using Flow.Launcher.ViewModel; using Flow.Launcher.Helper; using System.Windows.Controls; using Flow.Launcher.Core.ExternalPlugins; +using Screen = System.Windows.Forms.Screen; namespace Flow.Launcher { @@ -44,6 +45,15 @@ namespace Flow.Launcher HwndSource hwndSource = PresentationSource.FromVisual(this) as HwndSource; HwndTarget hwndTarget = hwndSource.CompositionTarget; hwndTarget.RenderMode = RenderMode.SoftwareOnly; + + var screen = Screen.FromPoint(System.Windows.Forms.Cursor.Position); + var dip1 = WindowsInteropHelper.TransformPixelsToDIP(this, 0, screen.WorkingArea.Y); + var dip2 = WindowsInteropHelper.TransformPixelsToDIP(this, 0, screen.WorkingArea.Height); + var workingHeight = dip2.Y * 0.8; + var top = (dip2.Y / 2) - (workingHeight / 2); + this.Height = workingHeight; + this.Top = top; + } private void OnAutoStartupChecked(object sender, RoutedEventArgs e) From 838d6c5571b2263543ad6d721264859aa9d6c681 Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 14 Nov 2021 11:32:39 +0900 Subject: [PATCH 014/107] Remove Left Positioning Code in animation --- Flow.Launcher/MainWindow.xaml.cs | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index bae41788c..07a18bc80 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -261,21 +261,11 @@ namespace Flow.Launcher Duration = TimeSpan.FromSeconds(0.18), FillBehavior = FillBehavior.Stop }; - - var da3 = new DoubleAnimation - { - From = Left, - To = Left, - Duration = TimeSpan.FromSeconds(0.18), - FillBehavior = FillBehavior.Stop - }; Storyboard.SetTarget(da, this); Storyboard.SetTargetProperty(da, new PropertyPath(Window.OpacityProperty)); Storyboard.SetTargetProperty(da2, new PropertyPath(Window.TopProperty)); - Storyboard.SetTargetProperty(da3, new PropertyPath(Window.LeftProperty)); sb.Children.Add(da); sb.Children.Add(da2); - sb.Children.Add(da3); sb.Completed += (_, _) => _animating = false; sb.Begin(FlowMainWindow); } From b17f12b99ae072c9e5a887674305b93f651ab4cb Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 14 Nov 2021 11:43:03 +0900 Subject: [PATCH 015/107] change wav file to resource --- Flow.Launcher/Flow.Launcher.csproj | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Flow.Launcher/Flow.Launcher.csproj b/Flow.Launcher/Flow.Launcher.csproj index fd2f5f1d9..86156c59a 100644 --- a/Flow.Launcher/Flow.Launcher.csproj +++ b/Flow.Launcher/Flow.Launcher.csproj @@ -77,6 +77,7 @@ Designer PreserveNewest + PreserveNewest @@ -104,6 +105,10 @@ + + + + From 37858a4b4ed0456e8338d5f61c21613d5fa2dd4f Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 14 Nov 2021 13:35:53 +0900 Subject: [PATCH 016/107] Change Sound FIle --- Flow.Launcher/Resources/open.wav | Bin 4784 -> 80116 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Flow.Launcher/Resources/open.wav b/Flow.Launcher/Resources/open.wav index c3e0619975cac92469bbfa0b64c66f046c2ad767..4f13724f7093ad2d66c595cf8a672b6dabf008ba 100644 GIT binary patch literal 80116 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 z zD4b{jQZYLhfi%gnvHGlqUNBt(P=bAR1OoZ5oC02Me_gXOlY)0`VgPfkqORn+WR&1oa); zU?S@Kn&Wm@5IBj0=k&|Zhm^~9?K;5Q(|X7kZT{ZdC5-^zz)DXVY@y(>z5_*{B&jMAan#(tzqg$7(d#mRgXWNC(|>IV);=F(4=Uom_^sBX!olhb($+bRHqd0K7u-ymxAFSPR_Va zd z6li|4@;n;}m>Xud?vKad{~JKQH6tSz@GP{V-^Ud?eOBQT!$l{HqEFjl&Od{0ArDRa ze7sbWjJpv?r-$vJTvTQ|?En=gIyDf5=u79gI*|IEhXXMo`)i`0)EYTB)~9($@xyc3 zHLr&-QsbpD?`!sO2TC*ARoLCK>TsBzss>gA!LWI1rc6xh<*{<^4&0CU#JOgnrftP% zHYogTj(plbJ@t@7+lV4TwV(=pH_t@i0Eo#}vzZ}Kv>l^AmAu຾ST~1}iZ@E(N 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 literal 4784 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 From 5a430bfc48e71bdb69ada6f453e2041e9251e5fa Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 14 Nov 2021 13:39:45 +0900 Subject: [PATCH 017/107] Change Wav to output --- Flow.Launcher/Flow.Launcher.csproj | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Flow.Launcher/Flow.Launcher.csproj b/Flow.Launcher/Flow.Launcher.csproj index 86156c59a..b05a5fddb 100644 --- a/Flow.Launcher/Flow.Launcher.csproj +++ b/Flow.Launcher/Flow.Launcher.csproj @@ -106,7 +106,9 @@ - + + PreserveNewest + From abe4eec65de070253193301f7ce206b36b73c7e2 Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 14 Nov 2021 15:09:09 +0900 Subject: [PATCH 018/107] fix Wav output setting --- Flow.Launcher/Flow.Launcher.csproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Flow.Launcher/Flow.Launcher.csproj b/Flow.Launcher/Flow.Launcher.csproj index b05a5fddb..1f24b325f 100644 --- a/Flow.Launcher/Flow.Launcher.csproj +++ b/Flow.Launcher/Flow.Launcher.csproj @@ -106,9 +106,9 @@ - - PreserveNewest - + + Always + From f8cfa7c45a5bf12f8d87893999a90c26341f9238 Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 14 Nov 2021 15:22:44 +0900 Subject: [PATCH 019/107] Remove Resize Settting window code (It made weired blink when open setting window) --- Flow.Launcher/SettingWindow.xaml.cs | 8 -------- 1 file changed, 8 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml.cs b/Flow.Launcher/SettingWindow.xaml.cs index 0f55eec96..054274eb6 100644 --- a/Flow.Launcher/SettingWindow.xaml.cs +++ b/Flow.Launcher/SettingWindow.xaml.cs @@ -46,14 +46,6 @@ namespace Flow.Launcher HwndTarget hwndTarget = hwndSource.CompositionTarget; hwndTarget.RenderMode = RenderMode.SoftwareOnly; - var screen = Screen.FromPoint(System.Windows.Forms.Cursor.Position); - var dip1 = WindowsInteropHelper.TransformPixelsToDIP(this, 0, screen.WorkingArea.Y); - var dip2 = WindowsInteropHelper.TransformPixelsToDIP(this, 0, screen.WorkingArea.Height); - var workingHeight = dip2.Y * 0.8; - var top = (dip2.Y / 2) - (workingHeight / 2); - this.Height = workingHeight; - this.Top = top; - } private void OnAutoStartupChecked(object sender, RoutedEventArgs e) From a2600af2eb4d5af78106dd60b88c5af1d755724b Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 14 Nov 2021 17:45:56 +0900 Subject: [PATCH 020/107] - Add Show() function and seperate toggleflow() - Change ShowMainWindow to using Show() (for Fix plugin install button) --- Flow.Launcher/PublicAPIInstance.cs | 2 +- Flow.Launcher/SettingWindow.xaml.cs | 1 - Flow.Launcher/ViewModel/MainViewModel.cs | 25 ++++++++++++++---------- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/Flow.Launcher/PublicAPIInstance.cs b/Flow.Launcher/PublicAPIInstance.cs index e90a53fc3..a5c9f3afe 100644 --- a/Flow.Launcher/PublicAPIInstance.cs +++ b/Flow.Launcher/PublicAPIInstance.cs @@ -70,7 +70,7 @@ namespace Flow.Launcher public void RestarApp() => RestartApp(); - public void ShowMainWindow() => _mainVM.MainWindowVisibility = Visibility.Visible; + public void ShowMainWindow() => _mainVM.Show(); public void CheckForNewUpdate() => _settingsVM.UpdateApp(); diff --git a/Flow.Launcher/SettingWindow.xaml.cs b/Flow.Launcher/SettingWindow.xaml.cs index 054274eb6..88d4f2895 100644 --- a/Flow.Launcher/SettingWindow.xaml.cs +++ b/Flow.Launcher/SettingWindow.xaml.cs @@ -15,7 +15,6 @@ using Flow.Launcher.ViewModel; using Flow.Launcher.Helper; using System.Windows.Controls; using Flow.Launcher.Core.ExternalPlugins; -using Screen = System.Windows.Forms.Screen; namespace Flow.Launcher { diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs index 6e1befeaf..9870053c2 100644 --- a/Flow.Launcher/ViewModel/MainViewModel.cs +++ b/Flow.Launcher/ViewModel/MainViewModel.cs @@ -713,16 +713,7 @@ namespace Flow.Launcher.ViewModel { if (WinToggleStatus != true) { - if (_settings.UseSound) - { - MediaPlayer media = new MediaPlayer(); - media.Open(new Uri(AppDomain.CurrentDomain.BaseDirectory + "Resources\\open.wav")); - media.Play(); - } - MainWindowVisibility = Visibility.Visible; - WinToggleStatus = true; - ((MainWindow)Application.Current.MainWindow).WindowAnimator(); - MainWindowOpacity = 1; + Show(); } else { @@ -730,6 +721,20 @@ namespace Flow.Launcher.ViewModel } } + public void Show() + { + if (_settings.UseSound) + { + MediaPlayer media = new MediaPlayer(); + media.Open(new Uri(AppDomain.CurrentDomain.BaseDirectory + "Resources\\open.wav")); + media.Play(); + } + MainWindowVisibility = Visibility.Visible; + WinToggleStatus = true; + ((MainWindow)Application.Current.MainWindow).WindowAnimator(); + MainWindowOpacity = 1; + } + public async void Hide() { MainWindowOpacity = 0; From add99c4d6d29e0adc6bfa21d56eae48f9d9545c9 Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 14 Nov 2021 18:13:03 +0900 Subject: [PATCH 021/107] - Change MainwindowVisibility to using show() - HotkeyMapper, CustomQueryHotkeySetting. --- Flow.Launcher/CustomQueryHotkeySetting.xaml | 137 +++++++++++++----- .../CustomQueryHotkeySetting.xaml.cs | 1 + Flow.Launcher/Helper/HotKeyMapper.cs | 2 +- 3 files changed, 105 insertions(+), 35 deletions(-) diff --git a/Flow.Launcher/CustomQueryHotkeySetting.xaml b/Flow.Launcher/CustomQueryHotkeySetting.xaml index 23bd89906..e9d486fe1 100644 --- a/Flow.Launcher/CustomQueryHotkeySetting.xaml +++ b/Flow.Launcher/CustomQueryHotkeySetting.xaml @@ -1,57 +1,126 @@ - + - + - + - + - + - - + + - + - - - - + + + + - - - - diff --git a/Flow.Launcher/CustomQueryHotkeySetting.xaml.cs b/Flow.Launcher/CustomQueryHotkeySetting.xaml.cs index 0109474e1..e1f69d117 100644 --- a/Flow.Launcher/CustomQueryHotkeySetting.xaml.cs +++ b/Flow.Launcher/CustomQueryHotkeySetting.xaml.cs @@ -92,6 +92,7 @@ namespace Flow.Launcher { App.API.ChangeQuery(tbAction.Text); Application.Current.MainWindow.Visibility = Visibility.Visible; + Application.Current.MainWindow.Opacity = 1; Application.Current.MainWindow.Focus(); } diff --git a/Flow.Launcher/Helper/HotKeyMapper.cs b/Flow.Launcher/Helper/HotKeyMapper.cs index fe25ecf18..70d71bb32 100644 --- a/Flow.Launcher/Helper/HotKeyMapper.cs +++ b/Flow.Launcher/Helper/HotKeyMapper.cs @@ -78,7 +78,7 @@ namespace Flow.Launcher.Helper if (mainViewModel.ShouldIgnoreHotkeys()) return; - mainViewModel.MainWindowVisibility = Visibility.Visible; + mainViewModel.Show(); mainViewModel.ChangeQueryText(hotkey.ActionKeyword, true); }); } From 979a7b8b7b825aa968ffd0e23d0647636fa82b39 Mon Sep 17 00:00:00 2001 From: DB p Date: Mon, 15 Nov 2021 05:08:01 +0900 Subject: [PATCH 022/107] Change Titlebar to Custom TitleBar (SettingWindow) --- .../Resources/CustomControlTemplate.xaml | 83 + Flow.Launcher/SettingWindow.xaml | 3627 +++++++++-------- Flow.Launcher/SettingWindow.xaml.cs | 142 + 3 files changed, 2084 insertions(+), 1768 deletions(-) diff --git a/Flow.Launcher/Resources/CustomControlTemplate.xaml b/Flow.Launcher/Resources/CustomControlTemplate.xaml index 877a97645..bcb20579f 100644 --- a/Flow.Launcher/Resources/CustomControlTemplate.xaml +++ b/Flow.Launcher/Resources/CustomControlTemplate.xaml @@ -4,6 +4,89 @@ xmlns:system="clr-namespace:System;assembly=mscorlib" xmlns:ui="http://schemas.modernwpf.com/2019"> + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - + SelectedIndex="1" + TabStripPlacement="Left"> + + + + + + + + + + + + + + + + + + + + + + -  +  - - + + + - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - + + + + + + + + + + + + + + +  + + + + + Date: Wed, 17 Nov 2021 10:23:12 +0900 Subject: [PATCH 036/107] Change hardcoded style in SelectFileManagerWindow --- .../Resources/CustomControlTemplate.xaml | 12 +- Flow.Launcher/Resources/Dark.xaml | 4 + Flow.Launcher/Resources/Light.xaml | 4 + Flow.Launcher/SelectFileManagerWindow.xaml | 150 +++++++++++------- 4 files changed, 111 insertions(+), 59 deletions(-) diff --git a/Flow.Launcher/Resources/CustomControlTemplate.xaml b/Flow.Launcher/Resources/CustomControlTemplate.xaml index f029168f3..c5c71f6d7 100644 --- a/Flow.Launcher/Resources/CustomControlTemplate.xaml +++ b/Flow.Launcher/Resources/CustomControlTemplate.xaml @@ -5,13 +5,19 @@ xmlns:ui="http://schemas.modernwpf.com/2019"> + + + diff --git a/Flow.Launcher/Resources/Dark.xaml b/Flow.Launcher/Resources/Dark.xaml index e2b266b29..4c02fde8c 100644 --- a/Flow.Launcher/Resources/Dark.xaml +++ b/Flow.Launcher/Resources/Dark.xaml @@ -33,6 +33,10 @@ + + + + #202020 #2b2b2b #1d1d1d diff --git a/Flow.Launcher/Resources/Light.xaml b/Flow.Launcher/Resources/Light.xaml index e2eb9070f..c4a3aa139 100644 --- a/Flow.Launcher/Resources/Light.xaml +++ b/Flow.Launcher/Resources/Light.xaml @@ -30,6 +30,10 @@ + + + + #f3f3f3 #ffffff #e5e5e5 diff --git a/Flow.Launcher/SelectFileManagerWindow.xaml b/Flow.Launcher/SelectFileManagerWindow.xaml index eba794c96..2adac5639 100644 --- a/Flow.Launcher/SelectFileManagerWindow.xaml +++ b/Flow.Launcher/SelectFileManagerWindow.xaml @@ -7,25 +7,63 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:ui="http://schemas.modernwpf.com/2019" Title="{DynamicResource fileManagerWindow}" - Background="#f3f3f3" + Width="600" + Background="{DynamicResource PopuBGColor}" DataContext="{Binding RelativeSource={RelativeSource Self}}" + Foreground="{DynamicResource PopupTextColor}" ResizeMode="NoResize" - SizeToContent="WidthAndHeight" + SizeToContent="Height" WindowStartupLocation="CenterScreen" mc:Ignorable="d"> - + + + + + - - + + - + + + + + + + + + + + + + - + @@ -86,7 +120,7 @@ + Fill="{StaticResource Color03B}" /> - + + + + + + + - - - From 0fbec350cb8be5a2af5fc5d24b79a33d49219ee7 Mon Sep 17 00:00:00 2001 From: DB p Date: Wed, 17 Nov 2021 14:17:17 +0900 Subject: [PATCH 037/107] Darkmode CPriority Change Window --- Flow.Launcher/PriorityChangeWindow.xaml | 167 +-- .../Resources/CustomControlTemplate.xaml | 1051 +++++++++-------- Flow.Launcher/Resources/Dark.xaml | 16 +- Flow.Launcher/Resources/Light.xaml | 11 + Flow.Launcher/SettingWindow.xaml | 2 +- 5 files changed, 652 insertions(+), 595 deletions(-) diff --git a/Flow.Launcher/PriorityChangeWindow.xaml b/Flow.Launcher/PriorityChangeWindow.xaml index bbe601010..d8fda81e3 100644 --- a/Flow.Launcher/PriorityChangeWindow.xaml +++ b/Flow.Launcher/PriorityChangeWindow.xaml @@ -7,84 +7,117 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:ui="http://schemas.modernwpf.com/2019" Title="{DynamicResource changePriorityWindow}" - Background="#F3F3F3" - BorderBrush="#cecece" + Width="350" + Background="{DynamicResource PopuBGColor}" + Foreground="{DynamicResource PopupTextColor}" Loaded="PriorityChangeWindow_Loaded" MouseDown="window_MouseDown" ResizeMode="NoResize" - SizeToContent="WidthAndHeight" + SizeToContent="Height" WindowStartupLocation="CenterScreen" mc:Ignorable="d"> - + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - + + + + + + + + + + + + + + diff --git a/Flow.Launcher/Resources/CustomControlTemplate.xaml b/Flow.Launcher/Resources/CustomControlTemplate.xaml index c5c71f6d7..ad0340f67 100644 --- a/Flow.Launcher/Resources/CustomControlTemplate.xaml +++ b/Flow.Launcher/Resources/CustomControlTemplate.xaml @@ -123,531 +123,7 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Flow.Launcher/HotkeyControl.xaml b/Flow.Launcher/HotkeyControl.xaml index 285a282ef..94cdc6703 100644 --- a/Flow.Launcher/HotkeyControl.xaml +++ b/Flow.Launcher/HotkeyControl.xaml @@ -1,26 +1,55 @@ - + - + - - - - press key + + + + Press key - - - + + \ No newline at end of file diff --git a/Flow.Launcher/Resources/Dark.xaml b/Flow.Launcher/Resources/Dark.xaml index 7c631bdc2..4933dc021 100644 --- a/Flow.Launcher/Resources/Dark.xaml +++ b/Flow.Launcher/Resources/Dark.xaml @@ -39,9 +39,9 @@ - + - + #202020 #2b2b2b From 7333b571091ec15b786ad3d4f13f78c94376bbb5 Mon Sep 17 00:00:00 2001 From: DB p Date: Wed, 17 Nov 2021 15:04:57 +0900 Subject: [PATCH 039/107] - remove Bookmark/websearch setting panel hardcoded bgcolor - Adjust Colors in settingwindow --- Flow.Launcher/Resources/Dark.xaml | 2 + Flow.Launcher/Resources/Light.xaml | 2 + Flow.Launcher/SettingWindow.xaml | 26 +- .../Views/SettingsControl.xaml | 138 +++++++---- .../SettingsControl.xaml | 229 ++++++++++++------ 5 files changed, 255 insertions(+), 142 deletions(-) diff --git a/Flow.Launcher/Resources/Dark.xaml b/Flow.Launcher/Resources/Dark.xaml index 4933dc021..581b1f10e 100644 --- a/Flow.Launcher/Resources/Dark.xaml +++ b/Flow.Launcher/Resources/Dark.xaml @@ -37,6 +37,7 @@ + @@ -72,6 +73,7 @@ #f5f5f5 #464646 #ffffff + #272727 diff --git a/Flow.Launcher/Resources/Light.xaml b/Flow.Launcher/Resources/Light.xaml index 9dd240f4d..4e8abc1bc 100644 --- a/Flow.Launcher/Resources/Light.xaml +++ b/Flow.Launcher/Resources/Light.xaml @@ -34,6 +34,7 @@ + @@ -66,6 +67,7 @@ #f5f5f5 #878787 #1b1b1b + #f6f6f6 diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index f846dd057..17b18acb2 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -1118,65 +1118,65 @@ MaxWidth="100" Margin="10,0,0,0" FontSize="11" - Foreground="#8F8F8F" + Foreground="{DynamicResource PluginInfoColor}" Text="{DynamicResource author}" /> @@ -1201,7 +1201,7 @@ VerticalAlignment="Center" Cursor="Hand" FontSize="12" - Foreground="#8f8f8f" + Foreground="{DynamicResource PluginInfoColor}" MouseUp="OnPluginDirecotyClick" Text="{DynamicResource pluginDirectory}" TextDecorations="Underline" /> @@ -1412,7 +1412,7 @@ VerticalAlignment="Stretch" Panel.ZIndex="1"> - + diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Views/SettingsControl.xaml b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Views/SettingsControl.xaml index abe1f0ad5..59bdf222b 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Views/SettingsControl.xaml +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Views/SettingsControl.xaml @@ -1,72 +1,106 @@ - + - - + + - + - - + + - - - + + + + - + - - - + + + - - - - + + - + + + + + + - - - - \ No newline at end of file diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index b8f214538..fe1c5dd91 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -83,6 +83,10 @@ Fail to load theme {0}, fallback to default theme Theme Folder Open Theme Folder + Dark Mode + System Default + Light + Dark Hotkey diff --git a/Flow.Launcher/Resources/Dark.xaml b/Flow.Launcher/Resources/Dark.xaml index 581b1f10e..388f329d0 100644 --- a/Flow.Launcher/Resources/Dark.xaml +++ b/Flow.Launcher/Resources/Dark.xaml @@ -39,6 +39,10 @@ + + + + diff --git a/Flow.Launcher/Resources/Light.xaml b/Flow.Launcher/Resources/Light.xaml index 4e8abc1bc..864cd01ce 100644 --- a/Flow.Launcher/Resources/Light.xaml +++ b/Flow.Launcher/Resources/Light.xaml @@ -35,6 +35,7 @@ + diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index f6e1f95f1..28707d212 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -1354,9 +1354,9 @@ Height="32" Margin="8,0,6,0" VerticalAlignment="Center" - RenderOptions.BitmapScalingMode="HighQuality" - Source="{Binding IcoPath, IsAsync=True}" - Stretch="Uniform" /> + RenderOptions.BitmapScalingMode="HighQuality" + Source="{Binding IcoPath, IsAsync=True}" + Stretch="Uniform" /> - + + + + + + + +  + + + + + From ef71f6dee27b5b441487562ac457871a79e2bbcc Mon Sep 17 00:00:00 2001 From: DB p Date: Wed, 17 Nov 2021 16:59:09 +0900 Subject: [PATCH 041/107] Fix Plugin List Color in Light Mode --- Flow.Launcher/SettingWindow.xaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 28707d212..b32ba36e8 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -244,7 +244,7 @@ @@ -53,7 +53,7 @@ - + @@ -439,14 +439,14 @@ Margin="4,0,0,0" VerticalAlignment="Center" FontSize="12" - Foreground="{StaticResource Color05B}" + Foreground="{DynamicResource Color05B}" Text="{DynamicResource flowlauncher_settings}" /> + + + + + + + + + + + + + + + + + + + + + diff --git a/Flow.Launcher/Languages/ko.xaml b/Flow.Launcher/Languages/ko.xaml index 2c3e733ed..4df5d67de 100644 --- a/Flow.Launcher/Languages/ko.xaml +++ b/Flow.Launcher/Languages/ko.xaml @@ -165,7 +165,7 @@ 중요도 변경 - 높은 수를 넣을수록 상위 결과에 표시됩니다. 5를 시도해보세요. 다른 플러그인 보다 결과를 낮추고 싶다면, 그보다 낮은 수를 입력하세요. + 높은 수를 넣을수록 상위 결과에 표시됩니다. 5를 시도해보세요. 다른 플러그인 보다 결과를 낮춰 표시하고 싶다면, 그보다 낮은 수를 입력하세요. 중요도에 올바른 정수를 입력하세요. 예전 액션 키워드 @@ -177,10 +177,11 @@ 새 액션 키워드가 할당된 플러그인이 이미 있습니다. 다른 액션 키워드를 입력하세요. 성공 성공적으로 완료했습니다. - 액션 키워드를 지정하지 않으려면 *를 사용하세요. + 플러그인을 시작하는데 필요한 액션 키워드를 입력하세요. 액션 키워드를 지정하지 않으려면 *를 사용하세요. 이 경우 키워드를 입력하지 않아도 동작합니다. 커스텀 플러그인 핫키 + 단축키를 지정하여 특정 쿼리를 자동으로 입력할 수 있습니다. 사용하고 싶은 단축키를 눌러 지정한 후, 사용할 쿼리를 입력하세요. 미리보기 핫키를 사용할 수 없습니다. 다른 핫키를 입력하세요. 플러그인 핫키가 유효하지 않습니다. diff --git a/Flow.Launcher/PriorityChangeWindow.xaml b/Flow.Launcher/PriorityChangeWindow.xaml index d8fda81e3..8fb27c470 100644 --- a/Flow.Launcher/PriorityChangeWindow.xaml +++ b/Flow.Launcher/PriorityChangeWindow.xaml @@ -104,17 +104,18 @@ diff --git a/Flow.Launcher/SelectFileManagerWindow.xaml b/Flow.Launcher/SelectFileManagerWindow.xaml index 6092c1da1..7380baa6a 100644 --- a/Flow.Launcher/SelectFileManagerWindow.xaml +++ b/Flow.Launcher/SelectFileManagerWindow.xaml @@ -239,21 +239,19 @@