mirror of
https://github.com/Hofknecht/SystemTrayMenu.git
synced 2024-09-30 09:06:32 +13:00
Fix and improve menu activation
This commit is contained in:
parent
bbdab80355
commit
a7af9f610f
3 changed files with 17 additions and 19 deletions
|
@ -71,10 +71,8 @@ namespace SystemTrayMenu.Handler
|
|||
iMenuKey = 0;
|
||||
}
|
||||
|
||||
internal void CmdKeyProcessed(Menu? sender, Key key, ModifierKeys modifiers)
|
||||
internal void CmdKeyProcessed(Menu sender, Key key, ModifierKeys modifiers)
|
||||
{
|
||||
sender ??= menus[iMenuKey];
|
||||
|
||||
switch (key)
|
||||
{
|
||||
case Key.Enter:
|
||||
|
|
|
@ -125,21 +125,22 @@ namespace SystemTrayMenu.Business
|
|||
{
|
||||
if (IsMainUsable)
|
||||
{
|
||||
MainMenu?.Dispatcher.Invoke(keyboardInput.CmdKeyProcessed, new object[] { null!, key, modifiers });
|
||||
Menu? menu = AsEnumerable.FirstOrDefault(m => m != null && (m.IsActive || m.IsKeyboardFocusWithin), MainMenu);
|
||||
menu?.Dispatcher.Invoke(keyboardInput.CmdKeyProcessed, new object[] { menu, key, modifiers });
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// Timer to check after activation if the application lost focus and close/fadeout windows again
|
||||
timerStillActiveCheck.Interval = TimeSpan.FromMilliseconds(Settings.Default.TimeUntilClosesAfterEnterPressed + 20);
|
||||
timerStillActiveCheck.Tick += (sender, e) => StillActiveTick();
|
||||
void StillActiveTick()
|
||||
{
|
||||
timerStillActiveCheck.Stop();
|
||||
if (!IsActive())
|
||||
{
|
||||
FadeHalfOrOutIfNeeded();
|
||||
}
|
||||
|
||||
timerStillActiveCheck.Stop();
|
||||
}
|
||||
|
||||
waitLeave.Interval = TimeSpan.FromMilliseconds(Settings.Default.TimeUntilCloses);
|
||||
|
@ -453,7 +454,7 @@ namespace SystemTrayMenu.Business
|
|||
|
||||
private bool IsActive()
|
||||
{
|
||||
return menus.Where(m => m != null && m.IsActive).FirstOrDefault() != null || (App.TaskbarLogo?.IsActive ?? false);
|
||||
return menus.Where(m => m != null && (m.IsActive || m.IsKeyboardFocusWithin)).FirstOrDefault() != null || (App.TaskbarLogo?.IsActive ?? false);
|
||||
}
|
||||
|
||||
private Menu Create(MenuData menuData, string path)
|
||||
|
@ -526,18 +527,14 @@ namespace SystemTrayMenu.Business
|
|||
menu.Activated += (sender, e) => Activated();
|
||||
void Activated()
|
||||
{
|
||||
if (IsActive() && IsMainUsable)
|
||||
// Bring transparent menus back
|
||||
foreach (Menu? menu in menus.Where(m => m != null && m.Opacity != 1D))
|
||||
{
|
||||
timerStillActiveCheck.Stop();
|
||||
|
||||
// Bring transparent menus back
|
||||
foreach (Menu? menu in menus.Where(m => m != null && m.Opacity != 1D))
|
||||
{
|
||||
menu!.ActivateWithFade();
|
||||
}
|
||||
|
||||
timerStillActiveCheck.Start();
|
||||
menu!.ActivateWithFade();
|
||||
}
|
||||
|
||||
timerStillActiveCheck.Stop();
|
||||
timerStillActiveCheck.Start();
|
||||
}
|
||||
|
||||
menu.IsVisibleChanged += (sender, _) => MenuVisibleChanged((Menu)sender);
|
||||
|
|
|
@ -172,10 +172,13 @@ namespace SystemTrayMenu.Handler
|
|||
Menu menu = (Menu)dgv.GetParentWindow();
|
||||
rowData.Level = menu.Level;
|
||||
|
||||
CloseMenu?.Invoke(rowData.Level + 1);
|
||||
|
||||
// Give the opening window focus
|
||||
// if closing window lose focus no window would have focus any more
|
||||
menu?.Activate();
|
||||
menu?.FocusTextBox();
|
||||
|
||||
CloseMenu?.Invoke(rowData.Level + 1);
|
||||
|
||||
if (rowData.IsPointingToFolder &&
|
||||
rowData.Level + 1 < MenuDefines.MenusMax)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue