From a140f13c234edc7427bbb05cbec997a68523a376 Mon Sep 17 00:00:00 2001 From: Markus Hofknecht Date: Thu, 28 Oct 2021 16:29:04 +0200 Subject: [PATCH] [Feature] Stay open when 'Enter' pressed and reactivated within 200ms (#223, #226, #227), version 1.0.24.4 --- Business/Menus.cs | 22 +++++++++++----------- Properties/AssemblyInfo.cs | 4 ++-- Properties/Settings.Designer.cs | 2 +- UserInterface/Menu.cs | 17 +++++++++++++++++ UserInterface/SettingsForm.cs | 2 +- 5 files changed, 32 insertions(+), 15 deletions(-) diff --git a/Business/Menus.cs b/Business/Menus.cs index 44759d9..89a447c 100644 --- a/Business/Menus.cs +++ b/Business/Menus.cs @@ -37,6 +37,7 @@ namespace SystemTrayMenu.Business private bool showingMessageBox; private TaskbarPosition taskbarPosition = new WindowsTaskbar().Position; private bool searchTextChanging; + private bool waitingForReactivate; public Menus() { @@ -245,15 +246,16 @@ namespace SystemTrayMenu.Business } timerShowProcessStartedAsLoadingIcon.Interval = Properties.Settings.Default.TimeUntilClosesAfterEnterPressed; - timerStillActiveCheck.Interval = 1000; + timerStillActiveCheck.Interval = Properties.Settings.Default.TimeUntilClosesAfterEnterPressed + 20; timerStillActiveCheck.Tick += (sender, e) => StillActiveTick(); void StillActiveTick() { if (!IsActive()) { FadeHalfOrOutIfNeeded(); - timerStillActiveCheck.Stop(); } + + timerStillActiveCheck.Stop(); } waitLeave.LeaveTriggered += FadeHalfOrOutIfNeeded; @@ -481,7 +483,9 @@ namespace SystemTrayMenu.Business internal bool IsOpenCloseStateOpening() { - return openCloseState == OpenCloseState.Opening; + Log.Info(openCloseState.ToString()); + return openCloseState == OpenCloseState.Opening || + (openCloseState == OpenCloseState.Default && menus[0] != null && menus[0].Visible); } internal void SwitchOpenClose(bool byClick) @@ -669,7 +673,7 @@ namespace SystemTrayMenu.Business void Deactivate(object sender, EventArgs e) { if (!Properties.Settings.Default.StaysOpenWhenFocusLostAfterEnterPressed || - !timerStillActiveCheck.Enabled) + !waitingForReactivate) { FadeHalfOrOutIfNeeded(); if (!IsActive()) @@ -877,20 +881,16 @@ namespace SystemTrayMenu.Business if (rowData.ProcessStarted) { + waitingForReactivate = true; rowData.ProcessStarted = false; row.Cells[0].Value = Resources.StaticResources.LoadingIcon; timerShowProcessStartedAsLoadingIcon.Tick += Tick; void Tick(object sender, EventArgs e) { - row.Cells[0].Value = rowData.ReadLoadedIcon(); timerShowProcessStartedAsLoadingIcon.Tick -= Tick; timerShowProcessStartedAsLoadingIcon.Stop(); - - if (Properties.Settings.Default.StaysOpenWhenFocusLostAfterEnterPressed) - { - timerStillActiveCheck.Stop(); - FadeHalfOrOutIfNeeded(); - } + row.Cells[0].Value = rowData.ReadLoadedIcon(); + waitingForReactivate = false; } timerShowProcessStartedAsLoadingIcon.Stop(); diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs index 80b211d..4c4d2d0 100644 --- a/Properties/AssemblyInfo.cs +++ b/Properties/AssemblyInfo.cs @@ -39,5 +39,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.24.3")] -[assembly: AssemblyFileVersion("1.0.24.3")] +[assembly: AssemblyVersion("1.0.24.4")] +[assembly: AssemblyFileVersion("1.0.24.4")] diff --git a/Properties/Settings.Designer.cs b/Properties/Settings.Designer.cs index a69b3fe..46693b4 100644 --- a/Properties/Settings.Designer.cs +++ b/Properties/Settings.Designer.cs @@ -254,7 +254,7 @@ namespace SystemTrayMenu.Properties [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Configuration.SettingsProviderAttribute(typeof(CustomSettingsProvider))] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("1000")] + [global::System.Configuration.DefaultSettingValueAttribute("500")] public int TimeUntilCloses { get diff --git a/UserInterface/Menu.cs b/UserInterface/Menu.cs index f679865..9efde46 100644 --- a/UserInterface/Menu.cs +++ b/UserInterface/Menu.cs @@ -137,6 +137,15 @@ namespace SystemTrayMenu.UserInterface customScrollbar.MouseEnter += ControlsMouseEnter; dgv.MouseEnter += ControlsMouseEnter; labelTitle.MouseEnter += ControlsMouseEnter; + textBoxSearch.MouseEnter += ControlsMouseEnter; + pictureBoxMenuAlwaysOpen.MouseEnter += ControlsMouseEnter; + pictureBoxOpenFolder.MouseEnter += ControlsMouseEnter; + pictureBoxSearch.MouseEnter += ControlsMouseEnter; + pictureBoxFilesCount.MouseEnter += ControlsMouseEnter; + pictureBoxFoldersCount.MouseEnter += ControlsMouseEnter; + labelFilesCount.MouseEnter += ControlsMouseEnter; + labelFoldersCount.MouseEnter += ControlsMouseEnter; + void ControlsMouseEnter(object sender, EventArgs e) { MouseEnter?.Invoke(); @@ -145,6 +154,14 @@ namespace SystemTrayMenu.UserInterface customScrollbar.MouseLeave += ControlsMouseLeave; dgv.MouseLeave += ControlsMouseLeave; labelTitle.MouseLeave += ControlsMouseLeave; + textBoxSearch.MouseLeave += ControlsMouseLeave; + pictureBoxMenuAlwaysOpen.MouseLeave += ControlsMouseLeave; + pictureBoxOpenFolder.MouseLeave += ControlsMouseLeave; + pictureBoxSearch.MouseLeave += ControlsMouseLeave; + pictureBoxFilesCount.MouseLeave += ControlsMouseLeave; + pictureBoxFoldersCount.MouseLeave += ControlsMouseLeave; + labelFilesCount.MouseLeave += ControlsMouseLeave; + labelFoldersCount.MouseLeave += ControlsMouseLeave; void ControlsMouseLeave(object sender, EventArgs e) { MouseLeave?.Invoke(); diff --git a/UserInterface/SettingsForm.cs b/UserInterface/SettingsForm.cs index 2dd95f9..391854f 100644 --- a/UserInterface/SettingsForm.cs +++ b/UserInterface/SettingsForm.cs @@ -801,7 +801,7 @@ namespace SystemTrayMenu.UserInterface { checkBoxStayOpenWhenItemClicked.Checked = true; checkBoxStayOpenWhenFocusLost.Checked = true; - numericUpDownTimeUntilClose.Value = 1000; + numericUpDownTimeUntilClose.Value = 500; numericUpDownTimeUntilOpens.Value = 100; checkBoxStayOpenWhenFocusLostAfterEnterPressed.Checked = true; numericUpDownTimeUntilClosesAfterEnterPressed.Value = 200;