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);
}