From ae0561341d5fc35296b97856802f5ad3faf443db Mon Sep 17 00:00:00 2001 From: ASLant <77436463+Y-ASLant@users.noreply.github.com> Date: Wed, 10 Jun 2026 08:50:18 +0800 Subject: [PATCH 1/3] fix(windows): preserve tray icon visibility on Explorer restart When Windows Explorer restarts (e.g. after system restart or crash), the TaskbarCreated message causes all tray icons to re-register. Previously this was unconditional, so a hidden tray icon would reappear. Track visibility state in TrayUserData and only re-register on TaskbarCreated if the icon was visible. Also fixes #289 (error on close when TrayIcon is not visible). --- src/platform_impl/windows/mod.rs | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/platform_impl/windows/mod.rs b/src/platform_impl/windows/mod.rs index 8d569216..6338411d 100644 --- a/src/platform_impl/windows/mod.rs +++ b/src/platform_impl/windows/mod.rs @@ -63,6 +63,7 @@ struct TrayUserData { last_position: Option>, menu_on_left_click: bool, menu_on_right_click: bool, + visible: bool, } pub struct TrayIcon { @@ -99,6 +100,7 @@ impl TrayIcon { last_position: None, menu_on_left_click: attrs.menu_on_left_click, menu_on_right_click: attrs.menu_on_right_click, + visible: true, }; let hwnd = CreateWindowExW( @@ -346,6 +348,7 @@ unsafe extern "system" fn tray_proc( userdata.icon = *icon; } WM_USER_SHOW_TRAYICON => { + userdata.visible = true; register_tray_icon( userdata.hwnd, userdata.internal_id, @@ -354,6 +357,7 @@ unsafe extern "system" fn tray_proc( ); } WM_USER_HIDE_TRAYICON => { + userdata.visible = false; remove_tray_icon(userdata.hwnd, userdata.internal_id); } WM_USER_UPDATE_TRAYTOOLTIP => { @@ -362,12 +366,14 @@ unsafe extern "system" fn tray_proc( } _ if msg == *S_U_TASKBAR_RESTART => { remove_tray_icon(userdata.hwnd, userdata.internal_id); - register_tray_icon( - userdata.hwnd, - userdata.internal_id, - &userdata.icon.as_ref().map(|i| i.inner.as_raw_handle()), - &userdata.tooltip, - ); + if userdata.visible { + register_tray_icon( + userdata.hwnd, + userdata.internal_id, + &userdata.icon.as_ref().map(|i| i.inner.as_raw_handle()), + &userdata.tooltip, + ); + } } WM_USER_SHOW_MENU_ON_LEFT_CLICK => { userdata.menu_on_left_click = wparam != 0; From 3201d3ff97ed152c8de57bea3236bca9deca5ac4 Mon Sep 17 00:00:00 2001 From: ASLant <77436463+Y-ASLant@users.noreply.github.com> Date: Wed, 10 Jun 2026 22:37:45 +0800 Subject: [PATCH 2/3] chore: add change file for tray icon visibility fix Add covector change file for PR #325: - Preserve tray icon visibility on Explorer restart - Fix error on close when TrayIcon is not visible --- .changes/fix-tray-icon-visibility-explorer-restart.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 .changes/fix-tray-icon-visibility-explorer-restart.md diff --git a/.changes/fix-tray-icon-visibility-explorer-restart.md b/.changes/fix-tray-icon-visibility-explorer-restart.md new file mode 100644 index 00000000..21efef54 --- /dev/null +++ b/.changes/fix-tray-icon-visibility-explorer-restart.md @@ -0,0 +1,11 @@ +--- +"tray-icon": patch +--- + +fix(windows): preserve tray icon visibility on Explorer restart + +Track visibility state in TrayUserData and only re-register the tray icon +on `TaskbarCreated` if the icon was visible. Previously, a hidden tray +icon would incorrectly reappear when Windows Explorer restarted. + +Also fixes error on close when `TrayIcon` is not visible. From 48111aef2494e08f0e6a802d051308dabe8c5d55 Mon Sep 17 00:00:00 2001 From: Amr Bashir Date: Wed, 10 Jun 2026 19:28:45 +0300 Subject: [PATCH 3/3] Apply suggestion from @amrbashir --- .changes/fix-tray-icon-visibility-explorer-restart.md | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/.changes/fix-tray-icon-visibility-explorer-restart.md b/.changes/fix-tray-icon-visibility-explorer-restart.md index 21efef54..a3cc008e 100644 --- a/.changes/fix-tray-icon-visibility-explorer-restart.md +++ b/.changes/fix-tray-icon-visibility-explorer-restart.md @@ -2,10 +2,4 @@ "tray-icon": patch --- -fix(windows): preserve tray icon visibility on Explorer restart - -Track visibility state in TrayUserData and only re-register the tray icon -on `TaskbarCreated` if the icon was visible. Previously, a hidden tray -icon would incorrectly reappear when Windows Explorer restarted. - -Also fixes error on close when `TrayIcon` is not visible. +On Windows, preserve tray icon visibility on Explorer restart so a hidden tray icon won't become visible.