SystemTrayMenu/Business/App.cs

79 lines
2.5 KiB
C#
Raw Normal View History

2020-03-17 09:05:52 +13:00
using Microsoft.Win32;
using System;
using System.Windows.Forms;
2020-04-30 23:22:47 +12:00
using SystemTrayMenu.Business;
using SystemTrayMenu.UserInterface;
using SystemTrayMenu.Utilities;
namespace SystemTrayMenu
{
2020-05-06 12:39:38 +12:00
internal class App : IDisposable
{
2020-04-30 23:22:47 +12:00
private readonly MenuNotifyIcon menuNotifyIcon = new MenuNotifyIcon();
2020-05-14 05:14:51 +12:00
private readonly Menus menus = new Menus();
private readonly TaskbarForm taskbarForm = new TaskbarForm();
2020-05-06 12:39:38 +12:00
public App()
{
2020-03-17 09:05:52 +13:00
AppRestart.BeforeRestarting += Dispose;
SystemEvents.DisplaySettingsChanged += AppRestart.ByDisplaySettings;
2020-04-30 23:22:47 +12:00
menus.LoadStarted += menuNotifyIcon.LoadingStart;
menus.LoadStopped += menuNotifyIcon.LoadingStop;
menuNotifyIcon.Exit += Application.Exit;
2020-03-17 09:05:52 +13:00
menuNotifyIcon.Restart += AppRestart.ByMenuNotifyIcon;
2020-05-01 22:41:35 +12:00
menuNotifyIcon.Click += MenuNotifyIcon_Click;
2020-05-14 05:14:51 +12:00
void MenuNotifyIcon_Click()
{
menus.SwitchOpenClose(true);
}
2020-03-17 02:45:19 +13:00
menuNotifyIcon.OpenLog += Log.OpenLogFile;
2020-04-30 23:22:47 +12:00
menus.MainPreload();
taskbarForm.Activated += TasbkarItemActivated;
taskbarForm.Resize += TaskbarForm_Resize;
taskbarForm.FormClosed += TaskbarForm_FormClosed;
taskbarForm.Deactivate += TaskbarForm_Deactivate;
DllImports.NativeMethods.User32ShowInactiveTopmost(taskbarForm);
}
private void TaskbarForm_FormClosed(object sender, FormClosedEventArgs e)
{
Application.Exit();
}
private void TaskbarForm_Resize(object sender, EventArgs e)
{
SetStateNormal();
}
internal void TasbkarItemActivated(object sender, EventArgs e)
{
SetStateNormal();
taskbarForm.Activate();
taskbarForm.Focus();
menus.SwitchOpenCloseByTaskbarItem();
}
private void TaskbarForm_Deactivate(object sender, EventArgs e)
{
SetStateNormal();
}
/// <summary>
/// This ensures that next click on taskbaritem works as activate event/click event
/// </summary>
private void SetStateNormal()
{
if (Form.ActiveForm == taskbarForm)
{
taskbarForm.WindowState = FormWindowState.Normal;
}
}
public void Dispose()
{
taskbarForm.Dispose();
2020-04-30 23:22:47 +12:00
menus.Dispose();
menuNotifyIcon.Dispose();
}
}
2019-07-05 05:04:14 +12:00
}