Index: win32ss/user/ntuser/focus.c
===================================================================
--- win32ss/user/ntuser/focus.c	(revision 63311)
+++ win32ss/user/ntuser/focus.c	(working copy)
@@ -101,10 +101,10 @@
    HANDLE OldTID, NewTID;
    PTHREADINFO pti, ptiOld, ptiNew;
    BOOL InAAPM = FALSE;
+   pti = PsGetCurrentThreadWin32Thread();
 
    if (Window)
    {
-      pti = PsGetCurrentThreadWin32Thread();
 
       UserRefObjectCo(Window, &Ref);
 
@@ -164,55 +164,7 @@
           }
       }
       ////
-      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 )
-            {
-               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);
-                  }
-               }
-            }
-            ExFreePoolWithTag(List, USERTAG_WINDOWLIST);
-         }
-      }
       if (WindowPrev)
          UserDerefObjectCo(WindowPrev); // Now allow the previous window to die.
 
@@ -256,6 +208,56 @@
 
       UserDerefObjectCo(Window);
    }
+
+   OldTID = WindowPrev ? IntGetWndThreadId(WindowPrev) : NULL;
+   NewTID = Window ? IntGetWndThreadId(Window) : NULL;
+   ptiOld = WindowPrev ? WindowPrev->head.pti : NULL;
+   ptiNew = Window ? Window->head.pti : NULL;
+
+   //ERR("SendActivateMessage WindowPrev -> %x, Old -> %x, New -> %x\n", WindowPrev, OldTID, NewTID);
+
+   if (!(pti->TIF_flags & TIF_INACTIVATEAPPMSG) &&
+        (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)
+            {
+               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);
+               }
+            }
+         }
+         ExFreePoolWithTag(List, USERTAG_WINDOWLIST);
+      }
+   }
    return InAAPM;
 }
 
