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