Window activation cleanups.

diff --git a/dlls/ttydrv/wnd.c b/dlls/ttydrv/wnd.c
index 47e4f4e..8d83468 100644
--- a/dlls/ttydrv/wnd.c
+++ b/dlls/ttydrv/wnd.c
@@ -630,8 +630,7 @@
                           RDW_ERASENOW | RDW_NOCHILDREN );
     }
 
-    if (!(winpos->flags & SWP_NOACTIVATE))
-        WINPOS_ChangeActiveWindow( winpos->hwnd, FALSE );
+    if (!(winpos->flags & SWP_NOACTIVATE)) SetActiveWindow( winpos->hwnd );
 
       /* And last, send the WM_WINDOWPOSCHANGED message */
 
diff --git a/dlls/x11drv/winpos.c b/dlls/x11drv/winpos.c
index 6301e08..4619a77 100644
--- a/dlls/x11drv/winpos.c
+++ b/dlls/x11drv/winpos.c
@@ -955,8 +955,7 @@
             ShowCaret(winpos->hwnd);
     }
 
-    if (!(winpos->flags & SWP_NOACTIVATE))
-        WINPOS_ChangeActiveWindow( winpos->hwnd, FALSE );
+    if (!(winpos->flags & SWP_NOACTIVATE)) SetActiveWindow( winpos->hwnd );
 
       /* And last, send the WM_WINDOWPOSCHANGED message */
 
diff --git a/include/winpos.h b/include/winpos.h
index 0ca4a31..6db5723 100644
--- a/include/winpos.h
+++ b/include/winpos.h
@@ -27,12 +27,11 @@
                                   POINT *maxTrack );
 extern BOOL WINPOS_SetActiveWindow( HWND hWnd, BOOL fMouse,
                                       BOOL fChangeFocus );
-extern BOOL WINPOS_ChangeActiveWindow( HWND hwnd, BOOL mouseMsg );
 extern LONG WINPOS_HandleWindowPosChanging16(HWND hwnd, struct tagWINDOWPOS16 *winpos);
 extern LONG WINPOS_HandleWindowPosChanging(HWND hwnd, WINDOWPOS *winpos);
 extern HWND WINPOS_WindowFromPoint( HWND hwndScope, POINT pt, INT *hittest );
 extern void WINPOS_CheckInternalPos( HWND hwnd );
-extern BOOL WINPOS_ActivateOtherWindow( HWND hwnd );
+extern void WINPOS_ActivateOtherWindow( HWND hwnd );
 extern BOOL WINPOS_CreateInternalPosAtom(void);
 
 #endif  /* __WINE_WINPOS_H */
diff --git a/windows/message.c b/windows/message.c
index a9e5c39..8743e7b 100644
--- a/windows/message.c
+++ b/windows/message.c
@@ -517,6 +517,7 @@
                 eatMsg = TRUE;
                 /* fall through */
             case MA_ACTIVATE:
+            case 0:
                 if (hwndTop != GetForegroundWindow() )
                 {
                     if (!WINPOS_SetActiveWindow( hwndTop, TRUE , TRUE ))
diff --git a/windows/winpos.c b/windows/winpos.c
index 3af64a9..64f8ddd 100644
--- a/windows/winpos.c
+++ b/windows/winpos.c
@@ -734,7 +734,7 @@
     prev = PERQDATA_GetActiveWnd( pMsgQ->pQData );
     QUEUE_Unlock( pMsgQ );
     WIN_ReleaseWndPtr(wndPtr);
-    WINPOS_SetActiveWindow( hwnd, 0, 0 );
+    WINPOS_SetActiveWindow( hwnd, FALSE, TRUE );
     return prev;
 
  error:
@@ -768,7 +768,16 @@
  */
 BOOL WINAPI SetForegroundWindow( HWND hwnd )
 {
-    return WINPOS_ChangeActiveWindow( hwnd, FALSE );
+    if (!hwnd) return WINPOS_SetActiveWindow( 0, FALSE, TRUE );
+
+    /* child windows get WM_CHILDACTIVATE message */
+    if ((GetWindowLongW( hwnd, GWL_STYLE ) & (WS_CHILD | WS_POPUP)) == WS_CHILD)
+        return SendMessageA( hwnd, WM_CHILDACTIVATE, 0, 0 );
+
+    hwnd = WIN_GetFullHandle( hwnd );
+    if( hwnd == GetForegroundWindow() ) return FALSE;
+
+    return WINPOS_SetActiveWindow( hwnd, FALSE, TRUE );
 }
 
 
@@ -1422,9 +1431,8 @@
  *
  *  Activates window other than pWnd.
  */
-BOOL WINPOS_ActivateOtherWindow(HWND hwnd)
+void WINPOS_ActivateOtherWindow(HWND hwnd)
 {
-    BOOL bRet = 0;
     HWND hwndActive = 0;
     HWND hwndTo = 0;
     HWND owner;
@@ -1440,13 +1448,13 @@
         }
     }
 
-    if (!(hwnd = WIN_IsCurrentThread( hwnd ))) return 0;
+    if (!(hwnd = WIN_IsCurrentThread( hwnd ))) return;
 
     if( hwnd == hwndPrevActive )
         hwndPrevActive = 0;
 
     if( hwndActive != hwnd && (hwndActive || USER_IsExitingThread( GetCurrentThreadId() )))
-        return 0;
+        return;
 
     if (!(GetWindowLongW( hwnd, GWL_STYLE ) & WS_POPUP) ||
         !(owner = GetWindow( hwnd, GW_OWNER )) ||
@@ -1463,49 +1471,8 @@
         }
     }
 
-    bRet = WINPOS_SetActiveWindow( hwndTo, FALSE, TRUE );
-
+    SetActiveWindow( hwndTo );
     hwndPrevActive = 0;
-    return bRet;
-}
-
-/*******************************************************************
- *	   WINPOS_ChangeActiveWindow
- *
- */
-BOOL WINPOS_ChangeActiveWindow( HWND hWnd, BOOL mouseMsg )
-{
-    WND *wndPtr;
-    HWND hwndActive = 0;
-
-    /* Get current active window from the active queue */
-    if ( hActiveQueue )
-    {
-        MESSAGEQUEUE *pActiveQueue = QUEUE_Lock( hActiveQueue );
-        if ( pActiveQueue )
-        {
-            hwndActive = PERQDATA_GetActiveWnd( pActiveQueue->pQData );
-            QUEUE_Unlock( pActiveQueue );
-        }
-    }
-
-    if (!hWnd)
-        return WINPOS_SetActiveWindow( 0, mouseMsg, TRUE );
-
-    if (!(wndPtr = WIN_FindWndPtr(hWnd))) return FALSE;
-    hWnd = wndPtr->hwndSelf;
-
-    /* child windows get WM_CHILDACTIVATE message */
-    if( (wndPtr->dwStyle & (WS_CHILD | WS_POPUP)) == WS_CHILD )
-    {
-        WIN_ReleaseWndPtr(wndPtr);
-        return SendMessageA(hWnd, WM_CHILDACTIVATE, 0, 0L);
-    }
-    WIN_ReleaseWndPtr(wndPtr);
-
-    if( hWnd == hwndActive ) return FALSE;
-
-    return WINPOS_SetActiveWindow(hWnd ,mouseMsg ,TRUE);
 }