Author: jimtabor Date: Wed Jun 11 19:48:43 2014 New Revision: 63592
URL: http://svn.reactos.org/svn/reactos?rev=63592&view=rev Log: [Win32k] - Apply patch from r63350. Modified so the WM_ACTIVATEAPP before the WM_NC/ACTIVATE call not after.
Modified: trunk/reactos/win32ss/user/ntuser/focus.c
Modified: trunk/reactos/win32ss/user/ntuser/focus.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/ntuser/focus.c... ============================================================================== --- trunk/reactos/win32ss/user/ntuser/focus.c [iso-8859-1] (original) +++ trunk/reactos/win32ss/user/ntuser/focus.c [iso-8859-1] Wed Jun 11 19:48:43 2014 @@ -102,10 +102,12 @@ PTHREADINFO pti, ptiOld, ptiNew; BOOL InAAPM = FALSE;
+ //ERR("SendActivateMessages\n"); + + pti = PsGetCurrentThreadWin32Thread(); + if (Window) { - pti = PsGetCurrentThreadWin32Thread(); - UserRefObjectCo(Window, &Ref);
if (WindowPrev) UserRefObjectCo(WindowPrev, &RefPrev); @@ -163,56 +165,62 @@ ExFreePool(phwndTopLevel); } } - //// - OldTID = WindowPrev ? IntGetWndThreadId(WindowPrev) : NULL; - NewTID = IntGetWndThreadId(Window); - ptiOld = WindowPrev ? WindowPrev->head.pti : NULL; - ptiNew = Window->head.pti; - - //ERR("SendActivateMessage Old -> %x, New -> %x\n", OldTID, NewTID); - - if (!(pti->TIF_flags & TIF_INACTIVATEAPPMSG) && - (!WindowPrev || OldTID != NewTID) ) - { - PWND cWindow; - HWND *List, *phWnd; - - List = IntWinListChildren(UserGetDesktopWindow()); - if ( List ) - { - if ( OldTID ) + } + //// + OldTID = WindowPrev ? IntGetWndThreadId(WindowPrev) : NULL; + NewTID = Window ? IntGetWndThreadId(Window) : NULL; + ptiOld = WindowPrev ? WindowPrev->head.pti : NULL; + ptiNew = Window ? Window->head.pti : NULL; + + //ERR("SendActivateMessage Old -> %x, New -> %x\n", OldTID, NewTID); + + if (!(pti->TIF_flags & TIF_INACTIVATEAPPMSG) && + (!WindowPrev || OldTID != NewTID) ) + { + PWND cWindow; + HWND *List, *phWnd; + + List = IntWinListChildren(UserGetDesktopWindow()); + if ( List ) + { + if ( OldTID ) + { + ptiOld->TIF_flags |= TIF_INACTIVATEAPPMSG; + // Note: Do not set pci flags, this does crash! + for (phWnd = List; *phWnd; ++phWnd) { - ptiOld->TIF_flags |= TIF_INACTIVATEAPPMSG; - // Note: Do not set pci flags, this does crash! - for (phWnd = List; *phWnd; ++phWnd) - { - cWindow = ValidateHwndNoErr(*phWnd); - if (cWindow && cWindow->head.pti == ptiOld) - { // FALSE if the window is being deactivated, - // ThreadId that owns the window being activated. - co_IntSendMessageNoWait(*phWnd, WM_ACTIVATEAPP, FALSE, (LPARAM)NewTID); - } - } - ptiOld->TIF_flags &= ~TIF_INACTIVATEAPPMSG; - } - if ( NewTID ) - { //// Prevents a resource crash due to reentrance! - InAAPM = TRUE; - pti->TIF_flags |= TIF_INACTIVATEAPPMSG; - //// - for (phWnd = List; *phWnd; ++phWnd) - { - cWindow = ValidateHwndNoErr(*phWnd); - if (cWindow && cWindow->head.pti == ptiNew) - { // TRUE if the window is being activated, - // ThreadId that owns the window being deactivated. - co_IntSendMessageNoWait(*phWnd, WM_ACTIVATEAPP, TRUE, (LPARAM)OldTID); - } + cWindow = ValidateHwndNoErr(*phWnd); + if (cWindow && cWindow->head.pti == ptiOld) + { // FALSE if the window is being deactivated, + // ThreadId that owns the window being activated. + //ERR("SendActivateMessage Old\n"); + co_IntSendMessageNoWait(*phWnd, WM_ACTIVATEAPP, FALSE, (LPARAM)NewTID); } } - ExFreePoolWithTag(List, USERTAG_WINDOWLIST); - } - } + ptiOld->TIF_flags &= ~TIF_INACTIVATEAPPMSG; + } + if ( NewTID ) + { //// Prevents a resource crash due to reentrance! + InAAPM = TRUE; + pti->TIF_flags |= TIF_INACTIVATEAPPMSG; + //// + for (phWnd = List; *phWnd; ++phWnd) + { + cWindow = ValidateHwndNoErr(*phWnd); + if (cWindow && cWindow->head.pti == ptiNew) + { // TRUE if the window is being activated, + // ThreadId that owns the window being deactivated. + //ERR("SendActivateMessage New\n"); + co_IntSendMessageNoWait(*phWnd, WM_ACTIVATEAPP, TRUE, (LPARAM)OldTID); + } + } + } + ExFreePoolWithTag(List, USERTAG_WINDOWLIST); + } + } + + if (Window) + { if (WindowPrev) UserDerefObjectCo(WindowPrev); // Now allow the previous window to die.
@@ -533,7 +541,7 @@
for(Child = Root->spwndChild; Child; Child = Child->spwndNext) { - OwnerWnd = Child->spwndOwner; + OwnerWnd = Child->spwndOwner; if(!OwnerWnd) continue;