Index: subsystems/win32/win32k/ntuser/focus.c =================================================================== --- subsystems/win32/win32k/ntuser/focus.c (revision 53510) +++ subsystems/win32/win32k/ntuser/focus.c (working copy) @@ -85,9 +85,34 @@ } if (Window->spwndPrev != NULL) - co_WinPosSetWindowPos(Window, HWND_TOP, 0, 0, 0, 0, - SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOSENDCHANGING); + { + HWND *phwndTopLevel, *phwndCurrent; + PWND pwndCurrent, pwndDesktop; + /* FIXME: we shoudl use Start/Defer/EndDeferWindowPos here*/ + co_WinPosSetWindowPos(Window, HWND_TOP, 0, 0, 0, 0, + SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE); + + pwndDesktop = UserGetDesktopWindow(); + if(Window->spwndParent == pwndDesktop ) + { + phwndTopLevel = IntWinListChildren(pwndDesktop); + phwndCurrent = phwndTopLevel; + while(*phwndCurrent) + { + pwndCurrent = UserGetWindowObject(*phwndCurrent); + + if(pwndCurrent && pwndCurrent->spwndOwner == Window ) + { + co_WinPosSetWindowPos(pwndCurrent, HWND_TOP, 0, 0, 0, 0, + SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE); + } + phwndCurrent++; + } + ExFreePool(phwndTopLevel); + } + } + if (!Window->spwndOwner && !IntGetParent(Window)) { co_IntShellHookNotify(HSHELL_WINDOWACTIVATED, (LPARAM) hWnd);