2019-07-05 05:04:14 +12:00
|
|
|
|
using System;
|
|
|
|
|
using Timer = System.Windows.Forms.Timer;
|
|
|
|
|
|
2020-03-09 01:21:15 +13:00
|
|
|
|
namespace SystemTrayMenu.Handler
|
2019-07-05 05:04:14 +12:00
|
|
|
|
{
|
|
|
|
|
class WaitFastLeave : IDisposable
|
|
|
|
|
{
|
|
|
|
|
public event EventHandler Leave;
|
|
|
|
|
|
|
|
|
|
Timer timerSecondLeaveCheck = new Timer();
|
|
|
|
|
|
|
|
|
|
public WaitFastLeave()
|
|
|
|
|
{
|
|
|
|
|
timerSecondLeaveCheck.Interval = 200;
|
|
|
|
|
timerSecondLeaveCheck.Tick += LeaveWorkaround_Tick;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// When menu not activated and mouse leaves menu very fast,
|
|
|
|
|
// mouse still on menu but we not get leave event again
|
|
|
|
|
// as workaround we call the check again (200ms later)
|
|
|
|
|
public void Start()
|
|
|
|
|
{
|
|
|
|
|
Leave.Invoke();
|
|
|
|
|
timerSecondLeaveCheck.Stop();
|
|
|
|
|
timerSecondLeaveCheck.Start();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void LeaveWorkaround_Tick(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
timerSecondLeaveCheck.Stop();
|
|
|
|
|
Leave.Invoke();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Dispose()
|
|
|
|
|
{
|
|
|
|
|
timerSecondLeaveCheck.Dispose();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|