From b5c57b9a62c396068d18237bd6e82b37c169fdc5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Gabriel=20Iv=C4=83ncescu?= <gabrielopcode@gmail.com>
Date: Tue, 6 Feb 2024 16:51:21 +0200
Subject: [PATCH] explorer: Set layered style on systray icons only when it's
 actually layered.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Fixes a regression introduced by 229b4561d9a8f10cbb49342dff0b6a3472d81c68,
which caused the icons to not be visible initially in the virtual desktop
systray.

Signed-off-by: Gabriel Ivăncescu <gabrielopcode@gmail.com>
---
 programs/explorer/systray.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/programs/explorer/systray.c b/programs/explorer/systray.c
index 74e5c3b6b48..c76ebdd0c92 100644
--- a/programs/explorer/systray.c
+++ b/programs/explorer/systray.c
@@ -624,6 +624,7 @@ static BOOL show_icon(struct icon *icon)
     {
         icon->display = ICON_DISPLAY_DOCKED;
         icon->layered = TRUE;
+        SetWindowLongW( icon->window, GWL_EXSTYLE, GetWindowLongW( icon->window, GWL_EXSTYLE ) | WS_EX_LAYERED );
         SendMessageW( icon->window, WM_SIZE, SIZE_RESTORED, MAKELONG( icon_cx, icon_cy ) );
     }
     systray_add_icon( icon );
@@ -645,6 +646,7 @@ static BOOL hide_icon(struct icon *icon)
     {
         icon->display = ICON_DISPLAY_HIDDEN;
         icon->layered = FALSE;
+        SetWindowLongW( icon->window, GWL_EXSTYLE, GetWindowLongW( icon->window, GWL_EXSTYLE ) & ~WS_EX_LAYERED );
     }
     ShowWindow( icon->window, SW_HIDE );
     systray_remove_icon( icon );
@@ -732,7 +734,7 @@ static BOOL add_icon(NOTIFYICONDATAW *nid)
     icon->owner  = nid->hWnd;
     icon->display = ICON_DISPLAY_HIDDEN;
 
-    CreateWindowExW( WS_EX_LAYERED, tray_icon_class.lpszClassName, NULL, WS_CLIPSIBLINGS | WS_POPUP,
+    CreateWindowExW( 0, tray_icon_class.lpszClassName, NULL, WS_CLIPSIBLINGS | WS_POPUP,
                      0, 0, icon_cx, icon_cy, 0, NULL, NULL, icon );
     if (!icon->window) ERR( "Failed to create systray icon window\n" );