[Feature] Stay open when 'Enter' pressed and reactivated within 200ms (#223, #226, #227), version 1.0.24.4

This commit is contained in:
Markus Hofknecht 2021-10-28 16:29:04 +02:00
parent ceb128b702
commit a140f13c23
5 changed files with 32 additions and 15 deletions

View file

@ -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();

View file

@ -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")]

View file

@ -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

View file

@ -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();

View file

@ -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;