Author: mjmartin Date: Sat May 15 20:30:05 2010 New Revision: 47224
URL: http://svn.reactos.org/svn/reactos?rev=47224&view=rev Log: [win32k] - The description and changes made regarding WM_ACTIVATEAPP messages in r47126 were partially incorrect, the code was mostly correct.
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/focus.c
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/focus.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntu... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/ntuser/focus.c [iso-8859-1] (original) +++ trunk/reactos/subsystems/win32/win32k/ntuser/focus.c [iso-8859-1] Sat May 15 20:30:05 2010 @@ -105,19 +105,43 @@
if (Window && WindowPrev) { + PWINDOW_OBJECT cWindow; + HWND *List, *phWnd; HANDLE OldTID = IntGetWndThreadId(WindowPrev); HANDLE NewTID = IntGetWndThreadId(Window);
DPRINT1("SendActiveMessage Old -> %x, New -> %x\n", OldTID, NewTID); if (Window->Wnd->style & WS_MINIMIZE) { - DPRINT1("Widow was nminimized\n"); + DPRINT("Widow was minimized\n"); }
if (OldTID != NewTID) { - co_IntSendMessageNoWait(hWndPrev, WM_ACTIVATEAPP, FALSE, (LPARAM)NewTID); - co_IntSendMessageNoWait(hWnd, WM_ACTIVATEAPP, TRUE, (LPARAM)OldTID); + List = IntWinListChildren(UserGetWindowObject(IntGetDesktopWindow())); + if (List) + { + for (phWnd = List; *phWnd; ++phWnd) + { + cWindow = UserGetWindowObject(*phWnd); + + if (cWindow && (IntGetWndThreadId(cWindow) == OldTID)) + { // FALSE if the window is being deactivated, + // ThreadId that owns the window being activated. + co_IntSendMessageNoWait(*phWnd, WM_ACTIVATEAPP, FALSE, (LPARAM)NewTID); + } + } + for (phWnd = List; *phWnd; ++phWnd) + { + cWindow = UserGetWindowObject(*phWnd); + if (cWindow && (IntGetWndThreadId(cWindow) == NewTID)) + { // TRUE if the window is being activated, + // ThreadId that owns the window being deactivated. + co_IntSendMessageNoWait(*phWnd, WM_ACTIVATEAPP, TRUE, (LPARAM)OldTID); + } + } + ExFreePool(List); + } } UserDerefObjectCo(WindowPrev); // Now allow the previous window to die. }