From: Rémi Bernon rbernon@codeweavers.com
Installers based on InnoSetup use invisible window owning the main installer window. When focus is given to the installer window popup, window managers sometimes do not raise it as their owner is invisible and it stays below other windows unless they are minimized.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=49933 --- dlls/winex11.drv/event.c | 8 ++++++++ 1 file changed, 8 insertions(+)
diff --git a/dlls/winex11.drv/event.c b/dlls/winex11.drv/event.c index 86edf66b820..57ee5605b1f 100644 --- a/dlls/winex11.drv/event.c +++ b/dlls/winex11.drv/event.c @@ -607,6 +607,14 @@ static void set_focus( Display *display, HWND hwnd, Time time )
if (win) { + DWORD exstyle = NtUserGetWindowLongW( focus, GWL_EXSTYLE ); + + /* Some window managers do not raise owned windows if their owner is invisible, + * this is the case with Inno Setup based installers, so make sure it's raised. + */ + if (!(exstyle & WS_EX_APPWINDOW) && NtUserGetWindowRelative( focus, GW_OWNER )) + XRaiseWindow( display, win ); + TRACE( "setting focus to %p (%lx) time=%ld\n", focus, win, time ); XSetInputFocus( display, win, RevertToParent, time ); }