- Fix all the wine Win test_SetForegroundWindow and todo tests.

svn path=/trunk/; revision=56608
This commit is contained in:
James Tabor 2012-05-18 18:08:54 +00:00
parent ec7cfde16c
commit e86a655d72
2 changed files with 39 additions and 3 deletions

View file

@ -229,6 +229,38 @@ IntFindChildWindowToOwner(PWND Root, PWND Owner)
return NULL; return NULL;
} }
VOID FASTCALL
FindRemoveAsyncMsg(PWND Wnd)
{
PUSER_MESSAGE_QUEUE MessageQueue;
PUSER_SENT_MESSAGE Message;
PLIST_ENTRY Entry;
if (!Wnd) return;
MessageQueue = Wnd->head.pti->MessageQueue;
if (!IsListEmpty(&MessageQueue->SentMessagesListHead))
{
// Scan sent queue messages to see if we received async messages.
Entry = MessageQueue->SentMessagesListHead.Flink;
Message = CONTAINING_RECORD(Entry, USER_SENT_MESSAGE, ListEntry);
do
{
if (Message->Msg.message == WM_ASYNC_SETACTIVEWINDOW &&
Message->Msg.hwnd == UserHMGetHandle(Wnd) &&
Message->Msg.wParam == 0 )
{
TRACE("ASYNC SAW: Found one in the Sent Msg Queue! %p\n", Message->Msg.hwnd);
RemoveEntryList(Entry); // Purge the entry.
}
Entry = Message->ListEntry.Flink;
Message = CONTAINING_RECORD(Entry, USER_SENT_MESSAGE, ListEntry);
}
while (Entry != &MessageQueue->SentMessagesListHead);
}
}
/* /*
Can the system force foreground from one or more conditions. Can the system force foreground from one or more conditions.
*/ */
@ -307,15 +339,17 @@ co_IntSetForegroundAndFocusWindow(PWND Wnd, BOOL MouseActivate)
{ {
IntSetFocusMessageQueue(Wnd->head.pti->MessageQueue); IntSetFocusMessageQueue(Wnd->head.pti->MessageQueue);
gptiForeground = Wnd->head.pti; gptiForeground = Wnd->head.pti;
fgRet = TRUE;
}
/* /*
Fix FG Bounce with regedit but breaks test_SFW todos:
Henri Verbeet, Henri Verbeet,
What happens is that we get the WM_WINE_SETACTIVEWINDOW message sent by the What happens is that we get the WM_WINE_SETACTIVEWINDOW message sent by the
other thread after we already changed the foreground window back to our own other thread after we already changed the foreground window back to our own
window. window.
*/ */
FindRemoveAsyncMsg(Wnd); // Do this to fix test_SFW todos!
fgRet = TRUE;
}
// Fix FG Bounce with regedit.
if (hWndPrev != hWnd ) if (hWndPrev != hWnd )
{ {
if (PrevForegroundQueue && if (PrevForegroundQueue &&

View file

@ -569,7 +569,9 @@ NtUserCallHwndLock(
break; break;
case HWNDLOCK_ROUTINE_SETFOREGROUNDWINDOW: case HWNDLOCK_ROUTINE_SETFOREGROUNDWINDOW:
TRACE("co_IntSetForegroundWindow 1 %p\n",hWnd);
Ret = co_IntSetForegroundWindow(Window); Ret = co_IntSetForegroundWindow(Window);
TRACE("co_IntSetForegroundWindow 2 \n");
break; break;
case HWNDLOCK_ROUTINE_UPDATEWINDOW: case HWNDLOCK_ROUTINE_UPDATEWINDOW: