From 96ab33bdea4f372632b9dc8793ce2496d5e0e7a2 Mon Sep 17 00:00:00 2001 From: Jeremy Date: Mon, 27 Sep 2021 22:23:03 +1000 Subject: [PATCH 001/225] fix winget update causing incompatibility with always retrieving latest --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index b45b40186..dba2cf8f9 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -78,6 +78,6 @@ on_success: - ps: | if ($env:APPVEYOR_REPO_BRANCH -eq "master" -and $env:APPVEYOR_REPO_TAG -eq "true") { - iwr https://aka.ms/wingetcreate/latest -OutFile wingetcreate.exe + iwr https://github.com/microsoft/winget-create/releases/download/v0.2.0.29-preview/wingetcreate.exe -OutFile wingetcreate.exe .\wingetcreate.exe update Flow-Launcher.Flow-Launcher -s true -u https://github.com/Flow-Launcher/Flow.Launcher/releases/download/v$env:flowVersion/Flow-Launcher-Setup.exe -v $env:flowVersion -t $env:winget_token } From d41dd780ce631d1ef0aa61dd53a68204bb85fc72 Mon Sep 17 00:00:00 2001 From: Spencer Hedrick Date: Sat, 9 Oct 2021 02:36:38 -0700 Subject: [PATCH 002/225] 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 3f95385f6a13a5995a71bf1eee05edb335057ce7 Mon Sep 17 00:00:00 2001 From: DB p Date: Wed, 20 Oct 2021 12:33:23 +0900 Subject: [PATCH 003/225] - Change Tray Menu to context menu for design --- Flow.Launcher/MainWindow.xaml.cs | 56 +++++++++++++++++++------------- 1 file changed, 33 insertions(+), 23 deletions(-) diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index 057c3f07d..0c2173391 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -30,6 +30,7 @@ namespace Flow.Launcher private bool isProgressBarStoryboardPaused; private Settings _settings; private NotifyIcon _notifyIcon; + private ContextMenu contextMenu; private MainViewModel _viewModel; #endregion @@ -159,14 +160,19 @@ namespace Flow.Launcher private void UpdateNotifyIconText() { - var menu = _notifyIcon.ContextMenuStrip; - var open = menu.Items[0]; - var setting = menu.Items[1]; - var exit = menu.Items[2]; + var menu = contextMenu; - open.Text = InternationalizationManager.Instance.GetTranslation("iconTrayOpen"); - setting.Text = InternationalizationManager.Instance.GetTranslation("iconTraySettings"); - exit.Text = InternationalizationManager.Instance.GetTranslation("iconTrayExit"); + var header = new MenuItem() { Header = "Flow Launcher", IsEnabled = false }; + var open = new MenuItem() { Header = InternationalizationManager.Instance.GetTranslation("iconTrayOpen") }; + var settings = new MenuItem() { Header = InternationalizationManager.Instance.GetTranslation("iconTraySettings") }; + var exit = new MenuItem() { Header = InternationalizationManager.Instance.GetTranslation("iconTrayExit") }; + menu.Items[0] = header; + menu.Items[1] = open; + menu.Items[2] = settings; + menu.Items[3] = exit; + open.Click += (o, e) => Visibility = Visibility.Visible; + settings.Click += (o, e) => App.API.OpenSettingDialog(); + exit.Click += (o, e) => Close(); } private void InitializeNotifyIcon() @@ -178,29 +184,33 @@ namespace Flow.Launcher Visible = !_settings.HideNotifyIcon }; var menu = new ContextMenuStrip(); - var items = menu.Items; + contextMenu = new ContextMenu(); + + MenuItem header = new MenuItem() { Header = "Flow Launcher", IsEnabled = false }; + MenuItem open = new MenuItem() { Header = InternationalizationManager.Instance.GetTranslation("iconTrayOpen") }; + MenuItem settings = new MenuItem() { Header = InternationalizationManager.Instance.GetTranslation("iconTraySettings") }; + MenuItem exit = new MenuItem() { Header = InternationalizationManager.Instance.GetTranslation("iconTrayExit") }; - var open = items.Add(InternationalizationManager.Instance.GetTranslation("iconTrayOpen")); open.Click += (o, e) => Visibility = Visibility.Visible; - var setting = items.Add(InternationalizationManager.Instance.GetTranslation("iconTraySettings")); - setting.Click += (o, e) => App.API.OpenSettingDialog(); - var exit = items.Add(InternationalizationManager.Instance.GetTranslation("iconTrayExit")); + settings.Click += (o, e) => App.API.OpenSettingDialog(); exit.Click += (o, e) => Close(); + contextMenu.Items.Add(header); + contextMenu.Items.Add(open); + contextMenu.Items.Add(settings); + contextMenu.Items.Add(exit); - _notifyIcon.ContextMenuStrip = menu; + _notifyIcon.ContextMenuStrip = menu; /*it need for close the context menu. if not, context menu can't close. */ _notifyIcon.MouseClick += (o, e) => { - if (e.Button == MouseButtons.Left) + switch (e.Button) { - if (menu.Visible) - { - menu.Close(); - } - else - { - var p = System.Windows.Forms.Cursor.Position; - menu.Show(p); - } + case MouseButtons.Left: + _viewModel.ToggleFlowLauncher(); + break; + + case MouseButtons.Right: + contextMenu.IsOpen = true; + break; } }; } From 02036f13a401cb87628aa2f3229de57312d28f29 Mon Sep 17 00:00:00 2001 From: DB p Date: Wed, 20 Oct 2021 23:58:34 +0900 Subject: [PATCH 004/225] add width slider --- .../UserSettings/Settings.cs | 11 +++++++++- Flow.Launcher/SettingWindow.xaml | 20 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index 907314ba8..b9afa819a 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -10,10 +10,19 @@ namespace Flow.Launcher.Infrastructure.UserSettings public class Settings : BaseModel { private string language = "en"; - + private int windowsize = 580; public string Hotkey { get; set; } = $"{KeyConstant.Alt} + {KeyConstant.Space}"; public string OpenResultModifiers { get; set; } = KeyConstant.Alt; public bool ShowOpenResultHotkey { get; set; } = true; + public int WindowSize + { + get => windowsize; set + { + windowsize = value; + OnPropertyChanged(); + } + } + public string Language { get => language; set diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 7dc8829be..8873d8aae 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -674,6 +674,24 @@ + + + + + + + + + + + +  + + + + + @@ -753,6 +771,7 @@ + @@ -765,6 +784,7 @@ + From 616e98af6022615797df4258703a2cfd51ea6aa1 Mon Sep 17 00:00:00 2001 From: DB p Date: Thu, 21 Oct 2021 10:07:11 +0900 Subject: [PATCH 005/225] wip --- Flow.Launcher.Infrastructure/UserSettings/Settings.cs | 4 ++-- Flow.Launcher/Themes/Base.xaml | 5 +++-- Flow.Launcher/ViewModel/SettingWindowViewModel.cs | 6 ++++++ 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index b9afa819a..99879e64e 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -10,11 +10,11 @@ namespace Flow.Launcher.Infrastructure.UserSettings public class Settings : BaseModel { private string language = "en"; - private int windowsize = 580; + public double windowsize = 580; public string Hotkey { get; set; } = $"{KeyConstant.Alt} + {KeyConstant.Space}"; public string OpenResultModifiers { get; set; } = KeyConstant.Alt; public bool ShowOpenResultHotkey { get; set; } = true; - public int WindowSize + public double WindowSize { get => windowsize; set { diff --git a/Flow.Launcher/Themes/Base.xaml b/Flow.Launcher/Themes/Base.xaml index 19612af70..d7df48d93 100644 --- a/Flow.Launcher/Themes/Base.xaml +++ b/Flow.Launcher/Themes/Base.xaml @@ -1,6 +1,7 @@  + xmlns:system="clr-namespace:System;assembly=mscorlib" + xmlns:userSettings="clr-namespace:Flow.Launcher"> diff --git a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs index e85d01b1b..cbb99962b 100644 --- a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs +++ b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs @@ -304,6 +304,12 @@ namespace Flow.Launcher.ViewModel } } + public double WindowWidthSize + { + get { return Settings.WindowSize; } + set { Settings.WindowSize = value; } + } + public bool UseGlyphIcons { get { return Settings.UseGlyphIcons; } From 6af1262ca6255ec7ad58b6e86d3fbb0abc5873f9 Mon Sep 17 00:00:00 2001 From: DB p Date: Thu, 21 Oct 2021 18:16:05 +0900 Subject: [PATCH 006/225] Adjust Width in Theme.cs --- Flow.Launcher.Core/Resource/Theme.cs | 7 ++++--- Flow.Launcher.Infrastructure/UserSettings/Settings.cs | 1 + Flow.Launcher/SettingWindow.xaml | 2 +- Flow.Launcher/Themes/Base.xaml | 4 ++-- Flow.Launcher/ViewModel/SettingWindowViewModel.cs | 2 +- 5 files changed, 9 insertions(+), 7 deletions(-) diff --git a/Flow.Launcher.Core/Resource/Theme.cs b/Flow.Launcher.Core/Resource/Theme.cs index 4648aef63..d934491be 100644 --- a/Flow.Launcher.Core/Resource/Theme.cs +++ b/Flow.Launcher.Core/Resource/Theme.cs @@ -191,7 +191,7 @@ namespace Flow.Launcher.Core.Resource } var windowStyle = dict["WindowStyle"] as Style; - + /* var width = windowStyle?.Setters.OfType().Where(x => x.Property.Name == "Width") .Select(x => x.Value).FirstOrDefault(); @@ -202,9 +202,10 @@ namespace Flow.Launcher.Core.Resource width = windowStyle?.Setters.OfType().Where(x => x.Property.Name == "Width") .Select(x => x.Value).FirstOrDefault(); } - + */ + var width = Settings.WindowSize; + windowStyle.Setters.Add(new Setter(Window.WidthProperty, width)); mainWindowWidth = (double)width; - return dict; } diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index 99879e64e..3bae6a24c 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -21,6 +21,7 @@ namespace Flow.Launcher.Infrastructure.UserSettings windowsize = value; OnPropertyChanged(); } + } public string Language diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 8873d8aae..403e6adaf 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -683,7 +683,7 @@ Click="OpenPluginFolder" Grid.Column="2">Open Theme Folder--> - +  diff --git a/Flow.Launcher/Themes/Base.xaml b/Flow.Launcher/Themes/Base.xaml index d7df48d93..ad13e0101 100644 --- a/Flow.Launcher/Themes/Base.xaml +++ b/Flow.Launcher/Themes/Base.xaml @@ -1,7 +1,7 @@  + xmlns:userSettings="clr-namespace:Flow.Launcher.Infrastructure.UserSettings;assembly=Flow.Launcher.Infrastructure"> diff --git a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs index cbb99962b..b5fc2d803 100644 --- a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs +++ b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs @@ -307,7 +307,7 @@ namespace Flow.Launcher.ViewModel public double WindowWidthSize { get { return Settings.WindowSize; } - set { Settings.WindowSize = value; } + set { Settings.WindowSize = value;} } public bool UseGlyphIcons From 5e0172cbf6e4852c3d3970c352d7f5827a65cf7e Mon Sep 17 00:00:00 2001 From: DB p Date: Thu, 21 Oct 2021 18:31:14 +0900 Subject: [PATCH 007/225] - Remove Comment - Add String "Window Width Size" --- Flow.Launcher.Core/Resource/Theme.cs | 14 +------------- .../UserSettings/Settings.cs | 2 +- Flow.Launcher/Languages/en.xaml | 1 + Flow.Launcher/SettingWindow.xaml | 6 ++---- Flow.Launcher/ViewModel/SettingWindowViewModel.cs | 2 +- 5 files changed, 6 insertions(+), 19 deletions(-) diff --git a/Flow.Launcher.Core/Resource/Theme.cs b/Flow.Launcher.Core/Resource/Theme.cs index d934491be..efd311acb 100644 --- a/Flow.Launcher.Core/Resource/Theme.cs +++ b/Flow.Launcher.Core/Resource/Theme.cs @@ -189,20 +189,8 @@ namespace Flow.Launcher.Core.Resource new[] { resultItemStyle, resultSubItemStyle, resultItemSelectedStyle, resultSubItemSelectedStyle, resultHotkeyItemStyle, resultHotkeyItemSelectedStyle }, o => Array.ForEach(setters, p => o.Setters.Add(p))); } - + /* Ignore Theme Window Width and use setting */ var windowStyle = dict["WindowStyle"] as Style; - /* - var width = windowStyle?.Setters.OfType().Where(x => x.Property.Name == "Width") - .Select(x => x.Value).FirstOrDefault(); - - if (width == null) - { - windowStyle = dict["BaseWindowStyle"] as Style; - - width = windowStyle?.Setters.OfType().Where(x => x.Property.Name == "Width") - .Select(x => x.Value).FirstOrDefault(); - } - */ var width = Settings.WindowSize; windowStyle.Setters.Add(new Setter(Window.WidthProperty, width)); mainWindowWidth = (double)width; diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index 3bae6a24c..1d4100138 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -4,7 +4,7 @@ using System.Drawing; using System.Text.Json.Serialization; using Flow.Launcher.Plugin; using Flow.Launcher.Plugin.SharedModels; - +using Flow.Launcher; namespace Flow.Launcher.Infrastructure.UserSettings { public class Settings : BaseModel diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 4a9b92700..bbb56b9ec 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -82,6 +82,7 @@ Are you sure you want to delete {0} plugin hotkey? Query window shadow effect Shadow effect has a substantial usage of GPU. Not recommended if your computer performance is limited. + Window Width Size Use Segoe Fluent Icons Use Segoe Fluent Icons for query results where supported diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 403e6adaf..e74cfff79 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -677,13 +677,11 @@ - + - - +  diff --git a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs index b5fc2d803..0fb6e6969 100644 --- a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs +++ b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs @@ -307,7 +307,7 @@ namespace Flow.Launcher.ViewModel public double WindowWidthSize { get { return Settings.WindowSize; } - set { Settings.WindowSize = value;} + set { Settings.WindowSize = value; ThemeManager.Instance.ChangeTheme(Settings.Theme); } } public bool UseGlyphIcons From 6b37adaf0797a407696032cfa3692caac8bca22f Mon Sep 17 00:00:00 2001 From: DB p Date: Thu, 21 Oct 2021 18:31:14 +0900 Subject: [PATCH 008/225] - Remove Comment - Add String "Window Width Size" --- Flow.Launcher.Core/Resource/Theme.cs | 14 +------------- .../UserSettings/Settings.cs | 2 +- Flow.Launcher/Languages/en.xaml | 1 + Flow.Launcher/SettingWindow.xaml | 6 ++---- Flow.Launcher/ViewModel/SettingWindowViewModel.cs | 6 +++++- 5 files changed, 10 insertions(+), 19 deletions(-) diff --git a/Flow.Launcher.Core/Resource/Theme.cs b/Flow.Launcher.Core/Resource/Theme.cs index d934491be..efd311acb 100644 --- a/Flow.Launcher.Core/Resource/Theme.cs +++ b/Flow.Launcher.Core/Resource/Theme.cs @@ -189,20 +189,8 @@ namespace Flow.Launcher.Core.Resource new[] { resultItemStyle, resultSubItemStyle, resultItemSelectedStyle, resultSubItemSelectedStyle, resultHotkeyItemStyle, resultHotkeyItemSelectedStyle }, o => Array.ForEach(setters, p => o.Setters.Add(p))); } - + /* Ignore Theme Window Width and use setting */ var windowStyle = dict["WindowStyle"] as Style; - /* - var width = windowStyle?.Setters.OfType().Where(x => x.Property.Name == "Width") - .Select(x => x.Value).FirstOrDefault(); - - if (width == null) - { - windowStyle = dict["BaseWindowStyle"] as Style; - - width = windowStyle?.Setters.OfType().Where(x => x.Property.Name == "Width") - .Select(x => x.Value).FirstOrDefault(); - } - */ var width = Settings.WindowSize; windowStyle.Setters.Add(new Setter(Window.WidthProperty, width)); mainWindowWidth = (double)width; diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index 3bae6a24c..1d4100138 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -4,7 +4,7 @@ using System.Drawing; using System.Text.Json.Serialization; using Flow.Launcher.Plugin; using Flow.Launcher.Plugin.SharedModels; - +using Flow.Launcher; namespace Flow.Launcher.Infrastructure.UserSettings { public class Settings : BaseModel diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 4a9b92700..bbb56b9ec 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -82,6 +82,7 @@ Are you sure you want to delete {0} plugin hotkey? Query window shadow effect Shadow effect has a substantial usage of GPU. Not recommended if your computer performance is limited. + Window Width Size Use Segoe Fluent Icons Use Segoe Fluent Icons for query results where supported diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 403e6adaf..8e20232ac 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -677,13 +677,11 @@ - + - - +  diff --git a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs index b5fc2d803..67d167113 100644 --- a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs +++ b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs @@ -307,7 +307,11 @@ namespace Flow.Launcher.ViewModel public double WindowWidthSize { get { return Settings.WindowSize; } - set { Settings.WindowSize = value;} + set + { + Settings.WindowSize = value; + ThemeManager.Instance.ChangeTheme(Settings.Theme); + } } public bool UseGlyphIcons From 5be44b68eadc64238bb8c9c1b0764440668a0491 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Thu, 21 Oct 2021 23:31:51 -0500 Subject: [PATCH 009/225] Add fody and use binding to change width --- Flow.Launcher.Core/Resource/Theme.cs | 1 - .../Flow.Launcher.Infrastructure.csproj | 5 +++++ .../UserSettings/Settings.cs | 17 +++++--------- Flow.Launcher/MainWindow.xaml | 1 + Flow.Launcher/MainWindow.xaml.cs | 5 +++++ Flow.Launcher/ViewModel/MainViewModel.cs | 10 +++++++++ .../ViewModel/SettingWindowViewModel.cs | 22 +++++++++---------- 7 files changed, 36 insertions(+), 25 deletions(-) diff --git a/Flow.Launcher.Core/Resource/Theme.cs b/Flow.Launcher.Core/Resource/Theme.cs index efd311acb..3abb426cb 100644 --- a/Flow.Launcher.Core/Resource/Theme.cs +++ b/Flow.Launcher.Core/Resource/Theme.cs @@ -365,7 +365,6 @@ namespace Flow.Launcher.Core.Resource var windowHelper = new WindowInteropHelper(w); // this determines the width of the main query window - w.Width = mainWindowWidth; windowHelper.EnsureHandle(); var accent = new AccentPolicy { AccentState = state }; diff --git a/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj b/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj index ef76fd617..e01bc1efd 100644 --- a/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj +++ b/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj @@ -50,10 +50,15 @@ + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index 1d4100138..614fc1de8 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -5,28 +5,21 @@ using System.Text.Json.Serialization; using Flow.Launcher.Plugin; using Flow.Launcher.Plugin.SharedModels; using Flow.Launcher; + namespace Flow.Launcher.Infrastructure.UserSettings { public class Settings : BaseModel { private string language = "en"; - public double windowsize = 580; public string Hotkey { get; set; } = $"{KeyConstant.Alt} + {KeyConstant.Space}"; public string OpenResultModifiers { get; set; } = KeyConstant.Alt; public bool ShowOpenResultHotkey { get; set; } = true; - public double WindowSize - { - get => windowsize; set - { - windowsize = value; - OnPropertyChanged(); - } - - } + public double WindowSize { get; set; } = 580; public string Language { - get => language; set + get => language; + set { language = value; OnPropertyChanged(); @@ -62,7 +55,7 @@ namespace Flow.Launcher.Infrastructure.UserSettings try { var precisionScore = (SearchPrecisionScore)Enum - .Parse(typeof(SearchPrecisionScore), value); + .Parse(typeof(SearchPrecisionScore), value); QuerySearchPrecision = precisionScore; StringMatcher.Instance.UserSettingSearchPrecision = precisionScore; diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml index 73b13be8c..dbf329b58 100644 --- a/Flow.Launcher/MainWindow.xaml +++ b/Flow.Launcher/MainWindow.xaml @@ -26,6 +26,7 @@ LocationChanged="OnLocationChanged" Deactivated="OnDeactivated" PreviewKeyDown="OnKeyDown" + Width="{Binding MainWindowWidth, Mode=OneTime}" Visibility="{Binding MainWindowVisibility, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" d:DataContext="{d:DesignInstance vm:MainViewModel}"> diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index 057c3f07d..79682806c 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -19,6 +19,7 @@ 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 { @@ -131,6 +132,10 @@ namespace Flow.Launcher _viewModel.QueryTextCursorMovedToEnd = false; } break; + case nameof(MainViewModel.MainWindowWidth): + MinWidth = _viewModel.MainWindowWidth; + MaxWidth = _viewModel.MainWindowWidth; + break; } }; _settings.PropertyChanged += (o, e) => diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs index e54014110..522d10b3a 100644 --- a/Flow.Launcher/ViewModel/MainViewModel.cs +++ b/Flow.Launcher/ViewModel/MainViewModel.cs @@ -22,6 +22,7 @@ using System.Threading.Channels; using ISavable = Flow.Launcher.Plugin.ISavable; using System.Windows.Threading; using NHotkey; +using Windows.Web.Syndication; namespace Flow.Launcher.ViewModel @@ -63,6 +64,13 @@ namespace Flow.Launcher.ViewModel _lastQuery = new Query(); _settings = settings; + _settings.PropertyChanged += (_, args) => + { + if (args.PropertyName == nameof(Settings.WindowSize)) + { + OnPropertyChanged(nameof(MainWindowWidth)); + } + }; _historyItemsStorage = new FlowLauncherJsonStorage(); _userSelectedRecordStorage = new FlowLauncherJsonStorage(); @@ -378,6 +386,8 @@ namespace Flow.Launcher.ViewModel public Visibility ProgressBarVisibility { get; set; } public Visibility MainWindowVisibility { get; set; } + public double MainWindowWidth => _settings.WindowSize; + public ICommand EscCommand { get; set; } public ICommand SelectNextItemCommand { get; set; } public ICommand SelectPrevItemCommand { get; set; } diff --git a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs index 67d167113..e2c1d9700 100644 --- a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs +++ b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs @@ -35,9 +35,11 @@ namespace Flow.Launcher.ViewModel Settings = _storage.Load(); Settings.PropertyChanged += (s, e) => { - if (e.PropertyName == nameof(Settings.ActivateTimes)) + switch (e.PropertyName) { - OnPropertyChanged(nameof(ActivatedTimes)); + case nameof(Settings.ActivateTimes): + OnPropertyChanged(nameof(ActivatedTimes)); + break; } }; } @@ -51,7 +53,7 @@ namespace Flow.Launcher.ViewModel public bool AutoUpdates { - get { return Settings.AutoUpdates; } + get => Settings.AutoUpdates; set { Settings.AutoUpdates = value; @@ -71,7 +73,7 @@ namespace Flow.Launcher.ViewModel private bool _portableMode = DataLocation.PortableDataLocationInUse(); public bool PortableMode { - get { return _portableMode; } + get => _portableMode; set { if (!_portable.CanUpdatePortability()) @@ -306,18 +308,14 @@ namespace Flow.Launcher.ViewModel public double WindowWidthSize { - get { return Settings.WindowSize; } - set - { - Settings.WindowSize = value; - ThemeManager.Instance.ChangeTheme(Settings.Theme); - } + get => Settings.WindowSize; + set => Settings.WindowSize = value; } public bool UseGlyphIcons { - get { return Settings.UseGlyphIcons; } - set { Settings.UseGlyphIcons = value; } + get => Settings.UseGlyphIcons; + set => Settings.UseGlyphIcons = value; } public Brush PreviewBackground From 674d6154a2156282b9c8bba03e18d5078d308429 Mon Sep 17 00:00:00 2001 From: DB p Date: Fri, 22 Oct 2021 14:39:26 +0900 Subject: [PATCH 010/225] Display Querybox when Using Width slider. --- Flow.Launcher/ViewModel/SettingWindowViewModel.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs index e2c1d9700..c869f5601 100644 --- a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs +++ b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs @@ -309,7 +309,11 @@ namespace Flow.Launcher.ViewModel public double WindowWidthSize { get => Settings.WindowSize; - set => Settings.WindowSize = value; + set + { + Settings.WindowSize = value; + Application.Current.MainWindow.Visibility = Visibility.Visible; + } } public bool UseGlyphIcons From 08c643adcc58f90843ddaa9badc2e21ec4c1ca9e Mon Sep 17 00:00:00 2001 From: DB p Date: Fri, 22 Oct 2021 16:41:35 +0900 Subject: [PATCH 011/225] Add "IsMoveToPointEnabled" property --- Flow.Launcher/SettingWindow.xaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 8e20232ac..9126ab4a1 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -681,7 +681,7 @@ - +  From 64a489b3129914543befa8ad4eeae4fc535d97e0 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Fri, 22 Oct 2021 13:41:36 -0500 Subject: [PATCH 012/225] Use Hacky way to show up windows when width change. Clear query to prevent large area of window preventing user change width. --- Flow.Launcher/ViewModel/MainViewModel.cs | 15 +++++++++++++-- Flow.Launcher/ViewModel/SettingWindowViewModel.cs | 6 +----- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs index 522d10b3a..cd6392cb6 100644 --- a/Flow.Launcher/ViewModel/MainViewModel.cs +++ b/Flow.Launcher/ViewModel/MainViewModel.cs @@ -52,6 +52,7 @@ namespace Flow.Launcher.ViewModel private ChannelWriter _resultsUpdateChannelWriter; private Task _resultsViewUpdateTask; + private bool _keepVisibility = false; #endregion @@ -64,10 +65,20 @@ namespace Flow.Launcher.ViewModel _lastQuery = new Query(); _settings = settings; - _settings.PropertyChanged += (_, args) => + _settings.PropertyChanged += async (_, args) => { if (args.PropertyName == nameof(Settings.WindowSize)) { + ChangeQueryText(""); + if (MainWindowVisibility == Visibility.Collapsed) + { + ToggleFlowLauncher(); + _keepVisibility = true; + await Task.Delay(1000); + _keepVisibility = false; + Application.Current.MainWindow.Activate(); + } + OnPropertyChanged(nameof(MainWindowWidth)); } }; @@ -742,7 +753,7 @@ namespace Flow.Launcher.ViewModel public void Hide() { - if (MainWindowVisibility != Visibility.Collapsed) + if (MainWindowVisibility != Visibility.Collapsed && !_keepVisibility) { ToggleFlowLauncher(); } diff --git a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs index c869f5601..e2c1d9700 100644 --- a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs +++ b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs @@ -309,11 +309,7 @@ namespace Flow.Launcher.ViewModel public double WindowWidthSize { get => Settings.WindowSize; - set - { - Settings.WindowSize = value; - Application.Current.MainWindow.Visibility = Visibility.Visible; - } + set => Settings.WindowSize = value; } public bool UseGlyphIcons From a83f9df19c978787220cf0f57167ee1b33176d00 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Fri, 22 Oct 2021 13:57:22 -0500 Subject: [PATCH 013/225] Revert "Use Hacky way to show up windows when width change." This reverts commit 64a489b3129914543befa8ad4eeae4fc535d97e0. --- Flow.Launcher/ViewModel/MainViewModel.cs | 15 ++------------- Flow.Launcher/ViewModel/SettingWindowViewModel.cs | 6 +++++- 2 files changed, 7 insertions(+), 14 deletions(-) diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs index cd6392cb6..522d10b3a 100644 --- a/Flow.Launcher/ViewModel/MainViewModel.cs +++ b/Flow.Launcher/ViewModel/MainViewModel.cs @@ -52,7 +52,6 @@ namespace Flow.Launcher.ViewModel private ChannelWriter _resultsUpdateChannelWriter; private Task _resultsViewUpdateTask; - private bool _keepVisibility = false; #endregion @@ -65,20 +64,10 @@ namespace Flow.Launcher.ViewModel _lastQuery = new Query(); _settings = settings; - _settings.PropertyChanged += async (_, args) => + _settings.PropertyChanged += (_, args) => { if (args.PropertyName == nameof(Settings.WindowSize)) { - ChangeQueryText(""); - if (MainWindowVisibility == Visibility.Collapsed) - { - ToggleFlowLauncher(); - _keepVisibility = true; - await Task.Delay(1000); - _keepVisibility = false; - Application.Current.MainWindow.Activate(); - } - OnPropertyChanged(nameof(MainWindowWidth)); } }; @@ -753,7 +742,7 @@ namespace Flow.Launcher.ViewModel public void Hide() { - if (MainWindowVisibility != Visibility.Collapsed && !_keepVisibility) + if (MainWindowVisibility != Visibility.Collapsed) { ToggleFlowLauncher(); } diff --git a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs index e2c1d9700..c869f5601 100644 --- a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs +++ b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs @@ -309,7 +309,11 @@ namespace Flow.Launcher.ViewModel public double WindowWidthSize { get => Settings.WindowSize; - set => Settings.WindowSize = value; + set + { + Settings.WindowSize = value; + Application.Current.MainWindow.Visibility = Visibility.Visible; + } } public bool UseGlyphIcons From 9d3096050f51c6a9876234fc8a15b01ac204d4e4 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Fri, 22 Oct 2021 15:26:13 -0500 Subject: [PATCH 014/225] Bind width to preview --- Flow.Launcher/SettingWindow.xaml | 250 +++++++++--------- .../ViewModel/SettingWindowViewModel.cs | 6 +- 2 files changed, 124 insertions(+), 132 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 9126ab4a1..a696aefdd 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -68,7 +68,7 @@ - + @@ -223,7 +223,7 @@ - + @@ -432,7 +432,7 @@ - + @@ -457,32 +457,32 @@ - - - - - - - + + + + + + - - - - - - - - - - - - + + + + + + + + + + + - - @@ -494,63 +494,63 @@ - - - + - - - + + - - - - - - - + + + + - - - - - + + + + - + - - - - - - - + + + + + + + - - + + @@ -561,7 +561,7 @@ - + @@ -587,7 +587,7 @@ - + @@ -600,6 +600,35 @@ + + + + + + + + + +  + + + + + + + + + + + + + +  + + + + + - - - - - - - - - - -  - - - - - - - - - - - - - - - - -  - - - - - @@ -789,8 +785,8 @@ - - + + @@ -895,8 +891,8 @@ - - + + @@ -910,7 +906,7 @@ - + @@ -977,53 +973,53 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - + + + - - diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 1d270e42f..120fd328c 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -596,8 +596,17 @@ Style="{DynamicResource SettingSubTitleLabel}" /> - Date: Sun, 31 Oct 2021 08:09:12 +0900 Subject: [PATCH 030/225] - Remove URL - Add Icon --- .../SettingsControl.xaml | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/SettingsControl.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/SettingsControl.xaml index 54ef8d8e4..68f5adc3b 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/SettingsControl.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/SettingsControl.xaml @@ -56,7 +56,6 @@ - + - + + + Width="130"> - + - + + + + + + + + From 102e7cb1b93c4d29bdd891291b2cf88e770c778c Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 31 Oct 2021 17:18:03 +0900 Subject: [PATCH 031/225] Fix HideonStartup (#783) --- Flow.Launcher/ViewModel/MainViewModel.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs index 4588a677f..2e0eb4924 100644 --- a/Flow.Launcher/ViewModel/MainViewModel.cs +++ b/Flow.Launcher/ViewModel/MainViewModel.cs @@ -729,7 +729,7 @@ namespace Flow.Launcher.ViewModel { if (MainWindowVisibility != Visibility.Collapsed) { - ToggleFlowLauncher(); + MainWindowVisibility = Visibility.Collapsed; } } From 58c599e748860e48fefea59b3a30fb8bbddfbe3f Mon Sep 17 00:00:00 2001 From: DB p Date: Mon, 1 Nov 2021 04:35:58 +0900 Subject: [PATCH 032/225] Move "HideEmptyQuery" from toggleflow to hide. --- Flow.Launcher/ViewModel/MainViewModel.cs | 39 +++++++++++------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs index 4588a677f..fde5bb467 100644 --- a/Flow.Launcher/ViewModel/MainViewModel.cs +++ b/Flow.Launcher/ViewModel/MainViewModel.cs @@ -704,33 +704,30 @@ namespace Flow.Launcher.ViewModel } 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; + Hide(); } } - public void Hide() + public async void Hide() { - if (MainWindowVisibility != Visibility.Collapsed) + switch (_settings.LastQueryMode) { - ToggleFlowLauncher(); + 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; } #endregion From 5aeab2456b8aceb150f7756d6c32cb86287a3cfb Mon Sep 17 00:00:00 2001 From: DB p Date: Mon, 1 Nov 2021 07:33:59 +0900 Subject: [PATCH 033/225] add force closin --- Flow.Launcher/MainWindow.xaml.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index 057c3f07d..16c9fd05c 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -53,7 +53,7 @@ namespace Flow.Launcher _viewModel.Save(); e.Cancel = true; await PluginManager.DisposePluginsAsync(); - Application.Current.Shutdown(); + Environment.Exit(0); } private void OnInitialized(object sender, EventArgs e) @@ -185,7 +185,7 @@ namespace Flow.Launcher var setting = items.Add(InternationalizationManager.Instance.GetTranslation("iconTraySettings")); setting.Click += (o, e) => App.API.OpenSettingDialog(); var exit = items.Add(InternationalizationManager.Instance.GetTranslation("iconTrayExit")); - exit.Click += (o, e) => Close(); + exit.Click += (o, e) => Environment.Exit(0); _notifyIcon.ContextMenuStrip = menu; _notifyIcon.MouseClick += (o, e) => From e04284a013d681a3f1fc6d9e5f22819219807e35 Mon Sep 17 00:00:00 2001 From: DB p Date: Mon, 1 Nov 2021 07:33:59 +0900 Subject: [PATCH 034/225] add force closing --- Flow.Launcher/MainWindow.xaml.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index 057c3f07d..b0e3492d2 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -53,7 +53,7 @@ namespace Flow.Launcher _viewModel.Save(); e.Cancel = true; await PluginManager.DisposePluginsAsync(); - Application.Current.Shutdown(); + Environment.Exit(0); } private void OnInitialized(object sender, EventArgs e) From 323c2422ef1bdaad8cfea04f9116738c3fd4df75 Mon Sep 17 00:00:00 2001 From: kubalav Date: Tue, 2 Nov 2021 19:51:28 +0100 Subject: [PATCH 035/225] Update Slovak translation --- Flow.Launcher/Languages/sk.xaml | 35 ++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/Flow.Launcher/Languages/sk.xaml b/Flow.Launcher/Languages/sk.xaml index 70a5d3b7c..51b03db5d 100644 --- a/Flow.Launcher/Languages/sk.xaml +++ b/Flow.Launcher/Languages/sk.xaml @@ -13,47 +13,58 @@ Nastavenia O aplikácii Ukončiť + Zavrieť Nastavenia Flow Launchera Všeobecné Prenosný režim + Uloží všetky nastavenia a používateľské údaje do jedného centrálneho priečinka (Užitočné pri vyberateľných diskoch a cloudových službách). Spustiť Flow Launcher po štarte systému Schovať Flow Launcher po strate fokusu Nezobrazovať upozornenia na novú verziu Zapamätať si posledné umiestnenie Jazyk Posledné vyhľadávanie + Zobrazí/skryje predchádzajúce výsledky pri opätovnej aktivácii Flow Launchera. Ponechať Označiť Vymazať Max. výsledkov Ignorovať klávesové skratky v režime na celú obrazovku + Zakázať aktiváciu Flow Launchera, keď je aktívna aplikácia na celú obrazovku (odporúčané pre hry). Priečinok s Pythonom Automatická aktualizácia Vybrať Schovať Flow Launcher po spustení Schovať ikonu z oblasti oznámení Presnosť vyhľadávania + Mení minimálne skóre zhody potrebné na zobrazenie výsledkov. Použiť Pinyin Umožňuje vyhľadávanie pomocou Pinyin. Pinyin je štandardný systém romanizovaného pravopisu pre transliteráciu čínštiny Efekt tieňa nie je povolený, kým má aktuálny motív povolený efekt rozostrenia - + - Plugin + Pluginy Nájsť ďalšie pluginy - Povolené - Zakázané + Zap. + Vyp. Skratka akcie Aktuálna akcia skratky: Nová akcia skratky: Aktuálna priorita: Nová priorita: - Priorita: + Priorita Priečinok s pluginmi - Autor + Autor: Príprava: Čas dopytu: + + + + Repozitár pluginov + Obnoviť + Inštalovať Motív @@ -65,12 +76,17 @@ Nepriehľadnosť Motív {0} neexistuje, návrat na predvolený motív Nepodarilo sa nečítať motív {0}, návrat na predvolený motív + Priečinok s motívmi + Otvoriť priečinok s motívmi Klávesové skratky Klávesová skratka pre Flow Launcher - Modifikáčné klávesy na otvorenie výsledkov + Zadajte skratku na zobrazenie/skrytie Flow Launchera. + Otvoriť výsledok modifikačným klávesom + Vyberte modifikačný kláves na otvorenie výsledku pomocou klávesnice. Zobraziť klávesovú skratku + Zobrazí klávesovú skratku spolu s výsledkami. Vlastná klávesová skratka na vyhľadávanie Dopyt Odstrániť @@ -115,6 +131,7 @@ Tipy na používanie: + Zmena priority Vyššie číslo znamená, že výsledok bude vyššie. Skúste nastaviť napr. 5. Ak chcete, aby boli výsledky nižšie ako ktorékoľvek iné doplnky, zadajte záporné číslo Prosím, zadajte platné číslo pre prioritu! @@ -160,8 +177,8 @@ Čakajte, prosím… - Kontrolujú sa akutalizácie - Už máte najnovšiu verizu Flow Launchera + Kontrolujú sa aktualizácie + Už máte najnovšiu verziu Flow Launchera Bola nájdená aktualizácia Aktualizuje sa… Flow Launcher nedokázal presunúť používateľské údaje do aktualizovanej verzie. From 6f004a4774718c83e81a5c1a3c5974710788de3b Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Tue, 2 Nov 2021 15:07:11 -0500 Subject: [PATCH 036/225] Custom Explorer Binding (Part 1) --- .../UserSettings/CustomExplorerViewModel.cs | 17 ++ .../UserSettings/Settings.cs | 25 +++ Flow.Launcher/App.xaml.cs | 2 +- Flow.Launcher/Languages/en.xaml | 3 +- Flow.Launcher/SelectFileManagerWindow.xaml | 208 +++++++++++------- Flow.Launcher/SelectFileManagerWindow.xaml.cs | 9 +- Flow.Launcher/SettingWindow.xaml.cs | 2 +- 7 files changed, 181 insertions(+), 85 deletions(-) create mode 100644 Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs diff --git a/Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs b/Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs new file mode 100644 index 000000000..4fd5e317a --- /dev/null +++ b/Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Flow.Launcher.ViewModel +{ + public class CustomExplorerViewModel + { + public string Name { get; set; } + public string Path { get; set; } + public string FileArgument { get; set; } = "\"%d\""; + public string DirectoryArgument { get; set; } = "\"%d\""; + public bool Editable { get; init; } = true; + } +} diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index 102446158..f1c5fd442 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -1,9 +1,11 @@ using System; +using System.Collections.Generic; using System.Collections.ObjectModel; using System.Drawing; using System.Text.Json.Serialization; using Flow.Launcher.Plugin; using Flow.Launcher.Plugin.SharedModels; +using Flow.Launcher.ViewModel; namespace Flow.Launcher.Infrastructure.UserSettings { @@ -34,6 +36,29 @@ namespace Flow.Launcher.Infrastructure.UserSettings public string ResultFontStretch { get; set; } public bool UseGlyphIcons { get; set; } = true; + public CustomExplorerViewModel CustomExplorer { get; set; } + public List CustomExplorerList { get; set; } = new() + { + new() + { + Name = "Explorer", + Path = "explorer", + FileArgument = "/select, \"%f\"", + DirectoryArgument = "\"%d\"", + Editable = false + }, + new() + { + Name = "Total Commander", + Path = @"C:\Program Files\TOTALCMD\totalcommander.exe" + }, + new() + { + Name = "Dopus", + Path = @"c:\programe files\dopus\dopus.exe" + } + }; + /// /// when false Alphabet static service will always return empty results diff --git a/Flow.Launcher/App.xaml.cs b/Flow.Launcher/App.xaml.cs index 8c869e941..75925b1e0 100644 --- a/Flow.Launcher/App.xaml.cs +++ b/Flow.Launcher/App.xaml.cs @@ -101,7 +101,7 @@ namespace Flow.Launcher API.SaveAppAllSettings(); - _mainVM.MainWindowVisibility = _settings.HideOnStartup ? Visibility.Hidden : Visibility.Visible; + _mainVM.MainWindowVisibility = _settings.HideOnStartup ? Visibility.Collapsed : Visibility.Visible; Log.Info("|App.OnStartup|End Flow Launcher startup ---------------------------------------------------- "); }); } diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 15954c896..84f7c06b1 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -135,7 +135,8 @@ Please specify the file location of the file manager you using and add arguments (optional) if necessary. File Manager Path - Argument + Argument For Directory + Argument For File Parent Directory Change Priority diff --git a/Flow.Launcher/SelectFileManagerWindow.xaml b/Flow.Launcher/SelectFileManagerWindow.xaml index 9fb9ee1cd..55eceae27 100644 --- a/Flow.Launcher/SelectFileManagerWindow.xaml +++ b/Flow.Launcher/SelectFileManagerWindow.xaml @@ -2,112 +2,154 @@ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:local="clr-namespace:Flow.Launcher" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:ui="http://schemas.modernwpf.com/2019" - xmlns:local="clr-namespace:Flow.Launcher" - mc:Ignorable="d" + Title="{DynamicResource fileManagerWindow}" + Width="500" + Height="420" + Background="#f3f3f3" + DataContext="{Binding RelativeSource={RelativeSource Self}}" + ResizeMode="NoResize" WindowStartupLocation="CenterScreen" - Title="{DynamicResource fileManagerWindow}" Height="420" Width="500" ResizeMode="NoResize" Background="#f3f3f3"> + mc:Ignorable="d"> - + - + - - + + - + - - - - - - - - + + + + + + + + - - + + - + - + - - + + - - - - - - + + + + + + + + @@ -116,10 +158,16 @@ - - diff --git a/Flow.Launcher/SelectFileManagerWindow.xaml.cs b/Flow.Launcher/SelectFileManagerWindow.xaml.cs index 6fcf6feef..429ccec49 100644 --- a/Flow.Launcher/SelectFileManagerWindow.xaml.cs +++ b/Flow.Launcher/SelectFileManagerWindow.xaml.cs @@ -1,4 +1,6 @@ -using System; +using Flow.Launcher.Infrastructure.UserSettings; +using Flow.Launcher.ViewModel; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -19,8 +21,11 @@ namespace Flow.Launcher /// public partial class SelectFileManagerWindow : Window { - public SelectFileManagerWindow() + public Settings Settings { get; } + + public SelectFileManagerWindow(Settings settings) { + Settings = settings; InitializeComponent(); } } diff --git a/Flow.Launcher/SettingWindow.xaml.cs b/Flow.Launcher/SettingWindow.xaml.cs index 80f82e8ed..3066778c1 100644 --- a/Flow.Launcher/SettingWindow.xaml.cs +++ b/Flow.Launcher/SettingWindow.xaml.cs @@ -117,7 +117,7 @@ namespace Flow.Launcher private void OnSelectFileManagerClick(object sender, RoutedEventArgs e) { - SelectFileManagerWindow fileManagerChangeWindow = new SelectFileManagerWindow(); + SelectFileManagerWindow fileManagerChangeWindow = new SelectFileManagerWindow(settings); fileManagerChangeWindow.ShowDialog(); } From c2a633097b16e51e5242eeb5b69e6b125c0a3874 Mon Sep 17 00:00:00 2001 From: Jeremy Date: Wed, 3 Nov 2021 08:17:57 +1100 Subject: [PATCH 037/225] update wording and bump WebSearch version --- Flow.Launcher/CustomQueryHotkeySetting.xaml.cs | 1 - Flow.Launcher/HotkeyControl.xaml.cs | 2 -- Flow.Launcher/SettingWindow.xaml.cs | 2 +- Plugins/Flow.Launcher.Plugin.WebSearch/Languages/en.xaml | 4 ++-- Plugins/Flow.Launcher.Plugin.WebSearch/plugin.json | 2 +- 5 files changed, 4 insertions(+), 7 deletions(-) diff --git a/Flow.Launcher/CustomQueryHotkeySetting.xaml.cs b/Flow.Launcher/CustomQueryHotkeySetting.xaml.cs index 6d50ab2b0..0109474e1 100644 --- a/Flow.Launcher/CustomQueryHotkeySetting.xaml.cs +++ b/Flow.Launcher/CustomQueryHotkeySetting.xaml.cs @@ -9,7 +9,6 @@ using System.Windows; using System.Windows.Input; using System.Windows.Controls; - namespace Flow.Launcher { public partial class CustomQueryHotkeySetting : Window diff --git a/Flow.Launcher/HotkeyControl.xaml.cs b/Flow.Launcher/HotkeyControl.xaml.cs index 43aaa4889..2b6e275df 100644 --- a/Flow.Launcher/HotkeyControl.xaml.cs +++ b/Flow.Launcher/HotkeyControl.xaml.cs @@ -81,8 +81,6 @@ namespace Flow.Launcher } } - - public void SetHotkey(string keyStr, bool triggerValidate = true) { SetHotkey(new HotkeyModel(keyStr), triggerValidate); diff --git a/Flow.Launcher/SettingWindow.xaml.cs b/Flow.Launcher/SettingWindow.xaml.cs index c8b5e29ec..203248ad6 100644 --- a/Flow.Launcher/SettingWindow.xaml.cs +++ b/Flow.Launcher/SettingWindow.xaml.cs @@ -281,6 +281,7 @@ namespace Flow.Launcher API.ShowMainWindow(); } } + private void window_MouseDown(object sender, MouseButtonEventArgs e) /* for close hotkey popup */ { TextBox textBox = Keyboard.FocusedElement as TextBox; @@ -290,6 +291,5 @@ namespace Flow.Launcher textBox.MoveFocus(tRequest); } } - } } \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/en.xaml index cc19b57ca..632b6d3a3 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/en.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/en.xaml @@ -19,9 +19,9 @@ Autocomplete Data from: Please select a web search Are you sure you want to delete {0}? - If you have a web search on the service you want to use, you can add it to the Flow. For example, You can check the following formats in the address bar when you search 'casino' on Netflix . "https://www.netflix.com/search?q=Casino" So, you change the search word area as follows. + If you have a web search service you want to use, you can add it to Flow. For example, you can follow the url format in the address bar if you want to search 'casino' on Netflix: "https://www.netflix.com/search?q=Casino". To do this, change the search term 'Casino' as follows. https://www.netflix.com/search?q={q} - And add it to the place URL in this window, then you can search Netflix in Flow. + Add it to the URL section below. You can now search Netflix with Flow using any search terms. diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/plugin.json b/Plugins/Flow.Launcher.Plugin.WebSearch/plugin.json index 679f976d3..f83b1e40b 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/plugin.json @@ -26,7 +26,7 @@ "Name": "Web Searches", "Description": "Provide the web search ability", "Author": "qianlifeng", - "Version": "1.4.0", + "Version": "1.4.1", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.WebSearch.dll", From ad88e3fb34ef7d3e53916d64ac95650ff83ad8e7 Mon Sep 17 00:00:00 2001 From: kubalav Date: Wed, 3 Nov 2021 09:21:10 +0100 Subject: [PATCH 038/225] Update Slovak translation + bump version --- Flow.Launcher/Languages/sk.xaml | 11 +++++++---- Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml | 2 ++ Plugins/Flow.Launcher.Plugin.Sys/plugin.json | 2 +- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/Flow.Launcher/Languages/sk.xaml b/Flow.Launcher/Languages/sk.xaml index 51b03db5d..4014d215f 100644 --- a/Flow.Launcher/Languages/sk.xaml +++ b/Flow.Launcher/Languages/sk.xaml @@ -49,6 +49,7 @@ Nájsť ďalšie pluginy Zap. Vyp. + Nastavenie kľúčového slova akcie Skratka akcie Aktuálna akcia skratky: Nová akcia skratky: @@ -68,7 +69,8 @@ Motív - Prehliadať viac motívov + Galéria motívov + Ako vytvoriť motív Ahojte Písmo vyhľadávacieho poľa Písmo výsledkov @@ -104,7 +106,7 @@ Povoliť HTTP Proxy HTTP Server Port - Použív. meno + Používateľské meno Heslo Test Proxy Uložiť @@ -145,10 +147,11 @@ Nová skratka pre akciu bola priradená pre iný plugin, prosím, zvoľte inú skratku Úspešné Úspešne dokončené - Použite * ak nechcete určiť skratku pre akciu + Zadajte skratku akcie, ktorá je potrebná na spustenie pluginu. Ak nechcete zadať skratku akcie, použite *. V tom prípade plugin funguje bez kľúčových slov. - Vlastná klávesová skratka pre plugin + Klávesová skratka pre vlastné vyhľadávanie + Stlačením klávesovej skratky sa automaticky vloží zadaný výraz. Náhľad Klávesová skratka je nedostupná, prosím, zadajte novú Neplatná klávesová skratka pluginu diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml index 1b64699cd..f58574854 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml @@ -8,6 +8,7 @@ Vypnúť počítač Reštartovať počítač + Reštartovať počítač s rozšírenými možnosťami spúšťania pre núdzový režim a režim ladenia, ako aj s ďalšími možnosťami Odhlásiť Zamknúť počítač Zavrieť Flow Launcher @@ -29,6 +30,7 @@ Všetky dáta pluginov aktualizované Naozaj chcete počítač vypnúť? Naozaj chcete počítač reštartovať? + Naozaj chcete počítač reštartovať s pokročilými možnosťami spúšťania? Systémové príkazy Poskytuje príkazy súvisiace so systémom ako je vypnutie, uzamknutie počítača atď. diff --git a/Plugins/Flow.Launcher.Plugin.Sys/plugin.json b/Plugins/Flow.Launcher.Plugin.Sys/plugin.json index 1bfcd92a5..826a1b756 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Sys/plugin.json @@ -4,7 +4,7 @@ "Name": "System Commands", "Description": "Provide System related commands. e.g. shutdown,lock, setting etc.", "Author": "qianlifeng", - "Version": "1.4.0", + "Version": "1.4.1", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Sys.dll", From 58ee77f40f2819ee00e0a1f975b86d58b34c9e4e Mon Sep 17 00:00:00 2001 From: kubalav Date: Wed, 3 Nov 2021 09:29:33 +0100 Subject: [PATCH 039/225] Removed extra spaces before chevrons --- Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/sk.xaml | 2 +- Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/sk.xaml index 62f95534a..cb52898f2 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/sk.xaml +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/sk.xaml @@ -14,7 +14,7 @@ Prehliadať Kopírovať URL Kopírovať URL záložky do schránky - Načítať prehliadač z: + Načítať prehliadač z: Názov prehliadača Umiestnenie priečinka Data Pridať diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml index f58574854..42bfcab44 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml @@ -8,7 +8,7 @@ Vypnúť počítač Reštartovať počítač - Reštartovať počítač s rozšírenými možnosťami spúšťania pre núdzový režim a režim ladenia, ako aj s ďalšími možnosťami + Reštartovať počítač s rozšírenými možnosťami spúšťania pre núdzový režim a režim ladenia, ako aj s ďalšími možnosťami Odhlásiť Zamknúť počítač Zavrieť Flow Launcher From 0a74766b9a7ee2f727e86c0b9301a640d840560f Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Fri, 5 Nov 2021 07:39:10 +1100 Subject: [PATCH 040/225] remove obsolete comment --- Flow.Launcher.Core/Resource/Theme.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Flow.Launcher.Core/Resource/Theme.cs b/Flow.Launcher.Core/Resource/Theme.cs index 3abb426cb..6561419a1 100644 --- a/Flow.Launcher.Core/Resource/Theme.cs +++ b/Flow.Launcher.Core/Resource/Theme.cs @@ -364,7 +364,6 @@ namespace Flow.Launcher.Core.Resource { var windowHelper = new WindowInteropHelper(w); - // this determines the width of the main query window windowHelper.EnsureHandle(); var accent = new AccentPolicy { AccentState = state }; From 17f8ffed2d8acfa440d606028bb6daa31fb7e86c Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Fri, 5 Nov 2021 08:00:01 +1100 Subject: [PATCH 041/225] version bump BrowserBookmarks plugin --- Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json index 7d124169b..d72db3a90 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json @@ -4,7 +4,7 @@ "Name": "Browser Bookmarks", "Description": "Search your browser bookmarks", "Author": "qianlifeng, Ioannis G.", - "Version": "1.5.2", + "Version": "1.5.3", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.BrowserBookmark.dll", From 6498c6bd53cf87188bcf4782a5841132664c749d Mon Sep 17 00:00:00 2001 From: DB p Date: Fri, 5 Nov 2021 10:12:35 +0900 Subject: [PATCH 042/225] Merge dev for fix conflict --- Flow.Launcher/SettingWindow.xaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index ad77dee55..f90ebf4f9 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -1114,7 +1114,7 @@ - + @@ -1131,7 +1131,7 @@ - Date: Fri, 5 Nov 2021 12:23:46 -0500 Subject: [PATCH 043/225] Reformat xaml code --- Flow.Launcher/SettingWindow.xaml | 1503 ++++++++++++++++++------------ 1 file changed, 900 insertions(+), 603 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index f90ebf4f9..433feeb9f 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -1,28 +1,29 @@ - + Icon="Images\app.ico" + Loaded="OnLoaded" + MouseDown="window_MouseDown" + ResizeMode="CanResizeWithGrip" + WindowStartupLocation="CenterScreen" + mc:Ignorable="d"> @@ -32,7 +33,7 @@ - + @@ -46,9 +47,9 @@ - + - + @@ -60,25 +61,25 @@ - - + + - - + - - @@ -768,10 +829,13 @@ - - + + - + - + - - - + + + - - + + - + - - + + @@ -1185,47 +1395,56 @@ - - + + - - + + - + - - + + - - + + - - + + - - - - + + + + @@ -1239,26 +1458,32 @@ - + - - + + - - - - + + + + @@ -1272,8 +1497,11 @@ - + @@ -1282,17 +1510,23 @@ - + - + - - + Click="OpenPluginFolder" + Content="{DynamicResource OpenThemeFolder}" + DockPanel.Dock="Top" /> + @@ -1312,17 +1546,21 @@ - + - + - + @@ -1331,83 +1569,99 @@ - + - + - - + + - + - + - + - + - - + + - + SelectedItem="{Binding Settings.OpenResultModifiers}" /> - - + + - - - + + + - + - - + + Style="{StaticResource {x:Static GridView.GridViewStyleKey}}"> - + - + @@ -1417,21 +1671,31 @@ - - + Margin="5,0,0,0" + Content="{DynamicResource done}" + Click="btnDone_Click" + /> diff --git a/Flow.Launcher/SelectFileManagerWindow.xaml.cs b/Flow.Launcher/SelectFileManagerWindow.xaml.cs index 429ccec49..7ac8dc1cf 100644 --- a/Flow.Launcher/SelectFileManagerWindow.xaml.cs +++ b/Flow.Launcher/SelectFileManagerWindow.xaml.cs @@ -2,6 +2,7 @@ using Flow.Launcher.ViewModel; using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -19,14 +20,43 @@ namespace Flow.Launcher /// /// SelectFileManagerWindow.xaml에 대한 상호 작용 논리 /// - public partial class SelectFileManagerWindow : Window + public partial class SelectFileManagerWindow : Window, INotifyPropertyChanged { + private int selectedCustomExplorerIndex; + + public event PropertyChangedEventHandler PropertyChanged; + public Settings Settings { get; } + public int SelectedCustomExplorerIndex + { + get => selectedCustomExplorerIndex; set + { + selectedCustomExplorerIndex = value; + PropertyChanged?.Invoke(this, new(nameof(CustomExplorer))); + } + } + public List CustomExplorers { get; set; } + + public CustomExplorerViewModel CustomExplorer => CustomExplorers[SelectedCustomExplorerIndex]; public SelectFileManagerWindow(Settings settings) { Settings = settings; + CustomExplorers = Settings.CustomExplorerList.Select(x => x.Copy()).ToList(); + SelectedCustomExplorerIndex = Settings.CustomExplorerIndex; InitializeComponent(); } + + private void btnCancel_Click(object sender, RoutedEventArgs e) + { + Close(); + } + + private void btnDone_Click(object sender, RoutedEventArgs e) + { + Settings.CustomExplorerIndex = SelectedCustomExplorerIndex; + Settings.CustomExplorerList = CustomExplorers; + Close(); + } } } diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 8e9bc8042..e8064a421 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -618,7 +618,7 @@ diff --git a/Plugins/Flow.Launcher.Plugin.Program/Views/ProgramSetting.xaml b/Plugins/Flow.Launcher.Plugin.Program/Views/ProgramSetting.xaml index 9db840ad4..d4cf96e86 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Views/ProgramSetting.xaml +++ b/Plugins/Flow.Launcher.Plugin.Program/Views/ProgramSetting.xaml @@ -1,79 +1,164 @@ - - + + - - - + + + - - - - - + + + + + - - - + + Visibility="{Binding ActionKeywordsVisibility}" /> @@ -1455,8 +1455,8 @@ - + @@ -1840,11 +1840,18 @@ BorderThickness="0" Style="{DynamicResource SettingGroupBox}"> - - + + - + @@ -2060,10 +2067,7 @@ - + Date: Mon, 8 Nov 2021 10:53:13 +0900 Subject: [PATCH 065/225] Change the text to string --- Flow.Launcher/Languages/en.xaml | 2 + Flow.Launcher/SettingWindow.xaml | 2011 +++++++++++++++++------------- 2 files changed, 1174 insertions(+), 839 deletions(-) diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 3884d6997..289aec337 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -34,6 +34,8 @@ Maximum results shown Ignore hotkeys in fullscreen mode Disable Flow Launcher activation when a full screen application is active (Recommended for games). + Default File Manager + Select the file manager to use when opening the folder. Python Directory Auto Update Select diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index e8064a421..c567812f8 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -1,29 +1,30 @@ - + @@ -47,9 +48,15 @@ - + - + @@ -115,20 +122,25 @@ - - - + + + @@ -154,20 +166,25 @@ - - - + + + @@ -203,19 +220,21 @@ - - + + @@ -273,19 +292,21 @@ - - + + @@ -341,15 +362,17 @@ - - + + @@ -361,10 +384,11 @@ - + @@ -373,19 +397,22 @@ - - - + + + @@ -397,39 +424,46 @@ - + - + - + - - + + @@ -441,11 +475,12 @@ - + @@ -486,11 +521,12 @@ - + @@ -502,12 +538,16 @@ - - + + @@ -518,15 +558,17 @@ - - + + @@ -538,69 +580,100 @@ - - + + - + - + - + - + - - + + - + - + - - + + - - - + + + @@ -608,43 +681,61 @@ - + - - + + - - -  + +  - + - - + Content="{Binding Settings.CustomExplorer.Name}" /> Date: Mon, 8 Nov 2021 23:26:24 +0900 Subject: [PATCH 072/225] - Adjust Priority Button --- 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 049b0aa0c..5c9e80a5a 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -827,7 +827,7 @@ + TextWrapping="WrapWithOverflow"> @@ -838,10 +838,10 @@ VerticalAlignment="Center" FontSize="12" Text="{DynamicResource priority}" /> - + diff --git a/Flow.Launcher/PriorityChangeWindow.xaml.cs b/Flow.Launcher/PriorityChangeWindow.xaml.cs index 0adb1f080..8f392f0a3 100644 --- a/Flow.Launcher/PriorityChangeWindow.xaml.cs +++ b/Flow.Launcher/PriorityChangeWindow.xaml.cs @@ -26,7 +26,6 @@ namespace Flow.Launcher private Settings settings; private readonly Internationalization translater = InternationalizationManager.Instance; private readonly PluginViewModel pluginViewModel; - public PriorityChangeWindow(string pluginId, Settings settings, PluginViewModel pluginViewModel) { InitializeComponent(); @@ -62,8 +61,18 @@ namespace Flow.Launcher private void PriorityChangeWindow_Loaded(object sender, RoutedEventArgs e) { - OldPriority.Text = pluginViewModel.Priority.ToString(); + tbAction.Text = pluginViewModel.Priority.ToString(); + //OldPriority.Text = pluginViewModel.Priority.ToString(); tbAction.Focus(); } + private void window_MouseDown(object sender, MouseButtonEventArgs e) /* for close hotkey popup */ + { + TextBox textBox = Keyboard.FocusedElement as TextBox; + if (textBox != null) + { + TraversalRequest tRequest = new TraversalRequest(FocusNavigationDirection.Next); + textBox.MoveFocus(tRequest); + } + } } } \ No newline at end of file diff --git a/Flow.Launcher/Resources/CustomControlTemplate.xaml b/Flow.Launcher/Resources/CustomControlTemplate.xaml index 70fb18e2d..cd956d265 100644 --- a/Flow.Launcher/Resources/CustomControlTemplate.xaml +++ b/Flow.Launcher/Resources/CustomControlTemplate.xaml @@ -4,6 +4,535 @@ xmlns:system="clr-namespace:System;assembly=mscorlib" xmlns:ui="http://schemas.modernwpf.com/2019"> + + + + + + + + + + + + + + + + + + + + + + + + + + result = dlg.ShowDialog(); + + if (result == true) + { + TextBox path = (TextBox)(((FrameworkElement)sender).Parent as FrameworkElement).FindName("PathTextBox"); + path.Text = dlg.FileName; + path.Focus(); + ((Button)sender).Focus(); + } + } } } From c6054d4c56bdfa6a56193bb920a5a333915eb171 Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 31 Oct 2021 03:49:23 +0900 Subject: [PATCH 078/225] Add File Manager Item and popup window --- Flow.Launcher/SelectFileManagerWindow.xaml | 58 +++++++++++++++++++ Flow.Launcher/SelectFileManagerWindow.xaml.cs | 27 +++++++++ Flow.Launcher/SettingWindow.xaml | 22 ++++++- Flow.Launcher/SettingWindow.xaml.cs | 6 ++ 4 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 Flow.Launcher/SelectFileManagerWindow.xaml create mode 100644 Flow.Launcher/SelectFileManagerWindow.xaml.cs diff --git a/Flow.Launcher/SelectFileManagerWindow.xaml b/Flow.Launcher/SelectFileManagerWindow.xaml new file mode 100644 index 000000000..1a846710f --- /dev/null +++ b/Flow.Launcher/SelectFileManagerWindow.xaml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Flow.Launcher/SelectFileManagerWindow.xaml.cs b/Flow.Launcher/SelectFileManagerWindow.xaml.cs new file mode 100644 index 000000000..6fcf6feef --- /dev/null +++ b/Flow.Launcher/SelectFileManagerWindow.xaml.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Shapes; + +namespace Flow.Launcher +{ + /// + /// SelectFileManagerWindow.xaml에 대한 상호 작용 논리 + /// + public partial class SelectFileManagerWindow : Window + { + public SelectFileManagerWindow() + { + InitializeComponent(); + } + } +} diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 433feeb9f..55c650378 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -608,7 +608,27 @@ - + + + + + + + + diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 55c650378..8e9bc8042 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -617,8 +617,17 @@ Style="{DynamicResource SettingSubTitleLabel}" /> - Date: Tue, 2 Nov 2021 15:07:11 -0500 Subject: [PATCH 080/225] Custom Explorer Binding (Part 1) --- .../UserSettings/CustomExplorerViewModel.cs | 17 ++ .../UserSettings/Settings.cs | 25 +++ Flow.Launcher/App.xaml.cs | 2 +- Flow.Launcher/Languages/en.xaml | 3 +- Flow.Launcher/SelectFileManagerWindow.xaml | 208 +++++++++++------- Flow.Launcher/SelectFileManagerWindow.xaml.cs | 9 +- Flow.Launcher/SettingWindow.xaml.cs | 2 +- 7 files changed, 181 insertions(+), 85 deletions(-) create mode 100644 Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs diff --git a/Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs b/Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs new file mode 100644 index 000000000..4fd5e317a --- /dev/null +++ b/Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Flow.Launcher.ViewModel +{ + public class CustomExplorerViewModel + { + public string Name { get; set; } + public string Path { get; set; } + public string FileArgument { get; set; } = "\"%d\""; + public string DirectoryArgument { get; set; } = "\"%d\""; + public bool Editable { get; init; } = true; + } +} diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index 5f9082fe9..53ced1524 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -1,10 +1,12 @@ using System; +using System.Collections.Generic; using System.Collections.ObjectModel; using System.Drawing; using System.Text.Json.Serialization; using Flow.Launcher.Plugin; using Flow.Launcher.Plugin.SharedModels; using Flow.Launcher; +using Flow.Launcher.ViewModel; namespace Flow.Launcher.Infrastructure.UserSettings { @@ -37,6 +39,29 @@ namespace Flow.Launcher.Infrastructure.UserSettings public string ResultFontStretch { get; set; } public bool UseGlyphIcons { get; set; } = true; + public CustomExplorerViewModel CustomExplorer { get; set; } + public List CustomExplorerList { get; set; } = new() + { + new() + { + Name = "Explorer", + Path = "explorer", + FileArgument = "/select, \"%f\"", + DirectoryArgument = "\"%d\"", + Editable = false + }, + new() + { + Name = "Total Commander", + Path = @"C:\Program Files\TOTALCMD\totalcommander.exe" + }, + new() + { + Name = "Dopus", + Path = @"c:\programe files\dopus\dopus.exe" + } + }; + /// /// when false Alphabet static service will always return empty results diff --git a/Flow.Launcher/App.xaml.cs b/Flow.Launcher/App.xaml.cs index 8c869e941..75925b1e0 100644 --- a/Flow.Launcher/App.xaml.cs +++ b/Flow.Launcher/App.xaml.cs @@ -101,7 +101,7 @@ namespace Flow.Launcher API.SaveAppAllSettings(); - _mainVM.MainWindowVisibility = _settings.HideOnStartup ? Visibility.Hidden : Visibility.Visible; + _mainVM.MainWindowVisibility = _settings.HideOnStartup ? Visibility.Collapsed : Visibility.Visible; Log.Info("|App.OnStartup|End Flow Launcher startup ---------------------------------------------------- "); }); } diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 9d8e0caa0..e8469763f 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -138,7 +138,8 @@ Please specify the file location of the file manager you using and add arguments (optional) if necessary. File Manager Path - Argument + Argument For Directory + Argument For File Parent Directory Change Priority diff --git a/Flow.Launcher/SelectFileManagerWindow.xaml b/Flow.Launcher/SelectFileManagerWindow.xaml index 9fb9ee1cd..55eceae27 100644 --- a/Flow.Launcher/SelectFileManagerWindow.xaml +++ b/Flow.Launcher/SelectFileManagerWindow.xaml @@ -2,112 +2,154 @@ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:local="clr-namespace:Flow.Launcher" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:ui="http://schemas.modernwpf.com/2019" - xmlns:local="clr-namespace:Flow.Launcher" - mc:Ignorable="d" + Title="{DynamicResource fileManagerWindow}" + Width="500" + Height="420" + Background="#f3f3f3" + DataContext="{Binding RelativeSource={RelativeSource Self}}" + ResizeMode="NoResize" WindowStartupLocation="CenterScreen" - Title="{DynamicResource fileManagerWindow}" Height="420" Width="500" ResizeMode="NoResize" Background="#f3f3f3"> + mc:Ignorable="d"> - + - + - - + + - + - - - - - - - - + + + + + + + + - - + + - + - + - - + + - - - - - - + + + + + + + + @@ -116,10 +158,16 @@ - - diff --git a/Flow.Launcher/SelectFileManagerWindow.xaml.cs b/Flow.Launcher/SelectFileManagerWindow.xaml.cs index 6fcf6feef..429ccec49 100644 --- a/Flow.Launcher/SelectFileManagerWindow.xaml.cs +++ b/Flow.Launcher/SelectFileManagerWindow.xaml.cs @@ -1,4 +1,6 @@ -using System; +using Flow.Launcher.Infrastructure.UserSettings; +using Flow.Launcher.ViewModel; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -19,8 +21,11 @@ namespace Flow.Launcher /// public partial class SelectFileManagerWindow : Window { - public SelectFileManagerWindow() + public Settings Settings { get; } + + public SelectFileManagerWindow(Settings settings) { + Settings = settings; InitializeComponent(); } } diff --git a/Flow.Launcher/SettingWindow.xaml.cs b/Flow.Launcher/SettingWindow.xaml.cs index 62ef96b38..38ede8076 100644 --- a/Flow.Launcher/SettingWindow.xaml.cs +++ b/Flow.Launcher/SettingWindow.xaml.cs @@ -117,7 +117,7 @@ namespace Flow.Launcher private void OnSelectFileManagerClick(object sender, RoutedEventArgs e) { - SelectFileManagerWindow fileManagerChangeWindow = new SelectFileManagerWindow(); + SelectFileManagerWindow fileManagerChangeWindow = new SelectFileManagerWindow(settings); fileManagerChangeWindow.ShowDialog(); } From 6bfebe9fbd77acdfe2075ee644ecfc7addae0b3f Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Fri, 5 Nov 2021 12:53:53 -0500 Subject: [PATCH 081/225] Revert a test change --- Flow.Launcher/App.xaml.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher/App.xaml.cs b/Flow.Launcher/App.xaml.cs index 75925b1e0..8c869e941 100644 --- a/Flow.Launcher/App.xaml.cs +++ b/Flow.Launcher/App.xaml.cs @@ -101,7 +101,7 @@ namespace Flow.Launcher API.SaveAppAllSettings(); - _mainVM.MainWindowVisibility = _settings.HideOnStartup ? Visibility.Collapsed : Visibility.Visible; + _mainVM.MainWindowVisibility = _settings.HideOnStartup ? Visibility.Hidden : Visibility.Visible; Log.Info("|App.OnStartup|End Flow Launcher startup ---------------------------------------------------- "); }); } From a69f4a7ea636fd8acc4f2117886bb574f20586d3 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Fri, 5 Nov 2021 14:16:20 -0500 Subject: [PATCH 082/225] File Explore Binding (Part 2) --- .../UserSettings/CustomExplorerViewModel.cs | 17 ++++++++-- .../UserSettings/Settings.cs | 8 ++++- Flow.Launcher/SelectFileManagerWindow.xaml | 17 +++++----- Flow.Launcher/SelectFileManagerWindow.xaml.cs | 32 ++++++++++++++++++- Flow.Launcher/SettingWindow.xaml | 2 +- 5 files changed, 63 insertions(+), 13 deletions(-) diff --git a/Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs b/Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs index 4fd5e317a..7806debe1 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs @@ -1,4 +1,5 @@ -using System; +using Flow.Launcher.Plugin; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -6,12 +7,24 @@ using System.Threading.Tasks; namespace Flow.Launcher.ViewModel { - public class CustomExplorerViewModel + public class CustomExplorerViewModel : BaseModel { public string Name { get; set; } public string Path { get; set; } public string FileArgument { get; set; } = "\"%d\""; public string DirectoryArgument { get; set; } = "\"%d\""; public bool Editable { get; init; } = true; + + public CustomExplorerViewModel Copy() + { + return new CustomExplorerViewModel + { + Name = Name, + Path = Path, + FileArgument = FileArgument, + DirectoryArgument = DirectoryArgument, + Editable = Editable + }; + } } } diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index 53ced1524..f753a4a1a 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -39,7 +39,13 @@ namespace Flow.Launcher.Infrastructure.UserSettings public string ResultFontStretch { get; set; } public bool UseGlyphIcons { get; set; } = true; - public CustomExplorerViewModel CustomExplorer { get; set; } + public int CustomExplorerIndex { get; set; } = 0; + public CustomExplorerViewModel CustomExplorer + { + get => CustomExplorerList[CustomExplorerIndex]; + set => CustomExplorerList[CustomExplorerIndex] = value; + } + public List CustomExplorerList { get; set; } = new() { new() diff --git a/Flow.Launcher/SelectFileManagerWindow.xaml b/Flow.Launcher/SelectFileManagerWindow.xaml index 55eceae27..ff472f007 100644 --- a/Flow.Launcher/SelectFileManagerWindow.xaml +++ b/Flow.Launcher/SelectFileManagerWindow.xaml @@ -53,9 +53,8 @@ Margin="14,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Center" - ItemsSource="{Binding Settings.CustomExplorerList}" - SelectedIndex="0" - SelectedItem="{Binding Settings.CustomExplorer}"> + ItemsSource="{Binding CustomExplorers}" + SelectedIndex="{Binding SelectedCustomExplorerIndex}"> @@ -66,7 +65,7 @@ @@ -163,13 +162,15 @@ Width="100" Height="30" Margin="0,0,5,0" - Content="{DynamicResource cancel}" /> + Content="{DynamicResource cancel}" + Click="btnCancel_Click"/> + Margin="5,0,0,0" + Content="{DynamicResource done}" + Click="btnDone_Click" + /> diff --git a/Flow.Launcher/SelectFileManagerWindow.xaml.cs b/Flow.Launcher/SelectFileManagerWindow.xaml.cs index 429ccec49..7ac8dc1cf 100644 --- a/Flow.Launcher/SelectFileManagerWindow.xaml.cs +++ b/Flow.Launcher/SelectFileManagerWindow.xaml.cs @@ -2,6 +2,7 @@ using Flow.Launcher.ViewModel; using System; using System.Collections.Generic; +using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -19,14 +20,43 @@ namespace Flow.Launcher /// /// SelectFileManagerWindow.xaml에 대한 상호 작용 논리 /// - public partial class SelectFileManagerWindow : Window + public partial class SelectFileManagerWindow : Window, INotifyPropertyChanged { + private int selectedCustomExplorerIndex; + + public event PropertyChangedEventHandler PropertyChanged; + public Settings Settings { get; } + public int SelectedCustomExplorerIndex + { + get => selectedCustomExplorerIndex; set + { + selectedCustomExplorerIndex = value; + PropertyChanged?.Invoke(this, new(nameof(CustomExplorer))); + } + } + public List CustomExplorers { get; set; } + + public CustomExplorerViewModel CustomExplorer => CustomExplorers[SelectedCustomExplorerIndex]; public SelectFileManagerWindow(Settings settings) { Settings = settings; + CustomExplorers = Settings.CustomExplorerList.Select(x => x.Copy()).ToList(); + SelectedCustomExplorerIndex = Settings.CustomExplorerIndex; InitializeComponent(); } + + private void btnCancel_Click(object sender, RoutedEventArgs e) + { + Close(); + } + + private void btnDone_Click(object sender, RoutedEventArgs e) + { + Settings.CustomExplorerIndex = SelectedCustomExplorerIndex; + Settings.CustomExplorerList = CustomExplorers; + Close(); + } } } diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 8e9bc8042..e8064a421 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -618,7 +618,7 @@ diff --git a/Plugins/Flow.Launcher.Plugin.Program/Views/ProgramSetting.xaml b/Plugins/Flow.Launcher.Plugin.Program/Views/ProgramSetting.xaml index 9db840ad4..d4cf96e86 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Views/ProgramSetting.xaml +++ b/Plugins/Flow.Launcher.Plugin.Program/Views/ProgramSetting.xaml @@ -1,79 +1,164 @@ - - + + - - - + + + - - - - - + + + + + - - - -  + +  - + - - + Content="{Binding Settings.CustomExplorer.Name}" /> Date: Wed, 10 Nov 2021 08:30:10 +0900 Subject: [PATCH 101/225] Add File Select Dialogue --- Flow.Launcher/SelectFileManagerWindow.xaml | 41 ++++++++++++++----- Flow.Launcher/SelectFileManagerWindow.xaml.cs | 14 +++++++ 2 files changed, 44 insertions(+), 11 deletions(-) diff --git a/Flow.Launcher/SelectFileManagerWindow.xaml b/Flow.Launcher/SelectFileManagerWindow.xaml index 85d0d14ce..68e7b93b2 100644 --- a/Flow.Launcher/SelectFileManagerWindow.xaml +++ b/Flow.Launcher/SelectFileManagerWindow.xaml @@ -88,7 +88,7 @@ Orientation="Horizontal"> - + @@ -123,16 +123,35 @@ VerticalAlignment="Center" FontSize="14" Text="{DynamicResource fileManager_path}" /> - + + + + result = dlg.ShowDialog(); + + if (result == true) + { + TextBox path = (TextBox)(((FrameworkElement)sender).Parent as FrameworkElement).FindName("PathTextBox"); + path.Text = dlg.FileName; + path.Focus(); + ((Button)sender).Focus(); + } + } } } From b15ec0f83b01c21cc58d61e038c29ed5a81fde17 Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Wed, 10 Nov 2021 13:39:15 -0600 Subject: [PATCH 102/225] Json Ignore CustomExplorer Property because we don't use that to store value --- Flow.Launcher.Infrastructure/UserSettings/Settings.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index ce07dc0ea..34e86a3ed 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -40,6 +40,8 @@ namespace Flow.Launcher.Infrastructure.UserSettings public bool UseGlyphIcons { get; set; } = true; public int CustomExplorerIndex { get; set; } = 0; + + [JsonIgnore] public CustomExplorerViewModel CustomExplorer { get => CustomExplorerList[CustomExplorerIndex < CustomExplorerList.Count ? CustomExplorerIndex : 0]; From 2ecf57e980c18f940c760e26bf02aebd13b7d498 Mon Sep 17 00:00:00 2001 From: Jeremy Date: Thu, 11 Nov 2021 07:17:45 +1100 Subject: [PATCH 103/225] change the default theme for fresh install --- Flow.Launcher.Infrastructure/Constant.cs | 2 +- Flow.Launcher/App.xaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher.Infrastructure/Constant.cs b/Flow.Launcher.Infrastructure/Constant.cs index a5b89c300..564e03638 100644 --- a/Flow.Launcher.Infrastructure/Constant.cs +++ b/Flow.Launcher.Infrastructure/Constant.cs @@ -33,7 +33,7 @@ namespace Flow.Launcher.Infrastructure public static readonly string QueryTextBoxIconImagePath = $"{ProgramDirectory}\\Images\\mainsearch.svg"; - public const string DefaultTheme = "Darker"; + public const string DefaultTheme = "Win11Light"; public const string Themes = "Themes"; diff --git a/Flow.Launcher/App.xaml b/Flow.Launcher/App.xaml index 13d88e1c6..34097aa86 100644 --- a/Flow.Launcher/App.xaml +++ b/Flow.Launcher/App.xaml @@ -230,7 +230,7 @@ - + From 000a15e5747bed9d5984e40a74d0428f0ace280e Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Thu, 11 Nov 2021 08:06:37 +1100 Subject: [PATCH 104/225] remove commented out code --- Flow.Launcher/PriorityChangeWindow.xaml.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Flow.Launcher/PriorityChangeWindow.xaml.cs b/Flow.Launcher/PriorityChangeWindow.xaml.cs index 8f392f0a3..fe846e78b 100644 --- a/Flow.Launcher/PriorityChangeWindow.xaml.cs +++ b/Flow.Launcher/PriorityChangeWindow.xaml.cs @@ -62,7 +62,6 @@ namespace Flow.Launcher private void PriorityChangeWindow_Loaded(object sender, RoutedEventArgs e) { tbAction.Text = pluginViewModel.Priority.ToString(); - //OldPriority.Text = pluginViewModel.Priority.ToString(); tbAction.Focus(); } private void window_MouseDown(object sender, MouseButtonEventArgs e) /* for close hotkey popup */ From d3ece3a2e7e23abbb05cca68890faf3986b0dfcc Mon Sep 17 00:00:00 2001 From: Jeremy Date: Thu, 11 Nov 2021 08:15:13 +1100 Subject: [PATCH 105/225] revert changes to sln --- Flow.Launcher.sln | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher.sln b/Flow.Launcher.sln index 8e44ab421..21c3b47dc 100644 --- a/Flow.Launcher.sln +++ b/Flow.Launcher.sln @@ -1,6 +1,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.0.31903.59 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29806.167 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Flow.Launcher.Test", "Flow.Launcher.Test\Flow.Launcher.Test.csproj", "{FF742965-9A80-41A5-B042-D6C7D3A21708}" ProjectSection(ProjectDependencies) = postProject @@ -163,11 +163,13 @@ Global {403B57F2-1856-4FC7-8A24-36AB346B763E}.Release|x86.ActiveCfg = Release|Any CPU {403B57F2-1856-4FC7-8A24-36AB346B763E}.Release|x86.Build.0 = Release|Any CPU {1EE20B48-82FB-48A2-8086-675D6DDAB4F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1EE20B48-82FB-48A2-8086-675D6DDAB4F0}.Debug|Any CPU.Build.0 = Debug|Any CPU {1EE20B48-82FB-48A2-8086-675D6DDAB4F0}.Debug|x64.ActiveCfg = Debug|Any CPU {1EE20B48-82FB-48A2-8086-675D6DDAB4F0}.Debug|x64.Build.0 = Debug|Any CPU {1EE20B48-82FB-48A2-8086-675D6DDAB4F0}.Debug|x86.ActiveCfg = Debug|Any CPU {1EE20B48-82FB-48A2-8086-675D6DDAB4F0}.Debug|x86.Build.0 = Debug|Any CPU {1EE20B48-82FB-48A2-8086-675D6DDAB4F0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1EE20B48-82FB-48A2-8086-675D6DDAB4F0}.Release|Any CPU.Build.0 = Release|Any CPU {1EE20B48-82FB-48A2-8086-675D6DDAB4F0}.Release|x64.ActiveCfg = Release|Any CPU {1EE20B48-82FB-48A2-8086-675D6DDAB4F0}.Release|x64.Build.0 = Release|Any CPU {1EE20B48-82FB-48A2-8086-675D6DDAB4F0}.Release|x86.ActiveCfg = Release|Any CPU @@ -210,11 +212,13 @@ Global {A3DCCBCA-ACC1-421D-B16E-210896234C26}.Release|x86.ActiveCfg = Release|Any CPU {A3DCCBCA-ACC1-421D-B16E-210896234C26}.Release|x86.Build.0 = Release|Any CPU {C21BFF9C-2C99-4B5F-B7C9-A5E6DDDB37B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C21BFF9C-2C99-4B5F-B7C9-A5E6DDDB37B0}.Debug|Any CPU.Build.0 = Debug|Any CPU {C21BFF9C-2C99-4B5F-B7C9-A5E6DDDB37B0}.Debug|x64.ActiveCfg = Debug|Any CPU {C21BFF9C-2C99-4B5F-B7C9-A5E6DDDB37B0}.Debug|x64.Build.0 = Debug|Any CPU {C21BFF9C-2C99-4B5F-B7C9-A5E6DDDB37B0}.Debug|x86.ActiveCfg = Debug|Any CPU {C21BFF9C-2C99-4B5F-B7C9-A5E6DDDB37B0}.Debug|x86.Build.0 = Debug|Any CPU {C21BFF9C-2C99-4B5F-B7C9-A5E6DDDB37B0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C21BFF9C-2C99-4B5F-B7C9-A5E6DDDB37B0}.Release|Any CPU.Build.0 = Release|Any CPU {C21BFF9C-2C99-4B5F-B7C9-A5E6DDDB37B0}.Release|x64.ActiveCfg = Release|Any CPU {C21BFF9C-2C99-4B5F-B7C9-A5E6DDDB37B0}.Release|x64.Build.0 = Release|Any CPU {C21BFF9C-2C99-4B5F-B7C9-A5E6DDDB37B0}.Release|x86.ActiveCfg = Release|Any CPU @@ -232,11 +236,13 @@ Global {9B130CC5-14FB-41FF-B310-0A95B6894C37}.Release|x86.ActiveCfg = Release|Any CPU {9B130CC5-14FB-41FF-B310-0A95B6894C37}.Release|x86.Build.0 = Release|Any CPU {59BD9891-3837-438A-958D-ADC7F91F6F7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {59BD9891-3837-438A-958D-ADC7F91F6F7E}.Debug|Any CPU.Build.0 = Debug|Any CPU {59BD9891-3837-438A-958D-ADC7F91F6F7E}.Debug|x64.ActiveCfg = Debug|Any CPU {59BD9891-3837-438A-958D-ADC7F91F6F7E}.Debug|x64.Build.0 = Debug|Any CPU {59BD9891-3837-438A-958D-ADC7F91F6F7E}.Debug|x86.ActiveCfg = Debug|Any CPU {59BD9891-3837-438A-958D-ADC7F91F6F7E}.Debug|x86.Build.0 = Debug|Any CPU {59BD9891-3837-438A-958D-ADC7F91F6F7E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {59BD9891-3837-438A-958D-ADC7F91F6F7E}.Release|Any CPU.Build.0 = Release|Any CPU {59BD9891-3837-438A-958D-ADC7F91F6F7E}.Release|x64.ActiveCfg = Release|Any CPU {59BD9891-3837-438A-958D-ADC7F91F6F7E}.Release|x64.Build.0 = Release|Any CPU {59BD9891-3837-438A-958D-ADC7F91F6F7E}.Release|x86.ActiveCfg = Release|Any CPU From 07905e8d9ce6c9976cbbd8b3a804a7fb0f9ba31f Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Thu, 11 Nov 2021 08:40:15 +1100 Subject: [PATCH 106/225] update api description comment --- Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs index 066188882..3abdaf01f 100644 --- a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs +++ b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs @@ -192,7 +192,7 @@ namespace Flow.Launcher.Plugin void SaveSettingJsonStorage() where T : new(); /// - /// Open Directory in explorer configured by user + /// Open directory in an explorer configured by user via Flow's Settings. The default is Windows Explorer /// /// Directory Path to open /// Extra FileName Info From d8b4050dd6a6350758fb889168dee30b66602a29 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Thu, 11 Nov 2021 08:42:16 +1100 Subject: [PATCH 107/225] remove summary --- Flow.Launcher/SelectFileManagerWindow.xaml.cs | 3 --- 1 file changed, 3 deletions(-) diff --git a/Flow.Launcher/SelectFileManagerWindow.xaml.cs b/Flow.Launcher/SelectFileManagerWindow.xaml.cs index c648f86ac..4f6fb3439 100644 --- a/Flow.Launcher/SelectFileManagerWindow.xaml.cs +++ b/Flow.Launcher/SelectFileManagerWindow.xaml.cs @@ -18,9 +18,6 @@ using System.Windows.Shapes; namespace Flow.Launcher { - /// - /// SelectFileManagerWindow.xaml에 대한 상호 작용 논리 - /// public partial class SelectFileManagerWindow : Window, INotifyPropertyChanged { private int selectedCustomExplorerIndex; From e09248fe0a11e498d841f1d472a7583c1d67f2ee Mon Sep 17 00:00:00 2001 From: Jeremy Date: Thu, 11 Nov 2021 08:50:02 +1100 Subject: [PATCH 108/225] bump version for plugins --- Plugins/Flow.Launcher.Plugin.Explorer/plugin.json | 2 +- Plugins/Flow.Launcher.Plugin.Program/plugin.json | 2 +- Plugins/Flow.Launcher.Plugin.Sys/plugin.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json b/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json index c525c001b..8d5d97af1 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json @@ -10,7 +10,7 @@ "Name": "Explorer", "Description": "Search and manage files and folders. Explorer utilises Windows Index Search", "Author": "Jeremy Wu", - "Version": "1.9.1", + "Version": "1.10.0", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Explorer.dll", diff --git a/Plugins/Flow.Launcher.Plugin.Program/plugin.json b/Plugins/Flow.Launcher.Plugin.Program/plugin.json index 5f762f7b6..cbcc00f2b 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Program/plugin.json @@ -4,7 +4,7 @@ "Name": "Program", "Description": "Search programs in Flow.Launcher", "Author": "qianlifeng", - "Version": "1.6.1", + "Version": "1.7.0", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Program.dll", diff --git a/Plugins/Flow.Launcher.Plugin.Sys/plugin.json b/Plugins/Flow.Launcher.Plugin.Sys/plugin.json index 826a1b756..42e8058e5 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Sys/plugin.json @@ -4,7 +4,7 @@ "Name": "System Commands", "Description": "Provide System related commands. e.g. shutdown,lock, setting etc.", "Author": "qianlifeng", - "Version": "1.4.1", + "Version": "1.5.0", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Sys.dll", From 994d7eba47500f840b48ecdd5bc139f7b885e3c7 Mon Sep 17 00:00:00 2001 From: DB p Date: Thu, 11 Nov 2021 23:53:54 +0900 Subject: [PATCH 109/225] - Add "%f" tip text and adjust string - Adjust Window Size --- Flow.Launcher/Languages/en.xaml | 5 +++-- Flow.Launcher/SelectFileManagerWindow.xaml | 16 ++++++++++++---- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 289aec337..64f87759d 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -139,11 +139,12 @@ Select File Manager Please specify the file location of the file manager you using and add arguments if necessary. The default arguments is "%d", and a path is entered at that location. For example, If a command is required such as "totalcmd.exe /A c:\windows", Argument is /A "%d". + "%f" is an argument that represent the file path. It is used to emphasize the file/folder name when opening a specific file location in 3rd party file manager. This Argument is only available in the "Arg for File" item. If the file manager does not have that function, you can use "%d". File Manager Profile Name File Manager Path - Arguments For Folder - Arguments For File + Arg For Folder + Arg For File Change Priority diff --git a/Flow.Launcher/SelectFileManagerWindow.xaml b/Flow.Launcher/SelectFileManagerWindow.xaml index 68e7b93b2..eba794c96 100644 --- a/Flow.Launcher/SelectFileManagerWindow.xaml +++ b/Flow.Launcher/SelectFileManagerWindow.xaml @@ -42,6 +42,12 @@ Text="{DynamicResource fileManager_tips}" TextAlignment="Left" TextWrapping="WrapWithOverflow" /> + + + @@ -88,7 +94,7 @@ Orientation="Horizontal"> - + @@ -126,7 +132,7 @@ + Text="{DynamicResource fileManager_directory_arg}" + TextWrapping="WrapWithOverflow" /> + Text="{DynamicResource fileManager_file_arg}" + TextWrapping="WrapWithOverflow" /> Date: Fri, 12 Nov 2021 07:30:47 +1100 Subject: [PATCH 110/225] update wording --- Flow.Launcher/Languages/en.xaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 64f87759d..5ca6bdbfd 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -138,8 +138,8 @@ Select File Manager - Please specify the file location of the file manager you using and add arguments if necessary. The default arguments is "%d", and a path is entered at that location. For example, If a command is required such as "totalcmd.exe /A c:\windows", Argument is /A "%d". - "%f" is an argument that represent the file path. It is used to emphasize the file/folder name when opening a specific file location in 3rd party file manager. This Argument is only available in the "Arg for File" item. If the file manager does not have that function, you can use "%d". + Please specify the file location of the file manager you using and add arguments if necessary. The default arguments is "%d", and a path is entered at that location. For example, If a command is required such as "totalcmd.exe /A c:\windows", argument is /A "%d". + "%f" is an argument that represent the file path. It is used to emphasize the file/folder name when opening a specific file location in 3rd party file manager. This argument is only available in the "Arg for File" item. If the file manager does not have that function, you can use "%d". File Manager Profile Name File Manager Path From 342bf306ef27465671cdd575658b96901938c5a2 Mon Sep 17 00:00:00 2001 From: DB p Date: Fri, 12 Nov 2021 06:20:43 +0900 Subject: [PATCH 111/225] - 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 112/225] 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 113/225] 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 114/225] 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 115/225] - 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 30964e1fa6e6faf1e3b755c9ed2316fde4dc9ca1 Mon Sep 17 00:00:00 2001 From: kubalav Date: Fri, 12 Nov 2021 13:27:49 +0100 Subject: [PATCH 116/225] Update Slovak translation --- Flow.Launcher/Languages/sk.xaml | 60 +++++++++++++++++++++------------ 1 file changed, 38 insertions(+), 22 deletions(-) diff --git a/Flow.Launcher/Languages/sk.xaml b/Flow.Launcher/Languages/sk.xaml index 4014d215f..8c0a96f98 100644 --- a/Flow.Launcher/Languages/sk.xaml +++ b/Flow.Launcher/Languages/sk.xaml @@ -1,7 +1,8 @@ - - + Nepodarilo sa registrovať klávesovú skratku {0} Nepodarilo sa spustiť {0} Neplatný formát súboru pre plugin Flow Launchera @@ -15,11 +16,11 @@ Ukončiť Zavrieť - + Nastavenia Flow Launchera Všeobecné Prenosný režim - Uloží všetky nastavenia a používateľské údaje do jedného centrálneho priečinka (Užitočné pri vyberateľných diskoch a cloudových službách). + Uloží všetky nastavenia a používateľské údaje do jedného priečinka (Užitočné pri vyberateľných diskoch a cloudových službách). Spustiť Flow Launcher po štarte systému Schovať Flow Launcher po strate fokusu Nezobrazovať upozornenia na novú verziu @@ -33,6 +34,8 @@ Max. výsledkov Ignorovať klávesové skratky v režime na celú obrazovku Zakázať aktiváciu Flow Launchera, keď je aktívna aplikácia na celú obrazovku (odporúčané pre hry). + Predvolený správca súborov + Vyberte správcu súborov, ktorý sa má použiť pri otváraní priečinka. Priečinok s Pythonom Automatická aktualizácia Vybrať @@ -44,7 +47,7 @@ Umožňuje vyhľadávanie pomocou Pinyin. Pinyin je štandardný systém romanizovaného pravopisu pre transliteráciu čínštiny Efekt tieňa nie je povolený, kým má aktuálny motív povolený efekt rozostrenia - + Pluginy Nájsť ďalšie pluginy Zap. @@ -62,12 +65,12 @@ Čas dopytu: - + Repozitár pluginov Obnoviť Inštalovať - + Motív Galéria motívov Ako vytvoriť motív @@ -81,12 +84,12 @@ Priečinok s motívmi Otvoriť priečinok s motívmi - + Klávesové skratky Klávesová skratka pre Flow Launcher Zadajte skratku na zobrazenie/skrytie Flow Launchera. - Otvoriť výsledok modifikačným klávesom - Vyberte modifikačný kláves na otvorenie výsledku pomocou klávesnice. + Modifikačný kláves na otvorenie výsledkov + Vyberte modifikačný kláves na otvorenie vybraného výsledku pomocou klávesnice. Zobraziť klávesovú skratku Zobrazí klávesovú skratku spolu s výsledkami. Vlastná klávesová skratka na vyhľadávanie @@ -98,10 +101,11 @@ Ste si istý, že chcete odstrániť klávesovú skratku {0} pre plugin? Tieňový efekt v poli vyhľadávania Tieňový efekt významne využíva GPU. Neodporúča sa, ak je výkon počítača obmedzený. + Veľkosť šírky okna Použiť ikony Segoe Fluent Použiť ikony Segoe Fluent, ak sú podporované - + HTTP Proxy Povoliť HTTP Proxy HTTP Server @@ -117,7 +121,7 @@ Nastavenie proxy je v poriadku Pripojenie proxy zlyhalo - + O aplikácii Webstránka Verzia @@ -126,18 +130,28 @@ Je dostupná nová verzia {0}, chcete reštartovať Flow Launcher, aby sa mohol aktualizovať? Kontrola aktualizácií zlyhala, prosím, skontrolujte pripojenie na internet a nastavenie proxy k api.github.com. - Sťahovanie aktualizácií zlyhalo, skontrolujte pripojenie na internet a nastavenie proxy k github-cloud.s3.amazonaws.com, + Sťahovanie aktualizácií zlyhalo, skontrolujte pripojenie na internet a nastavenie proxy k github-cloud.s3.amazonaws.com, alebo prejdite na https://github.com/Flow-Launcher/Flow.Launcher/releases pre manuálne stiahnutie aktualizácie. Poznámky k vydaniu Tipy na používanie: - + + Vyberte správcu súborov + Zadajte umiestnenie súboru správcu súborov, ktorého používate, a v prípade potreby pridajte argumenty. Predvolené argumenty sú "%d" a cesta sa zadáva na tomto mieste. Napríklad, ak sa vyžaduje príkaz, ako napríklad "totalcmd.exe /A c:\windows", argument je /A "%d". + "%f" je argument, ktorý predstavuje cestu k súboru. Používa sa na zvýraznenie názvu súboru/priečinka pri otváraní konkrétneho umiestnenia súboru v správcovi súborov tretej strany. Tento argument je k dispozícii len v položke "Arg pre súbor". Ak správca súborov nemá túto funkciu, môžete použiť "%d". + Správca súborov + Názov profilu + Cesta k správcovi súborov + Arg. pre priečinok + Arg. pre súbor + + Zmena priority Vyššie číslo znamená, že výsledok bude vyššie. Skúste nastaviť napr. 5. Ak chcete, aby boli výsledky nižšie ako ktorékoľvek iné doplnky, zadajte záporné číslo Prosím, zadajte platné číslo pre prioritu! - + Stará skratka akcie Nová skratka akcie Zrušiť @@ -149,7 +163,7 @@ Úspešne dokončené Zadajte skratku akcie, ktorá je potrebná na spustenie pluginu. Ak nechcete zadať skratku akcie, použite *. V tom prípade plugin funguje bez kľúčových slov. - + Klávesová skratka pre vlastné vyhľadávanie Stlačením klávesovej skratky sa automaticky vloží zadaný výraz. Náhľad @@ -157,10 +171,10 @@ Neplatná klávesová skratka pluginu Aktualizovať - + Klávesová skratka nedostupná - + Verzia Čas Prosím, napíšte nám, ako došlo k pádu aplikácie, aby sme to mohli opraviť @@ -176,16 +190,18 @@ Odoslanie hlásenia zlyhalo Flow Launcher zaznamenal chybu - + Čakajte, prosím… - + Kontrolujú sa aktualizácie Už máte najnovšiu verziu Flow Launchera Bola nájdená aktualizácia Aktualizuje sa… - Flow Launcher nedokázal presunúť používateľské údaje do aktualizovanej verzie. - Prosím, presuňte profilový priečinok data z {0} do {1} + + Flow Launcher nedokázal presunúť používateľské údaje do aktualizovanej verzie. + Prosím, presuňte profilový priečinok data z {0} do {1} + Nová aktualizácia Je dostupná nová verzia Flow Launchera {0} Počas inštalácie aktualizácií došlo k chybe From 037c3439b5b3d6f54e1e1a3ecbdb30d9f4508456 Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 14 Nov 2021 02:09:25 +0900 Subject: [PATCH 117/225] - 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 118/225] - 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 119/225] 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 120/225] 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 4ded458abae0dd35df6da342c02c33f931924dbc Mon Sep 17 00:00:00 2001 From: Kevin Zhang Date: Sat, 13 Nov 2021 15:37:23 -0600 Subject: [PATCH 121/225] increase platform required for win10 notification --- Flow.Launcher/Notification.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher/Notification.cs b/Flow.Launcher/Notification.cs index 2c82e1451..d8f9fd45e 100644 --- a/Flow.Launcher/Notification.cs +++ b/Flow.Launcher/Notification.cs @@ -11,8 +11,8 @@ namespace Flow.Launcher [System.Diagnostics.CodeAnalysis.SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "")] public static void Show(string title, string subTitle, string iconPath) { - var legacy = Environment.OSVersion.Version.Major < 10; - // Handle notification for win7/8 + var legacy = Environment.OSVersion.Version.Build < 19041; + // Handle notification for win7/8/early win10 if (legacy) { LegacyShow(title, subTitle, iconPath); From 62eb1b6cff052df66a3e1540195581002187aa6c Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 14 Nov 2021 07:45:47 +0900 Subject: [PATCH 122/225] - 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 123/225] - 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 124/225] - 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 125/225] 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 126/225] 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 127/225] 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 128/225] 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 3d97f900336ff57242e8c5ae5ea840b9c93aa94f Mon Sep 17 00:00:00 2001 From: DB p Date: Sun, 14 Nov 2021 14:51:40 +0900 Subject: [PATCH 129/225] Change Plugin/Store Icon Render --- Flow.Launcher/SettingWindow.xaml | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/Flow.Launcher/SettingWindow.xaml b/Flow.Launcher/SettingWindow.xaml index 2b5fd2397..fe1704ffe 100644 --- a/Flow.Launcher/SettingWindow.xaml +++ b/Flow.Launcher/SettingWindow.xaml @@ -846,7 +846,9 @@ Height="32" Margin="32,0,0,0" FlowDirection="LeftToRight" - Source="{Binding Image, IsAsync=True}" /> + RenderOptions.BitmapScalingMode="HighQuality" + Source="{Binding Image, IsAsync=True}" + Stretch="Uniform" /> - + + + + Date: Sun, 14 Nov 2021 15:09:09 +0900 Subject: [PATCH 130/225] 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 131/225] 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 132/225] - 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 133/225] - 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 134/225] 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 148/225] 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 149/225] 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 151/225] - 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 153/225] 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 @@