diff --git a/Flow.Launcher/CustomShortcutSetting.xaml b/Flow.Launcher/CustomShortcutSetting.xaml index bbf6ff9f2..5a40a77b1 100644 --- a/Flow.Launcher/CustomShortcutSetting.xaml +++ b/Flow.Launcher/CustomShortcutSetting.xaml @@ -64,7 +64,6 @@ { - if (mainViewModel.ShouldIgnoreHotkeys() || mainViewModel.GameModeStatus) + if (mainViewModel.ShouldIgnoreHotkeys()) return; mainViewModel.Show(); diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml index 698cf4184..e65ac258a 100644 --- a/Flow.Launcher/MainWindow.xaml +++ b/Flow.Launcher/MainWindow.xaml @@ -85,14 +85,10 @@ Key="O" Command="{Binding LoadContextMenuCommand}" Modifiers="Ctrl" /> - - - - + diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index 67e0e7419..b2d842022 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -70,6 +70,7 @@ namespace Flow.Launcher _viewModel.ResultCopy(QueryTextBox.SelectedText); } } + private async void OnClosing(object sender, CancelEventArgs e) { _settings.WindowTop = Top; @@ -100,6 +101,7 @@ namespace Flow.Launcher // since the default main window visibility is visible // so we need set focus during startup QueryTextBox.Focus(); + _viewModel.PropertyChanged += (o, e) => { switch (e.PropertyName) @@ -168,9 +170,12 @@ namespace Flow.Launcher _viewModel.QueryTextCursorMovedToEnd = false; } break; - + case nameof(MainViewModel.GameModeStatus): + _notifyIcon.Icon = _viewModel.GameModeStatus ? Properties.Resources.gamemode : Properties.Resources.app; + break; } }; + _settings.PropertyChanged += (o, e) => { switch (e.PropertyName) @@ -285,7 +290,7 @@ namespace Flow.Launcher }; open.Click += (o, e) => _viewModel.ToggleFlowLauncher(); - gamemode.Click += (o, e) => ToggleGameMode(); + gamemode.Click += (o, e) => _viewModel.ToggleGameMode(); positionreset.Click += (o, e) => PositionReset(); settings.Click += (o, e) => App.API.OpenSettingDialog(); exit.Click += (o, e) => Close(); @@ -324,24 +329,13 @@ namespace Flow.Launcher OpenWelcomeWindow(); } } + private void OpenWelcomeWindow() { var WelcomeWindow = new WelcomeWindow(_settings); WelcomeWindow.Show(); } - private void ToggleGameMode() - { - if (_viewModel.GameModeStatus) - { - _notifyIcon.Icon = Properties.Resources.app; - _viewModel.GameModeStatus = false; - } - else - { - _notifyIcon.Icon = Properties.Resources.gamemode; - _viewModel.GameModeStatus = true; - } - } + private async void PositionReset() { _viewModel.Show(); @@ -349,6 +343,7 @@ namespace Flow.Launcher Left = HorizonCenter(); Top = VerticalCenter(); } + private void InitProgressbarAnimation() { var da = new DoubleAnimation(ProgressBar.X2, ActualWidth + 100, new Duration(new TimeSpan(0, 0, 0, 0, 1600))); @@ -361,6 +356,7 @@ namespace Flow.Launcher _viewModel.ProgressBarVisibility = Visibility.Hidden; isProgressBarStoryboardPaused = true; } + public void WindowAnimator() { if (_animating) @@ -475,7 +471,6 @@ namespace Flow.Launcher App.API.OpenSettingDialog(); } - private async void OnDeactivated(object sender, EventArgs e) { _settings.WindowLeft = Left; @@ -596,12 +591,6 @@ namespace Flow.Launcher e.Handled = true; } break; - case Key.F12: - if (specialKeyState.CtrlPressed) - { - ToggleGameMode(); - } - break; case Key.Back: if (specialKeyState.CtrlPressed) { diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs index 4601bb04d..3c603f90b 100644 --- a/Flow.Launcher/ViewModel/MainViewModel.cs +++ b/Flow.Launcher/ViewModel/MainViewModel.cs @@ -4,7 +4,6 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; using System.Windows; -using System.Windows.Input; using Flow.Launcher.Core.Plugin; using Flow.Launcher.Core.Resource; using Flow.Launcher.Helper; @@ -24,7 +23,6 @@ using System.IO; using System.Collections.Specialized; using CommunityToolkit.Mvvm.Input; using System.Globalization; -using System.Windows.Threading; namespace Flow.Launcher.ViewModel { @@ -32,8 +30,6 @@ namespace Flow.Launcher.ViewModel { #region Private Fields - private const string DefaultOpenResultModifiers = "Alt"; - private bool _isQueryRunning; private Query _lastQuery; private string _queryTextBeforeLeaveResults; @@ -74,6 +70,9 @@ namespace Flow.Launcher.ViewModel case nameof(Settings.AlwaysStartEn): OnPropertyChanged(nameof(StartWithEnglishMode)); break; + case nameof(Settings.OpenResultModifiers): + OnPropertyChanged(nameof(OpenResultCommandModifiers)); + break; case nameof(Settings.PreviewHotkey): OnPropertyChanged(nameof(TogglePreviewHotkey)); break; @@ -114,9 +113,7 @@ namespace Flow.Launcher.ViewModel RegisterViewUpdate(); RegisterResultsUpdatedEvent(); - RegisterClockAndDateUpdateAsync(); - - SetOpenResultModifiers(); // TODO? + _ = RegisterClockAndDateUpdateAsync(); } private void RegisterViewUpdate() @@ -148,8 +145,6 @@ namespace Flow.Launcher.ViewModel Log.Error("MainViewModel", "Unexpected ResultViewUpdate ends"); } - ; - void continueAction(Task t) { #if DEBUG @@ -193,6 +188,7 @@ namespace Flow.Launcher.ViewModel await PluginManager.ReloadDataAsync().ConfigureAwait(false); Notification.Show(InternationalizationManager.Instance.GetTranslation("success"), InternationalizationManager.Instance.GetTranslation("completedSuccessfully")); } + [RelayCommand] private void LoadHistory() { @@ -206,6 +202,7 @@ namespace Flow.Launcher.ViewModel SelectedResults = Results; } } + [RelayCommand] private void LoadContextMenu() { @@ -221,6 +218,7 @@ namespace Flow.Launcher.ViewModel SelectedResults = Results; } } + [RelayCommand] private void Backspace(object index) { @@ -233,6 +231,7 @@ namespace Flow.Launcher.ViewModel ChangeQueryText($"{actionKeyword}{path}"); } + [RelayCommand] private void AutocompleteQuery() { @@ -259,6 +258,7 @@ namespace Flow.Launcher.ViewModel ChangeQueryText(autoCompleteText); } } + [RelayCommand] private async Task OpenResultAsync(string index) { @@ -293,6 +293,7 @@ namespace Flow.Launcher.ViewModel SelectedResults = Results; } } + [RelayCommand] private void OpenSetting() { @@ -310,6 +311,7 @@ namespace Flow.Launcher.ViewModel { SelectedResults.SelectFirstResult(); } + [RelayCommand] private void SelectPrevPage() { @@ -321,11 +323,13 @@ namespace Flow.Launcher.ViewModel { SelectedResults.SelectNextPage(); } + [RelayCommand] private void SelectPrevItem() { SelectedResults.SelectPrevResult(); } + [RelayCommand] private void SelectNextItem() { @@ -345,6 +349,12 @@ namespace Flow.Launcher.ViewModel } } + [RelayCommand] + public void ToggleGameMode() + { + GameModeStatus = !GameModeStatus; + } + #endregion #region ViewModel Properties @@ -373,7 +383,7 @@ namespace Flow.Launcher.ViewModel public ResultsViewModel History { get; private set; } - public bool GameModeStatus { get; set; } + public bool GameModeStatus { get; set; } = false; private string _queryText; public string QueryText @@ -387,7 +397,6 @@ namespace Flow.Launcher.ViewModel } } - [RelayCommand] private void IncreaseWidth() { @@ -571,7 +580,7 @@ namespace Flow.Launcher.ViewModel public string PluginIconPath { get; set; } = null; - public string OpenResultCommandModifiers { get; private set; } + public string OpenResultCommandModifiers => Settings.OpenResultModifiers; public string TogglePreviewHotkey => Settings.PreviewHotkey; // TODO: is hotkey combo possible? @@ -585,6 +594,8 @@ namespace Flow.Launcher.ViewModel #endregion + #region Query + public void Query() { if (SelectedIsFromQueryResults()) @@ -938,12 +949,9 @@ namespace Flow.Launcher.ViewModel return selected; } - #region Hotkey + #endregion - private void SetOpenResultModifiers() - { - OpenResultCommandModifiers = Settings.OpenResultModifiers ?? DefaultOpenResultModifiers; - } + #region Hotkey public void ToggleFlowLauncher() { @@ -998,18 +1006,15 @@ namespace Flow.Launcher.ViewModel MainWindowVisibility = Visibility.Collapsed; } - #endregion - - /// /// Checks if Flow Launcher should ignore any hotkeys /// public bool ShouldIgnoreHotkeys() { - return Settings.IgnoreHotkeysOnFullscreen && WindowsInteropHelper.IsWindowFullscreen(); + return Settings.IgnoreHotkeysOnFullscreen && WindowsInteropHelper.IsWindowFullscreen() || GameModeStatus; } - + #endregion #region Public Methods diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/en.xaml index 94b46b230..87b897d73 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/en.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/en.xaml @@ -66,7 +66,7 @@ Copy path - Copy path of current result to clipboard + Copy path of current item to clipboard Copy Copy current file to clipboard Copy current folder to clipboard @@ -78,7 +78,7 @@ Run as different user Run the selected using a different user account Open containing folder - Opens the location that contains the item + Opens the location that contains current item Open With Editor: Failed to open file at {0} with Editor {1} at {2} Open With Shell: @@ -89,7 +89,7 @@ Manage indexed files and folders Failed to open Windows Indexing Options Add to Quick Access - Add current result to Quick Access + Add current item to Quick Access Successfully Added Successfully added to Quick Access Successfully Removed @@ -97,8 +97,13 @@ Add to Quick Access so it can be opened with Explorer's Search Activation action keyword Remove from Quick Access Remove from Quick Access - Remove current result from Quick Access + Remove current item from Quick Access Show Windows Context Menu + + + {0} free of {1} + Open in Default File Manager + Use '>' to search in this directory, '*' to search for file extensions or '>*' to combine both searches. Failed to load Everything SDK @@ -130,6 +135,6 @@ Click here to start it Unable to find an Everything installation, would you like to manually select a location?{0}{0}Click no and Everything will be automatically installed for you Do you want to enable content search for Everything? - "It can be very slow without index (which is only supported in Everything v1.5+)" + It can be very slow without index (which is only supported in Everything v1.5+) diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs index 88bfecc14..214a779e4 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs @@ -96,7 +96,9 @@ namespace Flow.Launcher.Plugin.Explorer.Search var driveLetter = path[..1].ToUpper(); var driveName = driveLetter + ":\\"; DriveInfo drv = new DriveInfo(driveLetter); - var subtitle = ToReadableSize(drv.AvailableFreeSpace, 2) + " free of " + ToReadableSize(drv.TotalSize, 2); + var freespace = ToReadableSize(drv.AvailableFreeSpace, 2); + var totalspace = ToReadableSize(drv.TotalSize, 2); + var subtitle = string.Format(Context.API.GetTranslation("plugin_explorer_diskfreespace"), freespace, totalspace); double usingSize = (Convert.ToDouble(drv.TotalSize) - Convert.ToDouble(drv.AvailableFreeSpace)) / Convert.ToDouble(drv.TotalSize) * 100; int? progressValue = Convert.ToInt32(usingSize); @@ -170,25 +172,11 @@ namespace Flow.Launcher.Plugin.Explorer.Search // Path passed from PathSearchAsync ends with Constants.DirectorySeperator ('\'), need to remove the seperator // so it's consistent with folder results returned by index search which does not end with one var folderPath = path.TrimEnd(Constants.DirectorySeperator); - - var folderName = folderPath.TrimEnd(Constants.DirectorySeperator).Split(new[] - { - Path.DirectorySeparatorChar - }, StringSplitOptions.None).Last(); - - var title = $"Open {folderName}"; - - var subtitleFolderName = folderName; - - // ie. max characters can be displayed without subtitle cutting off: "Program Files (x86)" - if (folderName.Length > 19) - subtitleFolderName = "the directory"; return new Result { - Title = title, - SubTitle = $"Use > to search within {subtitleFolderName}, " + - $"* to search for file extensions or >* to combine both searches.", + Title = Context.API.GetTranslation("plugin_explorer_openresultfolder"), + SubTitle = Context.API.GetTranslation("plugin_explorer_openresultfolder_subtitle"), AutoCompleteText = GetPathWithActionKeyword(folderPath, ResultType.Folder, actionKeyword), IcoPath = folderPath, Score = 500,