On Wed Feb 14 07:36:09 2024 +0000, Chih-Hsuan Yen wrote:
In `X11DRV_SystrayDockInsert`, after `get_systray_selection_owner`?
(no idea if that works) Do you mean a change like this? It doesn't work.
--- wine-9.2/dlls/winex11.drv/window.c.orig 2024-02-14 15:03:26.316078760 +0800 +++ wine-9.2/dlls/winex11.drv/window.c 2024-02-14 15:03:45.242545962 +0800 @@ -2328,6 +2328,9 @@ if (!(systray_window = get_systray_selection_owner( display ))) return FALSE; + /* make sure the window is layered with a surface before embedding them */ + NtUserUpdateLayeredWindow( hwnd, NULL, NULL, NULL, NULL, NULL, 0, NULL, 0, NULL ); + get_systray_visual_info( display, systray_window, &visual ); if (!(data = get_win_data( hwnd ))) return FALSE;
On the other hand, changes in https://gitlab.winehq.org/wine/wine/-/merge_requests/5076/diffs restores missing systray icons with wine 9.2. I tested LINE of LY Corporation on LXQt.
Well that can't work because the whole issue is that it's *not* set to layered at that point. We set it to layered *after* this call (in explorer).
`NtUserUpdateLayeredWindow` bails out early if the window is not WS_EX_LAYERED.
I could move the call to make it layered before calling the driver function of course, but the function can return FALSE, and then what happens? Should I revert it back, or not sure how to fix it.
Alternatively we could set it to layered in the driver as well?