Module: wine Branch: master Commit: 5e7a8f4db045d456913f9bd7075191ad14053375 URL: https://gitlab.winehq.org/wine/wine/-/commit/5e7a8f4db045d456913f9bd7075191a...
Author: Gabriel Ivăncescu gabrielopcode@gmail.com Date: Tue Feb 6 16:51:21 2024 +0200
explorer: Don't activate the systray icon when showing it.
Fixes a regression introduced by 62c6646d8f44cee55ffdef6d2bede19f681dc9b8, because SetParent will unconditionally activate the window, causing newly added icons to deactivate the foreground window.
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com
---
programs/explorer/systray.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/programs/explorer/systray.c b/programs/explorer/systray.c index 43187db30b5..74e5c3b6b48 100644 --- a/programs/explorer/systray.c +++ b/programs/explorer/systray.c @@ -543,6 +543,15 @@ static LRESULT WINAPI tray_icon_wndproc( HWND hwnd, UINT msg, WPARAM wparam, LPA break; }
+ case WM_WINDOWPOSCHANGING: + if (icon->display == ICON_DISPLAY_HIDDEN) + { + /* Changing the icon's parent via SetParent would activate it, stealing the focus. */ + WINDOWPOS *wp = (WINDOWPOS*)lparam; + wp->flags |= SWP_NOACTIVATE; + } + break; + case WM_WINDOWPOSCHANGED: update_systray_balloon_position(); break; @@ -566,9 +575,9 @@ static void systray_add_icon( struct icon *icon )
if (icon->display != ICON_DISPLAY_HIDDEN) return; /* already added */
- icon->display = nb_displayed++; SetWindowLongW( icon->window, GWL_STYLE, GetWindowLongW( icon->window, GWL_STYLE ) | WS_CHILD ); SetParent( icon->window, tray_window ); + icon->display = nb_displayed++; pos = get_icon_pos( icon ); SetWindowPos( icon->window, 0, pos.x, pos.y, 0, 0, SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOZORDER | SWP_SHOWWINDOW );