diff --git a/src/RunnerV2/RunnerV2/Helpers/SettingsHelper.cs b/src/RunnerV2/RunnerV2/Helpers/SettingsHelper.cs index cb38e4b40e..492dbb29be 100644 --- a/src/RunnerV2/RunnerV2/Helpers/SettingsHelper.cs +++ b/src/RunnerV2/RunnerV2/Helpers/SettingsHelper.cs @@ -168,19 +168,6 @@ namespace RunnerV2.Helpers } } - CentralizedKeyboardHookManager.RemoveAllHooksFromModule("QuickAccess"); - if (SettingsUtils.Default.GetSettings().EnableQuickAccess) - { - CentralizedKeyboardHookManager.AddKeyboardHook("QuickAccess", SettingsUtils.Default.GetSettings().QuickAccessShortcut, QuickAccessHelper.Show); - } - else - { - CentralizedKeyboardHookManager.RemoveAllHooksFromModule("QuickAccess"); - QuickAccessHelper.Stop(); - } - - TrayIconManager.UpdateTrayIcon(); - break; case "powertoys": foreach (var powertoysSettingsPart in property.Value.EnumerateObject()) diff --git a/src/RunnerV2/RunnerV2/Helpers/TrayIconManager.cs b/src/RunnerV2/RunnerV2/Helpers/TrayIconManager.cs index d30ed57f4d..85e750f45f 100644 --- a/src/RunnerV2/RunnerV2/Helpers/TrayIconManager.cs +++ b/src/RunnerV2/RunnerV2/Helpers/TrayIconManager.cs @@ -17,6 +17,8 @@ namespace RunnerV2.Helpers { internal static partial class TrayIconManager { + private static bool _trayIconVisible; + private static nint GetTrayIcon() { if (SettingsUtils.Default.GetSettings().ShowThemeAdaptiveTrayIcon) @@ -31,19 +33,31 @@ namespace RunnerV2.Helpers public static void UpdateTrayIcon() { + if (!_trayIconVisible) + { + return; + } + NOTIFYICONDATA notifyicondata = new() { CbSize = (uint)Marshal.SizeOf(), HWnd = Runner.RunnerHwnd, UId = 1, HIcon = GetTrayIcon(), - UFlags = 0x0000001 | 0x0000002, + UFlags = 0x0000001 | 0x00000002 | 0x4, + UCallbackMessage = (uint)WindowMessages.ICON_NOTIFY, + SzTip = "PowerToys Runner", }; Shell_NotifyIcon(0x1, ref notifyicondata); } internal static void StartTrayIcon() { + if (_trayIconVisible) + { + return; + } + NOTIFYICONDATA notifyicondata = new() { CbSize = (uint)Marshal.SizeOf(), @@ -57,16 +71,17 @@ namespace RunnerV2.Helpers ChangeWindowMessageFilterEx(Runner.RunnerHwnd, 0x0111, 0x0001, IntPtr.Zero); - new ThemeListener().ThemeChanged += (_) => - { - PostMessageW(Runner.RunnerHwnd, 0x0800, IntPtr.Zero, 0x9000); - }; - Shell_NotifyIcon(NIMADD, ref notifyicondata); + _trayIconVisible = true; } internal static void StopTrayIcon() { + if (!_trayIconVisible) + { + return; + } + NOTIFYICONDATA notifyicondata = new() { CbSize = (uint)Marshal.SizeOf(), @@ -75,6 +90,7 @@ namespace RunnerV2.Helpers }; Shell_NotifyIcon(NIMDELETE, ref notifyicondata); + _trayIconVisible = false; } internal enum TrayButton : uint @@ -99,6 +115,10 @@ namespace RunnerV2.Helpers AppendMenuW(_trayIconMenu, 0u, new UIntPtr((uint)TrayButton.ReportBug), "Report a Bug"); AppendMenuW(_trayIconMenu, 0x00000800u, UIntPtr.Zero, string.Empty); // separator AppendMenuW(_trayIconMenu, 0u, new UIntPtr((uint)TrayButton.Close), "Close"); + new ThemeListener().ThemeChanged += (_) => + { + PostMessageW(Runner.RunnerHwnd, 0x0800, IntPtr.Zero, 0x9000); + }; } internal static void ProcessTrayIconMessage(long lParam) diff --git a/src/RunnerV2/RunnerV2/Runner.cs b/src/RunnerV2/RunnerV2/Runner.cs index 886d511706..29786cd264 100644 --- a/src/RunnerV2/RunnerV2/Runner.cs +++ b/src/RunnerV2/RunnerV2/Runner.cs @@ -81,7 +81,10 @@ namespace RunnerV2 Logger.LogInfo("Runner started"); InitializeTrayWindow(); - TrayIconManager.StartTrayIcon(); + if (SettingsUtils.Default.GetSettings().ShowSysTrayIcon) + { + TrayIconManager.StartTrayIcon(); + } if (SettingsUtils.Default.GetSettings().EnableQuickAccess) { @@ -295,7 +298,11 @@ namespace RunnerV2 TrayIconManager.ProcessTrayMenuCommand((nuint)wParam); break; case (uint)WindowMessages.WINDOWPOSCHANGING: - TrayIconManager.StartTrayIcon(); + if (SettingsUtils.Default.GetSettings().ShowSysTrayIcon) + { + TrayIconManager.StartTrayIcon(); + } + break; case (uint)WindowMessages.DESTROY: Close(); @@ -306,9 +313,31 @@ namespace RunnerV2 ToggleModuleStateBasedOnEnabledProperty(module); } + CentralizedKeyboardHookManager.RemoveAllHooksFromModule("QuickAccess"); + if (SettingsUtils.Default.GetSettings().EnableQuickAccess) + { + CentralizedKeyboardHookManager.AddKeyboardHook("QuickAccess", SettingsUtils.Default.GetSettings().QuickAccessShortcut, QuickAccessHelper.Show); + } + else + { + CentralizedKeyboardHookManager.RemoveAllHooksFromModule("QuickAccess"); + QuickAccessHelper.Stop(); + } + + TrayIconManager.UpdateTrayIcon(); + + if (SettingsUtils.Default.GetSettings().ShowSysTrayIcon) + { + TrayIconManager.StartTrayIcon(); + } + else + { + TrayIconManager.StopTrayIcon(); + } + break; default: - if (msg == _taskbarCreatedMessage) + if (msg == _taskbarCreatedMessage && SettingsUtils.Default.GetSettings().ShowSysTrayIcon) { TrayIconManager.StartTrayIcon(); }