Fix some msg.c and win.c failures running on NT4 and XP.
This commit is contained in:
parent
a7c1102bac
commit
a2e24748b1
@ -360,6 +360,7 @@ static const struct message WmCreateVisibleChildSeq[] = {
|
|||||||
{ EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 },
|
{ EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 },
|
||||||
{ WM_ERASEBKGND, sent|parent|optional },
|
{ WM_ERASEBKGND, sent|parent|optional },
|
||||||
{ WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
|
{ WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
|
||||||
|
{ WM_NCCALCSIZE, sent|wparam|optional, 1 }, /* WinXP */
|
||||||
{ 0 }
|
{ 0 }
|
||||||
};
|
};
|
||||||
/* ShowWindow(SW_SHOW) for a not visible child window */
|
/* ShowWindow(SW_SHOW) for a not visible child window */
|
||||||
@ -771,6 +772,28 @@ static const struct message WmModalDialogSeq[] = {
|
|||||||
{ WM_PAINT, sent|optional },
|
{ WM_PAINT, sent|optional },
|
||||||
{ WM_CTLCOLORBTN, sent },
|
{ WM_CTLCOLORBTN, sent },
|
||||||
{ WM_ENTERIDLE, sent|parent|optional },
|
{ WM_ENTERIDLE, sent|parent|optional },
|
||||||
|
{ WM_ENTERIDLE, sent|parent|optional },
|
||||||
|
{ WM_ENTERIDLE, sent|parent|optional },
|
||||||
|
{ WM_ENTERIDLE, sent|parent|optional },
|
||||||
|
{ WM_ENTERIDLE, sent|parent|optional },
|
||||||
|
{ WM_ENTERIDLE, sent|parent|optional },
|
||||||
|
{ WM_ENTERIDLE, sent|parent|optional },
|
||||||
|
{ WM_ENTERIDLE, sent|parent|optional },
|
||||||
|
{ WM_ENTERIDLE, sent|parent|optional },
|
||||||
|
{ WM_ENTERIDLE, sent|parent|optional },
|
||||||
|
{ WM_ENTERIDLE, sent|parent|optional },
|
||||||
|
{ WM_ENTERIDLE, sent|parent|optional },
|
||||||
|
{ WM_ENTERIDLE, sent|parent|optional },
|
||||||
|
{ WM_ENTERIDLE, sent|parent|optional },
|
||||||
|
{ WM_ENTERIDLE, sent|parent|optional },
|
||||||
|
{ WM_ENTERIDLE, sent|parent|optional },
|
||||||
|
{ WM_ENTERIDLE, sent|parent|optional },
|
||||||
|
{ WM_ENTERIDLE, sent|parent|optional },
|
||||||
|
{ WM_ENTERIDLE, sent|parent|optional },
|
||||||
|
{ WM_ENTERIDLE, sent|parent|optional },
|
||||||
|
{ WM_GETICON, sent|parent|optional },
|
||||||
|
{ WM_GETICON, sent|parent|optional },
|
||||||
|
{ WM_GETICON, sent|parent|optional },
|
||||||
{ WM_TIMER, sent },
|
{ WM_TIMER, sent },
|
||||||
{ EVENT_OBJECT_STATECHANGE, winevent_hook|wparam|lparam, 0, 0 },
|
{ EVENT_OBJECT_STATECHANGE, winevent_hook|wparam|lparam, 0, 0 },
|
||||||
{ WM_ENABLE, sent|parent|wparam, 1 },
|
{ WM_ENABLE, sent|parent|wparam, 1 },
|
||||||
@ -1019,9 +1042,15 @@ static const struct message WmSHOWNATopInvisible[] = {
|
|||||||
{ WM_SHOWWINDOW, sent|wparam, 1 },
|
{ WM_SHOWWINDOW, sent|wparam, 1 },
|
||||||
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE },
|
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE },
|
||||||
{ WM_NCPAINT, sent|wparam, 1 },
|
{ WM_NCPAINT, sent|wparam, 1 },
|
||||||
|
{ WM_GETICON, sent|optional },
|
||||||
|
{ WM_GETICON, sent|optional },
|
||||||
|
{ WM_GETICON, sent|optional },
|
||||||
{ WM_GETTEXT, sent|defwinproc|optional },
|
{ WM_GETTEXT, sent|defwinproc|optional },
|
||||||
{ WM_ERASEBKGND, sent|optional },
|
{ WM_ERASEBKGND, sent|optional },
|
||||||
{ WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
|
{ WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
|
||||||
|
{ WM_NCCALCSIZE, sent|wparam|optional, 1 },
|
||||||
|
{ WM_NCPAINT, sent|wparam|optional, 1 },
|
||||||
|
{ WM_ERASEBKGND, sent|optional },
|
||||||
{ WM_SIZE, sent },
|
{ WM_SIZE, sent },
|
||||||
{ WM_MOVE, sent },
|
{ WM_MOVE, sent },
|
||||||
{ 0 }
|
{ 0 }
|
||||||
@ -1195,6 +1224,9 @@ static const struct message WmCreateMDIframeSeq[] = {
|
|||||||
{ WM_WINDOWPOSCHANGED, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, /* Win9x */
|
{ WM_WINDOWPOSCHANGED, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, /* Win9x */
|
||||||
{ WM_ACTIVATEAPP, sent|wparam, 1 },
|
{ WM_ACTIVATEAPP, sent|wparam, 1 },
|
||||||
{ WM_NCACTIVATE, sent|wparam, 1 },
|
{ WM_NCACTIVATE, sent|wparam, 1 },
|
||||||
|
{ WM_GETTEXT, sent|defwinproc|optional },
|
||||||
|
{ WM_GETICON, sent|defwinproc|optional },
|
||||||
|
{ WM_GETICON, sent|defwinproc|optional },
|
||||||
{ WM_ACTIVATE, sent|wparam, 1 },
|
{ WM_ACTIVATE, sent|wparam, 1 },
|
||||||
{ HCBT_SETFOCUS, hook },
|
{ HCBT_SETFOCUS, hook },
|
||||||
{ WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 },
|
{ WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 },
|
||||||
@ -3112,7 +3144,9 @@ static void test_messages(void)
|
|||||||
/* PeekMessage(NULL) fails, but still removes the message */
|
/* PeekMessage(NULL) fails, but still removes the message */
|
||||||
SetLastError(0xdeadbeef);
|
SetLastError(0xdeadbeef);
|
||||||
ok( !PeekMessageW( NULL, 0, 0, 0, PM_REMOVE ), "PeekMessage(NULL) should fail\n" );
|
ok( !PeekMessageW( NULL, 0, 0, 0, PM_REMOVE ), "PeekMessage(NULL) should fail\n" );
|
||||||
ok( GetLastError() == ERROR_NOACCESS, "last error is %ld\n", GetLastError() );
|
ok( GetLastError() == ERROR_NOACCESS || /* Win2k */
|
||||||
|
GetLastError() == 0xdeadbeef, /* NT4 */
|
||||||
|
"last error is %ld\n", GetLastError() );
|
||||||
ok( PeekMessageW( &msg, 0, 0, 0, PM_REMOVE ), "PeekMessage should succeed\n" );
|
ok( PeekMessageW( &msg, 0, 0, 0, PM_REMOVE ), "PeekMessage should succeed\n" );
|
||||||
ok( msg.message == WM_USER+1, "got %x instead of WM_USER+1\n", msg.message );
|
ok( msg.message == WM_USER+1, "got %x instead of WM_USER+1\n", msg.message );
|
||||||
|
|
||||||
@ -4600,10 +4634,22 @@ static DWORD cbt_hook_thread_id;
|
|||||||
|
|
||||||
static LRESULT CALLBACK cbt_hook_proc(int nCode, WPARAM wParam, LPARAM lParam)
|
static LRESULT CALLBACK cbt_hook_proc(int nCode, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
|
static const char *CBT_code_name[10] = {
|
||||||
|
"HCBT_MOVESIZE",
|
||||||
|
"HCBT_MINMAX",
|
||||||
|
"HCBT_QS",
|
||||||
|
"HCBT_CREATEWND",
|
||||||
|
"HCBT_DESTROYWND",
|
||||||
|
"HCBT_ACTIVATE",
|
||||||
|
"HCBT_CLICKSKIPPED",
|
||||||
|
"HCBT_KEYSKIPPED",
|
||||||
|
"HCBT_SYSCOMMAND",
|
||||||
|
"HCBT_SETFOCUS" };
|
||||||
|
const char *code_name = (nCode >= 0 && nCode <= HCBT_SETFOCUS) ? CBT_code_name[nCode] : "Unknown";
|
||||||
HWND hwnd;
|
HWND hwnd;
|
||||||
char buf[256];
|
char buf[256];
|
||||||
|
|
||||||
trace("CBT: %d, %08x, %08lx\n", nCode, wParam, lParam);
|
trace("CBT: %d (%s), %08x, %08lx\n", nCode, code_name, wParam, lParam);
|
||||||
|
|
||||||
ok(cbt_hook_thread_id == GetCurrentThreadId(), "we didn't ask for events from other threads\n");
|
ok(cbt_hook_thread_id == GetCurrentThreadId(), "we didn't ask for events from other threads\n");
|
||||||
|
|
||||||
@ -4779,35 +4825,35 @@ static void test_message_conversion(void)
|
|||||||
|
|
||||||
SetLastError(0);
|
SetLastError(0);
|
||||||
lRes = PostMessageA(hwnd, CB_FINDSTRINGEXACT, 0, (LPARAM)wszUnicode);
|
lRes = PostMessageA(hwnd, CB_FINDSTRINGEXACT, 0, (LPARAM)wszUnicode);
|
||||||
ok(lRes == 0 && GetLastError() == ERROR_MESSAGE_SYNC_ONLY,
|
ok(lRes == 0 && (GetLastError() == ERROR_MESSAGE_SYNC_ONLY || GetLastError() == ERROR_INVALID_PARAMETER),
|
||||||
"PostMessage on sync only message returned %ld, last error %ld\n", lRes, GetLastError());
|
"PostMessage on sync only message returned %ld, last error %ld\n", lRes, GetLastError());
|
||||||
SetLastError(0);
|
SetLastError(0);
|
||||||
lRes = PostMessageW(hwnd, CB_FINDSTRINGEXACT, 0, (LPARAM)wszUnicode);
|
lRes = PostMessageW(hwnd, CB_FINDSTRINGEXACT, 0, (LPARAM)wszUnicode);
|
||||||
ok(lRes == 0 && GetLastError() == ERROR_MESSAGE_SYNC_ONLY,
|
ok(lRes == 0 && (GetLastError() == ERROR_MESSAGE_SYNC_ONLY || GetLastError() == ERROR_INVALID_PARAMETER),
|
||||||
"PostMessage on sync only message returned %ld, last error %ld\n", lRes, GetLastError());
|
"PostMessage on sync only message returned %ld, last error %ld\n", lRes, GetLastError());
|
||||||
SetLastError(0);
|
SetLastError(0);
|
||||||
lRes = PostThreadMessageA(GetCurrentThreadId(), CB_FINDSTRINGEXACT, 0, (LPARAM)wszUnicode);
|
lRes = PostThreadMessageA(GetCurrentThreadId(), CB_FINDSTRINGEXACT, 0, (LPARAM)wszUnicode);
|
||||||
ok(lRes == 0 && GetLastError() == ERROR_MESSAGE_SYNC_ONLY,
|
ok(lRes == 0 && (GetLastError() == ERROR_MESSAGE_SYNC_ONLY || GetLastError() == ERROR_INVALID_PARAMETER),
|
||||||
"PosThreadtMessage on sync only message returned %ld, last error %ld\n", lRes, GetLastError());
|
"PosThreadtMessage on sync only message returned %ld, last error %ld\n", lRes, GetLastError());
|
||||||
SetLastError(0);
|
SetLastError(0);
|
||||||
lRes = PostThreadMessageW(GetCurrentThreadId(), CB_FINDSTRINGEXACT, 0, (LPARAM)wszUnicode);
|
lRes = PostThreadMessageW(GetCurrentThreadId(), CB_FINDSTRINGEXACT, 0, (LPARAM)wszUnicode);
|
||||||
ok(lRes == 0 && GetLastError() == ERROR_MESSAGE_SYNC_ONLY,
|
ok(lRes == 0 && (GetLastError() == ERROR_MESSAGE_SYNC_ONLY || GetLastError() == ERROR_INVALID_PARAMETER),
|
||||||
"PosThreadtMessage on sync only message returned %ld, last error %ld\n", lRes, GetLastError());
|
"PosThreadtMessage on sync only message returned %ld, last error %ld\n", lRes, GetLastError());
|
||||||
SetLastError(0);
|
SetLastError(0);
|
||||||
lRes = SendNotifyMessageA(hwnd, CB_FINDSTRINGEXACT, 0, (LPARAM)wszUnicode);
|
lRes = SendNotifyMessageA(hwnd, CB_FINDSTRINGEXACT, 0, (LPARAM)wszUnicode);
|
||||||
ok(lRes == 0 && GetLastError() == ERROR_MESSAGE_SYNC_ONLY,
|
ok(lRes == 0 && (GetLastError() == ERROR_MESSAGE_SYNC_ONLY || GetLastError() == ERROR_INVALID_PARAMETER),
|
||||||
"SendNotifyMessage on sync only message returned %ld, last error %ld\n", lRes, GetLastError());
|
"SendNotifyMessage on sync only message returned %ld, last error %ld\n", lRes, GetLastError());
|
||||||
SetLastError(0);
|
SetLastError(0);
|
||||||
lRes = SendNotifyMessageW(hwnd, CB_FINDSTRINGEXACT, 0, (LPARAM)wszUnicode);
|
lRes = SendNotifyMessageW(hwnd, CB_FINDSTRINGEXACT, 0, (LPARAM)wszUnicode);
|
||||||
ok(lRes == 0 && GetLastError() == ERROR_MESSAGE_SYNC_ONLY,
|
ok(lRes == 0 && (GetLastError() == ERROR_MESSAGE_SYNC_ONLY || GetLastError() == ERROR_INVALID_PARAMETER),
|
||||||
"SendNotifyMessage on sync only message returned %ld, last error %ld\n", lRes, GetLastError());
|
"SendNotifyMessage on sync only message returned %ld, last error %ld\n", lRes, GetLastError());
|
||||||
SetLastError(0);
|
SetLastError(0);
|
||||||
lRes = SendMessageCallbackA(hwnd, CB_FINDSTRINGEXACT, 0, (LPARAM)wszUnicode, NULL, 0);
|
lRes = SendMessageCallbackA(hwnd, CB_FINDSTRINGEXACT, 0, (LPARAM)wszUnicode, NULL, 0);
|
||||||
ok(lRes == 0 && GetLastError() == ERROR_MESSAGE_SYNC_ONLY,
|
ok(lRes == 0 && (GetLastError() == ERROR_MESSAGE_SYNC_ONLY || GetLastError() == ERROR_INVALID_PARAMETER),
|
||||||
"SendMessageCallback on sync only message returned %ld, last error %ld\n", lRes, GetLastError());
|
"SendMessageCallback on sync only message returned %ld, last error %ld\n", lRes, GetLastError());
|
||||||
SetLastError(0);
|
SetLastError(0);
|
||||||
lRes = SendMessageCallbackW(hwnd, CB_FINDSTRINGEXACT, 0, (LPARAM)wszUnicode, NULL, 0);
|
lRes = SendMessageCallbackW(hwnd, CB_FINDSTRINGEXACT, 0, (LPARAM)wszUnicode, NULL, 0);
|
||||||
ok(lRes == 0 && GetLastError() == ERROR_MESSAGE_SYNC_ONLY,
|
ok(lRes == 0 && (GetLastError() == ERROR_MESSAGE_SYNC_ONLY || GetLastError() == ERROR_INVALID_PARAMETER),
|
||||||
"SendMessageCallback on sync only message returned %ld, last error %ld\n", lRes, GetLastError());
|
"SendMessageCallback on sync only message returned %ld, last error %ld\n", lRes, GetLastError());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -619,10 +619,12 @@ static void verify_window_info(HWND hwnd, const WINDOWINFO *info, BOOL test_bord
|
|||||||
MapWindowPoints(hwnd, 0, (LPPOINT)&rcClient, 2);
|
MapWindowPoints(hwnd, 0, (LPPOINT)&rcClient, 2);
|
||||||
ok(EqualRect(&rcClient, &info->rcClient), "wrong rcClient\n");
|
ok(EqualRect(&rcClient, &info->rcClient), "wrong rcClient\n");
|
||||||
|
|
||||||
ok(info->dwStyle == (DWORD)GetWindowLongA(hwnd, GWL_STYLE), "wrong dwStyle\n");
|
ok(info->dwStyle == (DWORD)GetWindowLongA(hwnd, GWL_STYLE),
|
||||||
ok(info->dwExStyle == (DWORD)GetWindowLongA(hwnd, GWL_EXSTYLE), "wrong dwExStyle\n");
|
"wrong dwStyle: %08lx != %08lx\n", info->dwStyle, GetWindowLongA(hwnd, GWL_STYLE));
|
||||||
|
ok(info->dwExStyle == (DWORD)GetWindowLongA(hwnd, GWL_EXSTYLE),
|
||||||
|
"wrong dwExStyle: %08lx != %08lx\n", info->dwStyle, GetWindowLongA(hwnd, GWL_EXSTYLE));
|
||||||
status = (GetActiveWindow() == hwnd) ? WS_ACTIVECAPTION : 0;
|
status = (GetActiveWindow() == hwnd) ? WS_ACTIVECAPTION : 0;
|
||||||
ok(info->dwWindowStatus == status, "wrong dwWindowStatus %04lx/%04lx\n",
|
ok(info->dwWindowStatus == status, "wrong dwWindowStatus: %04lx != %04lx\n",
|
||||||
info->dwWindowStatus, status);
|
info->dwWindowStatus, status);
|
||||||
|
|
||||||
if (test_borders && !IsRectEmpty(&rcWindow))
|
if (test_borders && !IsRectEmpty(&rcWindow))
|
||||||
@ -711,7 +713,7 @@ static LRESULT CALLBACK cbt_hook_proc(int nCode, WPARAM wParam, LPARAM lParam)
|
|||||||
trace("CBT: %d (%s), %08x, %08lx\n", nCode, code_name, wParam, lParam);
|
trace("CBT: %d (%s), %08x, %08lx\n", nCode, code_name, wParam, lParam);
|
||||||
|
|
||||||
/* on HCBT_DESTROYWND window state is undefined */
|
/* on HCBT_DESTROYWND window state is undefined */
|
||||||
if (nCode != HCBT_DESTROYWND && wParam)
|
if (nCode != HCBT_DESTROYWND && IsWindow((HWND)wParam))
|
||||||
{
|
{
|
||||||
BOOL is_win9x = GetWindowLongPtrW((HWND)wParam, GWLP_WNDPROC) == 0;
|
BOOL is_win9x = GetWindowLongPtrW((HWND)wParam, GWLP_WNDPROC) == 0;
|
||||||
if (is_win9x && nCode == HCBT_CREATEWND)
|
if (is_win9x && nCode == HCBT_CREATEWND)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user