mirror of
https://github.com/reactos/reactos.git
synced 2025-02-20 15:35:04 +00:00
sync user32 winetest with wine 1.1.23
svn path=/trunk/; revision=41301
This commit is contained in:
parent
06b07ed556
commit
c1787d3a8a
8 changed files with 253 additions and 171 deletions
|
@ -1615,12 +1615,6 @@ static void test_DdeCreateDataHandle(void)
|
|||
ok(hdata != NULL, "Expected non-NULL hdata\n");
|
||||
ok(err == DMLERR_NO_ERROR, "Expected DMLERR_NO_ERROR, got %d\n", err);
|
||||
|
||||
ptr = GlobalLock(hdata);
|
||||
todo_wine
|
||||
{
|
||||
ok(ptr == NULL, "Expected NULL, got %p\n", ptr);
|
||||
}
|
||||
|
||||
ptr = DdeAccessData(hdata, &size);
|
||||
ok(ptr != NULL, "Expected non-NULL ptr\n");
|
||||
ok(size == 260, "Expected 260, got %d\n", size);
|
||||
|
@ -1638,12 +1632,6 @@ static void test_DdeCreateDataHandle(void)
|
|||
ok(hdata != NULL, "Expected non-NULL hdata\n");
|
||||
ok(err == DMLERR_NO_ERROR, "Expected DMLERR_NO_ERROR, got %d\n", err);
|
||||
|
||||
ptr = GlobalLock(hdata);
|
||||
todo_wine
|
||||
{
|
||||
ok(ptr == NULL, "Expected NULL, got %p\n", ptr);
|
||||
}
|
||||
|
||||
ptr = DdeAccessData(hdata, &size);
|
||||
ok(ptr != NULL, "Expected non-NULL ptr\n");
|
||||
ok(size == 0, "Expected 0, got %d\n", size);
|
||||
|
@ -1661,12 +1649,6 @@ static void test_DdeCreateDataHandle(void)
|
|||
ok(hdata != NULL, "Expected non-NULL hdata\n");
|
||||
ok(err == DMLERR_NO_ERROR, "Expected DMLERR_NO_ERROR, got %d\n", err);
|
||||
|
||||
ptr = GlobalLock(hdata);
|
||||
todo_wine
|
||||
{
|
||||
ok(ptr == NULL, "Expected NULL, got %p\n", ptr);
|
||||
}
|
||||
|
||||
ptr = DdeAccessData(hdata, &size);
|
||||
ok(ptr != NULL, "Expected non-NULL ptr\n");
|
||||
ok(size == 262, "Expected 262, got %d\n", size);
|
||||
|
@ -1688,12 +1670,6 @@ static void test_DdeCreateDataHandle(void)
|
|||
ok(hdata != NULL, "Expected non-NULL hdata\n");
|
||||
ok(err == DMLERR_NO_ERROR, "Expected DMLERR_NO_ERROR, got %d\n", err);
|
||||
|
||||
ptr = GlobalLock(hdata);
|
||||
todo_wine
|
||||
{
|
||||
ok(ptr == NULL, "Expected NULL, got %p\n", ptr);
|
||||
}
|
||||
|
||||
ptr = DdeAccessData(hdata, &size);
|
||||
ok(ptr != NULL, "Expected non-NULL ptr\n");
|
||||
ok(!lstrcmpA((LPSTR)ptr, "data"), "Expected data, got %s\n", ptr);
|
||||
|
@ -1712,12 +1688,6 @@ static void test_DdeCreateDataHandle(void)
|
|||
ok(hdata != NULL, "Expected non-NULL hdata\n");
|
||||
ok(err == DMLERR_NO_ERROR, "Expected DMLERR_NO_ERROR, got %d\n", err);
|
||||
|
||||
ptr = GlobalLock(hdata);
|
||||
todo_wine
|
||||
{
|
||||
ok(ptr == NULL, "Expected NULL, got %p\n", ptr);
|
||||
}
|
||||
|
||||
ptr = DdeAccessData(hdata, &size);
|
||||
ok(ptr != NULL, "Expected non-NULL ptr\n");
|
||||
ok(!lstrcmpA((LPSTR)ptr, "data"), "Expected data, got %s\n", ptr);
|
||||
|
@ -1736,12 +1706,6 @@ static void test_DdeCreateDataHandle(void)
|
|||
ok(hdata != NULL, "Expected non-NULL hdata\n");
|
||||
ok(err == DMLERR_NO_ERROR, "Expected DMLERR_NO_ERROR, got %d\n", err);
|
||||
|
||||
ptr = GlobalLock(hdata);
|
||||
todo_wine
|
||||
{
|
||||
ok(ptr == NULL, "Expected NULL, got %p\n", ptr);
|
||||
}
|
||||
|
||||
ptr = DdeAccessData(hdata, &size);
|
||||
ok(ptr != NULL, "Expected non-NULL ptr\n");
|
||||
ok(!lstrcmpA((LPSTR)ptr, "data"), "Expected data, got %s\n", ptr);
|
||||
|
|
|
@ -1276,7 +1276,7 @@ static void test_ToUnicode(void)
|
|||
state[VK_LCONTROL] |= HIGHEST_BIT;
|
||||
|
||||
ret = ToUnicode(VK_TAB, SC_TAB, state, wStr, 2, 0);
|
||||
todo_wine ok(ret == 0, "ToUnicode for CTRL + Tab didn't return 0 (was %i)\n", ret);
|
||||
ok(ret == 0, "ToUnicode for CTRL + Tab didn't return 0 (was %i)\n", ret);
|
||||
|
||||
ret = ToUnicode(VK_RETURN, SC_RETURN, state, wStr, 2, 0);
|
||||
ok(ret == 1, "ToUnicode for CTRL + Return didn't return 1 (was %i)\n", ret);
|
||||
|
@ -1285,6 +1285,8 @@ static void test_ToUnicode(void)
|
|||
|
||||
state[VK_SHIFT] |= HIGHEST_BIT;
|
||||
state[VK_LSHIFT] |= HIGHEST_BIT;
|
||||
ret = ToUnicode(VK_TAB, SC_TAB, state, wStr, 2, 0);
|
||||
ok(ret == 0, "ToUnicode for CTRL + SHIFT + Tab didn't return 0 (was %i)\n", ret);
|
||||
ret = ToUnicode(VK_RETURN, SC_RETURN, state, wStr, 2, 0);
|
||||
todo_wine ok(ret == 0, "ToUnicode for CTRL + SHIFT + Return didn't return 0 (was %i)\n", ret);
|
||||
}
|
||||
|
|
|
@ -571,7 +571,7 @@ static void test_mbs_help( int ispop, int hassub, int mnuopt,
|
|||
4 + (mnuopt != 1 ? GetSystemMetrics(SM_CXMENUCHECK) : 0)
|
||||
: 0) +
|
||||
arrowwidth + MOD_avec + (hbmp ?
|
||||
((int)hbmp<0||(int)hbmp>12 ? bmpsize.cx + 2 : GetSystemMetrics( SM_CXMENUSIZE) + 2)
|
||||
((INT_PTR)hbmp<0||(INT_PTR)hbmp>12 ? bmpsize.cx + 2 : GetSystemMetrics( SM_CXMENUSIZE) + 2)
|
||||
: 0) +
|
||||
(text && hastab ? /* TAB space */
|
||||
MOD_avec + ( hastab==2 ? sc_size.cx : 0) : 0) +
|
||||
|
@ -588,7 +588,7 @@ static void test_mbs_help( int ispop, int hassub, int mnuopt,
|
|||
expect = max( ( !(text || hbmp) ? GetSystemMetrics( SM_CYMENUSIZE)/2 : 0),
|
||||
max( (text ? max( 2 + size.cy, MOD_hic + 4) : 0),
|
||||
(hbmp ?
|
||||
((int)hbmp<0||(int)hbmp>12 ?
|
||||
((INT_PTR)hbmp<0||(INT_PTR)hbmp>12 ?
|
||||
bmpsize.cy + 2
|
||||
: GetSystemMetrics( SM_CYMENUSIZE) + 2)
|
||||
: 0)));
|
||||
|
|
|
@ -885,7 +885,7 @@ static const struct message WmShowVisiblePopupSeq_3[] = {
|
|||
{ EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 },
|
||||
{ WM_SETFOCUS, sent|defwinproc },
|
||||
{ WM_GETTEXT, sent|optional },
|
||||
{ WM_WINDOWPOSCHANGED, sent|wparam|optional, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
|
||||
{ WM_WINDOWPOSCHANGED, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE, 0, SWP_SHOWWINDOW },
|
||||
{ 0 }
|
||||
};
|
||||
/* CreateWindow (for child window, not initially visible) */
|
||||
|
@ -1125,6 +1125,13 @@ static const struct message WmDestroyChildSeq[] = {
|
|||
{ WM_NCDESTROY, sent },
|
||||
{ 0 }
|
||||
};
|
||||
/* visible child window destroyed by thread exit */
|
||||
static const struct message WmExitThreadSeq[] = {
|
||||
{ WM_NCDESTROY, sent }, /* actually in grandchild */
|
||||
{ WM_PAINT, sent|parent },
|
||||
{ WM_ERASEBKGND, sent|parent|beginpaint },
|
||||
{ 0 }
|
||||
};
|
||||
/* DestroyWindow for a visible child window with invisible parent */
|
||||
static const struct message WmDestroyInvisibleChildSeq[] = {
|
||||
{ HCBT_DESTROYWND, hook },
|
||||
|
@ -1557,6 +1564,8 @@ static const struct message WmEnableWindowSeq_1[] =
|
|||
{
|
||||
{ WM_CANCELMODE, sent|wparam|lparam, 0, 0 },
|
||||
{ EVENT_OBJECT_STATECHANGE, winevent_hook|wparam|lparam, 0, 0 },
|
||||
{ HCBT_SETFOCUS, hook|optional },
|
||||
{ WM_KILLFOCUS, sent|optional },
|
||||
{ WM_ENABLE, sent|wparam|lparam, FALSE, 0 },
|
||||
{ 0 }
|
||||
};
|
||||
|
@ -1759,6 +1768,16 @@ static const char *get_winpos_flags(UINT flags)
|
|||
#undef DUMP
|
||||
}
|
||||
|
||||
static BOOL ignore_message( UINT message )
|
||||
{
|
||||
/* these are always ignored */
|
||||
return (message >= 0xc000 ||
|
||||
message == WM_GETICON ||
|
||||
message == WM_GETOBJECT ||
|
||||
message == WM_TIMECHANGE ||
|
||||
message == WM_DEVICECHANGE);
|
||||
}
|
||||
|
||||
|
||||
#define add_message(msg) add_message_(__LINE__,msg);
|
||||
static void add_message_(int line, const struct recvd_message *msg)
|
||||
|
@ -1863,6 +1882,8 @@ static void add_message_(int line, const struct recvd_message *msg)
|
|||
sprintf( seq->output, "%s: %p %04x wp %08lx lp %08lx",
|
||||
msg->descr, msg->hwnd, msg->message, msg->wParam, msg->lParam );
|
||||
}
|
||||
if (msg->flags & (sent|posted|parent|defwinproc|beginpaint))
|
||||
sprintf( seq->output + strlen(seq->output), " (flags %x)", msg->flags );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3202,9 +3223,7 @@ static LRESULT WINAPI mdi_client_hook_proc(HWND hwnd, UINT message, WPARAM wPara
|
|||
message != WM_NCHITTEST &&
|
||||
message != WM_GETTEXT &&
|
||||
message != WM_MDIGETACTIVE &&
|
||||
message != WM_GETICON &&
|
||||
message != WM_GETOBJECT &&
|
||||
message != WM_DEVICECHANGE)
|
||||
!ignore_message( message ))
|
||||
{
|
||||
msg.hwnd = hwnd;
|
||||
msg.message = message;
|
||||
|
@ -3231,9 +3250,7 @@ static LRESULT WINAPI mdi_child_wnd_proc(HWND hwnd, UINT message, WPARAM wParam,
|
|||
message != WM_ERASEBKGND &&
|
||||
message != WM_NCHITTEST &&
|
||||
message != WM_GETTEXT &&
|
||||
message != WM_GETICON &&
|
||||
message != WM_GETOBJECT &&
|
||||
message != WM_DEVICECHANGE)
|
||||
!ignore_message( message ))
|
||||
{
|
||||
switch (message)
|
||||
{
|
||||
|
@ -3281,9 +3298,7 @@ static LRESULT WINAPI mdi_frame_wnd_proc(HWND hwnd, UINT message, WPARAM wParam,
|
|||
message != WM_ERASEBKGND &&
|
||||
message != WM_NCHITTEST &&
|
||||
message != WM_GETTEXT &&
|
||||
message != WM_GETICON &&
|
||||
message != WM_GETOBJECT &&
|
||||
message != WM_DEVICECHANGE)
|
||||
!ignore_message( message ))
|
||||
{
|
||||
msg.hwnd = hwnd;
|
||||
msg.message = message;
|
||||
|
@ -3898,16 +3913,15 @@ static INT_PTR CALLBACK TestModalDlgProcA(HWND hwnd, UINT message, WPARAM wParam
|
|||
{
|
||||
struct recvd_message msg;
|
||||
|
||||
if (ignore_message( message )) return 0;
|
||||
|
||||
switch (message)
|
||||
{
|
||||
/* ignore */
|
||||
case WM_GETICON:
|
||||
case WM_GETOBJECT:
|
||||
case WM_MOUSEMOVE:
|
||||
case WM_NCMOUSEMOVE:
|
||||
case WM_NCMOUSELEAVE:
|
||||
case WM_SETCURSOR:
|
||||
case WM_DEVICECHANGE:
|
||||
return 0;
|
||||
case WM_NCHITTEST:
|
||||
return HTCLIENT;
|
||||
|
@ -3958,7 +3972,6 @@ static void test_hv_scroll_1(HWND hwnd, INT ctl, DWORD clear, DWORD set, INT min
|
|||
|
||||
xmin = 0xdeadbeef;
|
||||
xmax = 0xdeadbeef;
|
||||
trace("Ignore GetScrollRange error below if you are on Win9x\n");
|
||||
ret = GetScrollRange(hwnd, ctl, &xmin, &xmax);
|
||||
ok( ret, "GetScrollRange(%d) error %d\n", ctl, GetLastError());
|
||||
ok_sequence(WmEmptySeq, "GetScrollRange(SB_HORZ/SB_VERT) empty sequence", FALSE);
|
||||
|
@ -5157,11 +5170,10 @@ static LRESULT CALLBACK button_hook_proc(HWND hwnd, UINT message, WPARAM wParam,
|
|||
LRESULT ret;
|
||||
struct recvd_message msg;
|
||||
|
||||
if (ignore_message( message )) return 0;
|
||||
|
||||
switch (message)
|
||||
{
|
||||
case WM_GETICON:
|
||||
case WM_GETOBJECT:
|
||||
return 0; /* ignore them */
|
||||
case WM_SYNCPAINT:
|
||||
break;
|
||||
case BM_SETSTATE:
|
||||
|
@ -5318,7 +5330,7 @@ static LRESULT CALLBACK static_hook_proc(HWND hwnd, UINT message, WPARAM wParam,
|
|||
LRESULT ret;
|
||||
struct recvd_message msg;
|
||||
|
||||
if (message == WM_GETICON || message == WM_GETOBJECT) return 0; /* ignore them */
|
||||
if (ignore_message( message )) return 0;
|
||||
|
||||
msg.hwnd = hwnd;
|
||||
msg.message = message;
|
||||
|
@ -5420,9 +5432,7 @@ static LRESULT CALLBACK combobox_hook_proc(HWND hwnd, UINT message, WPARAM wPara
|
|||
message != WM_ERASEBKGND &&
|
||||
message != WM_NCHITTEST &&
|
||||
message != WM_GETTEXT &&
|
||||
message != WM_GETICON &&
|
||||
message != WM_GETOBJECT &&
|
||||
message != WM_DEVICECHANGE)
|
||||
!ignore_message( message ))
|
||||
{
|
||||
msg.hwnd = hwnd;
|
||||
msg.message = message;
|
||||
|
@ -6305,7 +6315,9 @@ static void test_paint_messages(void)
|
|||
struct wnd_event
|
||||
{
|
||||
HWND hwnd;
|
||||
HANDLE event;
|
||||
HANDLE grand_child;
|
||||
HANDLE start_event;
|
||||
HANDLE stop_event;
|
||||
};
|
||||
|
||||
static DWORD WINAPI thread_proc(void *param)
|
||||
|
@ -6317,7 +6329,7 @@ static DWORD WINAPI thread_proc(void *param)
|
|||
100, 100, 200, 200, 0, 0, 0, NULL);
|
||||
ok(wnd_event->hwnd != 0, "Failed to create overlapped window\n");
|
||||
|
||||
SetEvent(wnd_event->event);
|
||||
SetEvent(wnd_event->start_event);
|
||||
|
||||
while (GetMessage(&msg, 0, 0, 0))
|
||||
{
|
||||
|
@ -6330,6 +6342,54 @@ static DWORD WINAPI thread_proc(void *param)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static DWORD CALLBACK create_grand_child_thread( void *param )
|
||||
{
|
||||
struct wnd_event *wnd_event = param;
|
||||
HWND hchild;
|
||||
MSG msg;
|
||||
|
||||
hchild = CreateWindowExA(0, "TestWindowClass", "Test child",
|
||||
WS_CHILD | WS_VISIBLE, 0, 0, 10, 10, wnd_event->hwnd, 0, 0, NULL);
|
||||
ok (hchild != 0, "Failed to create child window\n");
|
||||
flush_events();
|
||||
flush_sequence();
|
||||
SetEvent( wnd_event->start_event );
|
||||
|
||||
for (;;)
|
||||
{
|
||||
MsgWaitForMultipleObjects(0, NULL, FALSE, 1000, QS_ALLINPUT);
|
||||
if (!IsWindow( hchild )) break; /* will be destroyed when parent thread exits */
|
||||
while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) DispatchMessage(&msg);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static DWORD CALLBACK create_child_thread( void *param )
|
||||
{
|
||||
struct wnd_event *wnd_event = param;
|
||||
struct wnd_event child_event;
|
||||
DWORD ret, tid;
|
||||
MSG msg;
|
||||
|
||||
child_event.hwnd = CreateWindowExA(0, "TestWindowClass", "Test child",
|
||||
WS_CHILD | WS_VISIBLE, 0, 0, 10, 10, wnd_event->hwnd, 0, 0, NULL);
|
||||
ok (child_event.hwnd != 0, "Failed to create child window\n");
|
||||
SetFocus( child_event.hwnd );
|
||||
flush_events();
|
||||
flush_sequence();
|
||||
child_event.start_event = wnd_event->start_event;
|
||||
wnd_event->grand_child = CreateThread(NULL, 0, create_grand_child_thread, &child_event, 0, &tid);
|
||||
for (;;)
|
||||
{
|
||||
DWORD ret = MsgWaitForMultipleObjects(1, &child_event.start_event, FALSE, 1000, QS_SENDMESSAGE);
|
||||
if (ret != 1) break;
|
||||
while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) DispatchMessage(&msg);
|
||||
}
|
||||
ret = WaitForSingleObject( wnd_event->stop_event, 5000 );
|
||||
ok( !ret, "WaitForSingleObject failed %x\n", ret );
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void test_interthread_messages(void)
|
||||
{
|
||||
HANDLE hThread;
|
||||
|
@ -6341,8 +6401,8 @@ static void test_interthread_messages(void)
|
|||
struct wnd_event wnd_event;
|
||||
BOOL ret;
|
||||
|
||||
wnd_event.event = CreateEventW(NULL, 0, 0, NULL);
|
||||
if (!wnd_event.event)
|
||||
wnd_event.start_event = CreateEventW(NULL, 0, 0, NULL);
|
||||
if (!wnd_event.start_event)
|
||||
{
|
||||
win_skip("skipping interthread message test under win9x\n");
|
||||
return;
|
||||
|
@ -6351,9 +6411,9 @@ static void test_interthread_messages(void)
|
|||
hThread = CreateThread(NULL, 0, thread_proc, &wnd_event, 0, &tid);
|
||||
ok(hThread != NULL, "CreateThread failed, error %d\n", GetLastError());
|
||||
|
||||
ok(WaitForSingleObject(wnd_event.event, INFINITE) == WAIT_OBJECT_0, "WaitForSingleObject failed\n");
|
||||
ok(WaitForSingleObject(wnd_event.start_event, INFINITE) == WAIT_OBJECT_0, "WaitForSingleObject failed\n");
|
||||
|
||||
CloseHandle(wnd_event.event);
|
||||
CloseHandle(wnd_event.start_event);
|
||||
|
||||
SetLastError(0xdeadbeef);
|
||||
ok(!DestroyWindow(wnd_event.hwnd), "DestroyWindow succeded\n");
|
||||
|
@ -6397,6 +6457,38 @@ static void test_interthread_messages(void)
|
|||
CloseHandle(hThread);
|
||||
|
||||
ok(!IsWindow(wnd_event.hwnd), "window should be destroyed on thread exit\n");
|
||||
|
||||
wnd_event.hwnd = CreateWindowExA(0, "TestParentClass", "Test parent", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
|
||||
100, 100, 200, 200, 0, 0, 0, NULL);
|
||||
ok (wnd_event.hwnd != 0, "Failed to create parent window\n");
|
||||
flush_sequence();
|
||||
log_all_parent_messages++;
|
||||
wnd_event.start_event = CreateEventA( NULL, TRUE, FALSE, NULL );
|
||||
wnd_event.stop_event = CreateEventA( NULL, TRUE, FALSE, NULL );
|
||||
hThread = CreateThread( NULL, 0, create_child_thread, &wnd_event, 0, &tid );
|
||||
for (;;)
|
||||
{
|
||||
ret = MsgWaitForMultipleObjects(1, &wnd_event.start_event, FALSE, 1000, QS_SENDMESSAGE);
|
||||
if (ret != 1) break;
|
||||
while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) DispatchMessage(&msg);
|
||||
}
|
||||
ok( !ret, "MsgWaitForMultipleObjects failed %x\n", ret );
|
||||
/* now wait for the thread without processing messages; this shouldn't deadlock */
|
||||
SetEvent( wnd_event.stop_event );
|
||||
ret = WaitForSingleObject( hThread, 5000 );
|
||||
ok( !ret, "WaitForSingleObject failed %x\n", ret );
|
||||
CloseHandle( hThread );
|
||||
|
||||
ret = WaitForSingleObject( wnd_event.grand_child, 5000 );
|
||||
ok( !ret, "WaitForSingleObject failed %x\n", ret );
|
||||
CloseHandle( wnd_event.grand_child );
|
||||
|
||||
CloseHandle( wnd_event.start_event );
|
||||
CloseHandle( wnd_event.stop_event );
|
||||
flush_events();
|
||||
ok_sequence(WmExitThreadSeq, "destroy child on thread exit", FALSE);
|
||||
log_all_parent_messages--;
|
||||
DestroyWindow( wnd_event.hwnd );
|
||||
}
|
||||
|
||||
|
||||
|
@ -6657,10 +6749,8 @@ static void pump_msg_loop(HWND hwnd, HACCEL hAccel)
|
|||
|
||||
/* ignore some unwanted messages */
|
||||
if (msg.message == WM_MOUSEMOVE ||
|
||||
msg.message == WM_GETICON ||
|
||||
msg.message == WM_GETOBJECT ||
|
||||
msg.message == WM_TIMER ||
|
||||
msg.message == WM_DEVICECHANGE)
|
||||
ignore_message( msg.message ))
|
||||
continue;
|
||||
|
||||
log_msg.hwnd = msg.hwnd;
|
||||
|
@ -6902,8 +6992,7 @@ static LRESULT MsgCheckProc (BOOL unicode, HWND hwnd, UINT message,
|
|||
LRESULT ret;
|
||||
struct recvd_message msg;
|
||||
|
||||
/* ignore registered messages */
|
||||
if (message >= 0xc000) return 0;
|
||||
if (ignore_message( message )) return 0;
|
||||
|
||||
switch (message)
|
||||
{
|
||||
|
@ -6966,9 +7055,6 @@ static LRESULT MsgCheckProc (BOOL unicode, HWND hwnd, UINT message,
|
|||
case WM_MOUSEACTIVATE:
|
||||
case WM_NCMOUSEMOVE:
|
||||
case WM_SETCURSOR:
|
||||
case WM_GETICON:
|
||||
case WM_GETOBJECT:
|
||||
case WM_DEVICECHANGE:
|
||||
case WM_IME_SELECT:
|
||||
return 0;
|
||||
}
|
||||
|
@ -7038,11 +7124,10 @@ static LRESULT WINAPI PopupMsgCheckProcA(HWND hwnd, UINT message, WPARAM wParam,
|
|||
LRESULT ret;
|
||||
struct recvd_message msg;
|
||||
|
||||
if (ignore_message( message )) return 0;
|
||||
|
||||
switch (message)
|
||||
{
|
||||
case WM_GETICON:
|
||||
case WM_GETOBJECT:
|
||||
return 0; /* ignore them */
|
||||
case WM_QUERYENDSESSION:
|
||||
case WM_ENDSESSION:
|
||||
lParam &= ~0x01; /* Vista adds a 0x01 flag */
|
||||
|
@ -7078,10 +7163,7 @@ static LRESULT WINAPI ParentMsgCheckProcA(HWND hwnd, UINT message, WPARAM wParam
|
|||
LRESULT ret;
|
||||
struct recvd_message msg;
|
||||
|
||||
if (message == WM_GETICON || message == WM_GETOBJECT) return 0; /* ignore them */
|
||||
|
||||
/* ignore registered messages */
|
||||
if (message >= 0xc000) return 0;
|
||||
if (ignore_message( message )) return 0;
|
||||
|
||||
if (log_all_parent_messages ||
|
||||
message == WM_PARENTNOTIFY || message == WM_CANCELMODE ||
|
||||
|
@ -7145,7 +7227,7 @@ static LRESULT WINAPI TestDlgProcA(HWND hwnd, UINT message, WPARAM wParam, LPARA
|
|||
LRESULT ret;
|
||||
struct recvd_message msg;
|
||||
|
||||
if (message == WM_GETICON || message == WM_GETOBJECT) return 0; /* ignore them */
|
||||
if (ignore_message( message )) return 0;
|
||||
|
||||
if (test_def_id)
|
||||
{
|
||||
|
@ -8254,6 +8336,7 @@ static const struct message ScrollWindowPaint1[] = {
|
|||
{ WM_GETTEXT, sent|beginpaint|optional },
|
||||
{ WM_GETTEXT, sent|beginpaint|optional },
|
||||
{ WM_GETTEXT, sent|beginpaint|optional },
|
||||
{ WM_GETTEXT, sent|beginpaint|defwinproc|optional },
|
||||
{ WM_ERASEBKGND, sent|beginpaint|optional },
|
||||
{ 0 }
|
||||
};
|
||||
|
@ -8773,7 +8856,7 @@ static LRESULT CALLBACK edit_hook_proc(HWND hwnd, UINT message, WPARAM wParam, L
|
|||
LRESULT ret;
|
||||
struct recvd_message msg;
|
||||
|
||||
if (message == WM_GETICON || message == WM_GETOBJECT) return 0; /* ignore them */
|
||||
if (ignore_message( message )) return 0;
|
||||
|
||||
msg.hwnd = hwnd;
|
||||
msg.message = message;
|
||||
|
@ -10138,7 +10221,7 @@ static const struct message WmShowMaximized_2[] = {
|
|||
};
|
||||
static const struct message WmShowMaximized_3[] = {
|
||||
{ HCBT_MINMAX, hook|lparam, 0, SW_SHOWMAXIMIZED },
|
||||
{ WM_GETMINMAXINFO, sent },
|
||||
{ WM_GETMINMAXINFO, sent|optional },
|
||||
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_STATECHANGED, 0, SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE|SWP_NOSIZE|SWP_NOMOVE },
|
||||
{ HCBT_ACTIVATE, hook|optional }, /* win2000 doesn't send it */
|
||||
{ WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE }, /* win2000 doesn't send it */
|
||||
|
@ -10271,12 +10354,7 @@ static INT_PTR WINAPI test_dlg_proc(HWND hwnd, UINT message, WPARAM wParam, LPAR
|
|||
{
|
||||
struct recvd_message msg;
|
||||
|
||||
switch (message)
|
||||
{
|
||||
case WM_GETICON:
|
||||
case WM_GETOBJECT:
|
||||
return 0; /* ignore them */
|
||||
}
|
||||
if (ignore_message( message )) return 0;
|
||||
|
||||
msg.hwnd = hwnd;
|
||||
msg.message = message;
|
||||
|
@ -11020,14 +11098,18 @@ static const struct message wm_lb_click_0[] =
|
|||
static const struct message wm_lb_deletestring[] =
|
||||
{
|
||||
{ LB_DELETESTRING, sent|wparam|lparam, 0, 0 },
|
||||
{ WM_DELETEITEM, sent|wparam|parent, ID_LISTBOX, 0 },
|
||||
{ WM_DELETEITEM, sent|wparam|parent|optional, ID_LISTBOX, 0 },
|
||||
{ WM_DRAWITEM, sent|wparam|parent|optional, ID_LISTBOX },
|
||||
{ WM_DRAWITEM, sent|wparam|parent|optional, ID_LISTBOX },
|
||||
{ 0 }
|
||||
};
|
||||
static const struct message wm_lb_deletestring_reset[] =
|
||||
{
|
||||
{ LB_DELETESTRING, sent|wparam|lparam, 0, 0 },
|
||||
{ LB_RESETCONTENT, sent|wparam|lparam|defwinproc, 0, 0 },
|
||||
{ WM_DELETEITEM, sent|wparam|parent, ID_LISTBOX, 0 },
|
||||
{ LB_RESETCONTENT, sent|wparam|lparam|defwinproc|optional, 0, 0 },
|
||||
{ WM_DELETEITEM, sent|wparam|parent|optional, ID_LISTBOX, 0 },
|
||||
{ WM_DRAWITEM, sent|wparam|parent|optional, ID_LISTBOX },
|
||||
{ WM_DRAWITEM, sent|wparam|parent|optional, ID_LISTBOX },
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
|
@ -11048,9 +11130,7 @@ static LRESULT WINAPI listbox_hook_proc(HWND hwnd, UINT message, WPARAM wp, LPAR
|
|||
message != WM_ERASEBKGND &&
|
||||
message != WM_NCHITTEST &&
|
||||
message != WM_GETTEXT &&
|
||||
message != WM_GETOBJECT &&
|
||||
message != WM_GETICON &&
|
||||
message != WM_DEVICECHANGE)
|
||||
!ignore_message( message ))
|
||||
{
|
||||
msg.hwnd = hwnd;
|
||||
msg.message = message;
|
||||
|
@ -11080,7 +11160,9 @@ static void check_lb_state_dbg(HWND listbox, int count, int cur_sel,
|
|||
ret = CallWindowProcA(listbox_orig_proc, listbox, LB_GETCURSEL, 0, 0);
|
||||
ok_(__FILE__, line)(ret == cur_sel, "expected cur sel %d, got %ld\n", cur_sel, ret);
|
||||
ret = CallWindowProcA(listbox_orig_proc, listbox, LB_GETCARETINDEX, 0, 0);
|
||||
ok_(__FILE__, line)(ret == caret_index, "expected caret index %d, got %ld\n", caret_index, ret);
|
||||
ok_(__FILE__, line)(ret == caret_index ||
|
||||
broken(cur_sel == -1 && caret_index == 0 && ret == -1), /* nt4 */
|
||||
"expected caret index %d, got %ld\n", caret_index, ret);
|
||||
ret = CallWindowProcA(listbox_orig_proc, listbox, LB_GETTOPINDEX, 0, 0);
|
||||
ok_(__FILE__, line)(ret == top_index, "expected top index %d, got %ld\n", top_index, ret);
|
||||
}
|
||||
|
|
|
@ -222,25 +222,27 @@ static void scrollbar_test_default( DWORD style)
|
|||
|
||||
ret = GetScrollRange( hwnd, SB_VERT, &min, &max);
|
||||
ok( ret ||
|
||||
broken( !ret) /* Win 98/ME */ , "GetScrollRange failed.\n");
|
||||
broken( !ret) /* Win 9x/ME */ , "GetScrollRange failed.\n");
|
||||
/* range is 0,0 if there are no H or V scroll bars. 0,100 otherwise */
|
||||
if( !( style & ( WS_VSCROLL | WS_HSCROLL)))
|
||||
ok( min == 0 && max == 0,
|
||||
"Scroll bar range is %d,%d. Expected 0,0. Style %08x\n", min, max, style);
|
||||
else
|
||||
todo_wine
|
||||
ok( min == 0 && max == 100,
|
||||
ok(( min == 0 && max == 100) ||
|
||||
broken( min == 0 && max == 0), /* Win 9x/ME */
|
||||
"Scroll bar range is %d,%d. Expected 0,100. Style %08x\n", min, max, style);
|
||||
ret = GetScrollRange( hwnd, SB_HORZ, &min, &max);
|
||||
ok( ret ||
|
||||
broken( !ret) /* Win 98/ME */ , "GetScrollRange failed.\n");
|
||||
broken( !ret) /* Win 9x/ME */ , "GetScrollRange failed.\n");
|
||||
/* range is 0,0 if there are no H or V scroll bars. 0,100 otherwise */
|
||||
if( !( style & ( WS_VSCROLL | WS_HSCROLL)))
|
||||
ok( min == 0 && max == 0,
|
||||
"Scroll bar range is %d,%d. Expected 0,0. Style %08x\n", min, max, style);
|
||||
else
|
||||
todo_wine
|
||||
ok( min == 0 && max == 100,
|
||||
ok(( min == 0 && max == 100) ||
|
||||
broken( min == 0 && max == 0), /* Win 9x/ME */
|
||||
"Scroll bar range is %d,%d. Expected 0,100. Style %08x\n", min, max, style);
|
||||
/* test GetScrollInfo, vist for vertical SB */
|
||||
ret = GetScrollInfo( hwnd, SB_VERT, &si);
|
||||
|
@ -249,7 +251,9 @@ todo_wine
|
|||
ok( !ret, "GetScrollInfo succeeded unexpectedly. Style is %08x\n", style);
|
||||
else
|
||||
todo_wine
|
||||
ok( ret, "GetScrollInfo failed unexpectedly. Style is %08x\n", style);
|
||||
ok( ret ||
|
||||
broken( !ret), /* Win 9x/ME */
|
||||
"GetScrollInfo failed unexpectedly. Style is %08x\n", style);
|
||||
/* Same for Horizontal SB */
|
||||
ret = GetScrollInfo( hwnd, SB_HORZ, &si);
|
||||
/* should fail if no H orV scroll bar styles are present. Succeed otherwise */
|
||||
|
@ -257,7 +261,9 @@ todo_wine
|
|||
ok( !ret, "GetScrollInfo succeeded unexpectedly. Style is %08x\n", style);
|
||||
else
|
||||
todo_wine
|
||||
ok( ret, "GetScrollInfo failed unexpectedly. Style is %08x\n", style);
|
||||
ok( ret ||
|
||||
broken( !ret), /* Win 9x/ME */
|
||||
"GetScrollInfo failed unexpectedly. Style is %08x\n", style);
|
||||
/* now set the Vertical Scroll range to something that could be the default value it
|
||||
* already has */;
|
||||
ret = SetScrollRange( hwnd, SB_VERT, 0, 100, FALSE);
|
||||
|
@ -276,7 +282,7 @@ todo_wine
|
|||
/* should succeed in ALL cases */
|
||||
ok( ret, "GetScrollInfo failed unexpectedly. Style is %08x\n", style);
|
||||
/* report the windows style */
|
||||
winstyle = GetWindowLongW( hwnd, GWL_STYLE );
|
||||
winstyle = GetWindowLongA( hwnd, GWL_STYLE );
|
||||
/* WS_VSCROLL added to the window style */
|
||||
if( !(style & WS_VSCROLL))
|
||||
{
|
||||
|
@ -286,7 +292,8 @@ todo_wine
|
|||
"unexpected style change %8lx expected %8lx\n",
|
||||
(winstyle & (WS_HSCROLL|WS_VSCROLL)), style | WS_VSCROLL);
|
||||
else
|
||||
ok( (winstyle & (WS_HSCROLL|WS_VSCROLL)) == style,
|
||||
ok( (winstyle & (WS_HSCROLL|WS_VSCROLL)) == style ||
|
||||
broken((winstyle & (WS_HSCROLL|WS_VSCROLL)) == (WS_HSCROLL|WS_VSCROLL)), /* Win 9x/ME */
|
||||
"unexpected style change %8lx expected %8x\n",
|
||||
(winstyle & (WS_HSCROLL|WS_VSCROLL)), style);
|
||||
}
|
||||
|
@ -314,7 +321,7 @@ todo_wine
|
|||
/* should succeed in ALL cases */
|
||||
ok( ret, "GetScrollInfo failed unexpectedly. Style is %08x\n", style);
|
||||
/* report the windows style */
|
||||
winstyle = GetWindowLongW( hwnd, GWL_STYLE );
|
||||
winstyle = GetWindowLongA( hwnd, GWL_STYLE );
|
||||
/* WS_HSCROLL added to the window style */
|
||||
if( !(style & WS_HSCROLL))
|
||||
{
|
||||
|
@ -324,7 +331,8 @@ todo_wine
|
|||
"unexpected style change %8lx expected %8lx\n",
|
||||
(winstyle & (WS_HSCROLL|WS_VSCROLL)), style | WS_HSCROLL);
|
||||
else
|
||||
ok( (winstyle & (WS_HSCROLL|WS_VSCROLL)) == style,
|
||||
ok( (winstyle & (WS_HSCROLL|WS_VSCROLL)) == style ||
|
||||
broken((winstyle & (WS_HSCROLL|WS_VSCROLL)) == (WS_HSCROLL|WS_VSCROLL)), /* Win 9x/ME */
|
||||
"unexpected style change %8lx expected %8x\n",
|
||||
(winstyle & (WS_HSCROLL|WS_VSCROLL)), style);
|
||||
}
|
||||
|
@ -372,7 +380,7 @@ todo_wine
|
|||
/* should fail */
|
||||
ok( !ret, "GetScrollInfo succeeded unexpectedly. Style is %08x\n", style);
|
||||
/* add scroll styles */
|
||||
winstyle = GetWindowLongW( hwnd, GWL_STYLE );
|
||||
winstyle = GetWindowLongA( hwnd, GWL_STYLE );
|
||||
SetWindowLongW( hwnd, GWL_STYLE, winstyle | WS_VSCROLL | WS_HSCROLL);
|
||||
ret = GetScrollInfo( hwnd, SB_VERT, &si);
|
||||
/* should still fail */
|
||||
|
|
|
@ -245,11 +245,11 @@ static BOOL test_error_msg ( int rc, const char *name )
|
|||
{
|
||||
if (last_error==0xdeadbeef || last_error==ERROR_INVALID_SPI_VALUE || last_error==ERROR_INVALID_PARAMETER)
|
||||
{
|
||||
trace("%s not supported on this platform. Skipping test\n", name);
|
||||
skip("%s not supported on this platform\n", name);
|
||||
}
|
||||
else if (last_error==ERROR_ACCESS_DENIED)
|
||||
{
|
||||
trace("%s does not have privileges to run. Skipping test\n", name);
|
||||
skip("%s does not have privileges to run\n", name);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -274,7 +274,7 @@ static BOOL test_error_msg ( int rc, const char *name )
|
|||
* lpsRegName - registry entry name
|
||||
* lpsTestValue - value to test
|
||||
*/
|
||||
static void _test_reg_key( LPCSTR subKey1, LPCSTR subKey2, LPCSTR valName1, LPCSTR valName2, LPCSTR testValue )
|
||||
static void _test_reg_key( LPCSTR subKey1, LPCSTR subKey2, LPCSTR valName1, LPCSTR valName2, LPCSTR testValue, BOOL optional )
|
||||
{
|
||||
CHAR value[MAX_PATH];
|
||||
DWORD valueLen;
|
||||
|
@ -360,16 +360,21 @@ static void _test_reg_key( LPCSTR subKey1, LPCSTR subKey2, LPCSTR valName1, LPCS
|
|||
}
|
||||
}
|
||||
}
|
||||
ok(found,"Missing registry values: %s or %s in keys: %s or %s\n",
|
||||
ok(found || optional,
|
||||
"Missing registry values: %s or %s in keys: %s or %s\n",
|
||||
valName1, (valName2?valName2:"<n/a>"), subKey1, (subKey2?subKey2:"<n/a>") );
|
||||
}
|
||||
|
||||
#define test_reg_key( subKey, valName, testValue ) \
|
||||
_test_reg_key( subKey, NULL, valName, NULL, testValue )
|
||||
_test_reg_key( subKey, NULL, valName, NULL, testValue, FALSE )
|
||||
#define test_reg_key_optional( subKey, valName, testValue ) \
|
||||
_test_reg_key( subKey, NULL, valName, NULL, testValue, TRUE )
|
||||
#define test_reg_key_ex( subKey1, subKey2, valName, testValue ) \
|
||||
_test_reg_key( subKey1, subKey2, valName, NULL, testValue )
|
||||
_test_reg_key( subKey1, subKey2, valName, NULL, testValue, FALSE )
|
||||
#define test_reg_key_ex2( subKey1, subKey2, valName1, valName2, testValue ) \
|
||||
_test_reg_key( subKey1, subKey2, valName1, valName2, testValue )
|
||||
_test_reg_key( subKey1, subKey2, valName1, valName2, testValue, FALSE )
|
||||
#define test_reg_key_ex2_optional( subKey1, subKey2, valName1, valName2, testValue ) \
|
||||
_test_reg_key( subKey1, subKey2, valName1, valName2, testValue, TRUE )
|
||||
|
||||
/* get a metric from the registry. If the value is negative
|
||||
* it is assumed to be in twips and converted to pixels */
|
||||
|
@ -1800,10 +1805,10 @@ static void test_SPI_SETWORKAREA( void ) /* 47 */
|
|||
test_change_message( SPI_SETWORKAREA, 0);
|
||||
eq( area.left, curr_val.left, "left", "%d" );
|
||||
eq( area.top, curr_val.top, "top", "%d" );
|
||||
/* size may be rounded up */
|
||||
ok( area.right >= curr_val.right && area.right < curr_val.right + 16,
|
||||
/* size may be rounded */
|
||||
ok( area.right >= curr_val.right - 16 && area.right < curr_val.right + 16,
|
||||
"right: got %d instead of %d\n", area.right, curr_val.right );
|
||||
ok( area.bottom >= curr_val.bottom && area.bottom < curr_val.bottom + 16,
|
||||
ok( area.bottom >= curr_val.bottom - 16 && area.bottom < curr_val.bottom + 16,
|
||||
"bottom: got %d instead of %d\n", area.bottom, curr_val.bottom );
|
||||
curr_val = area;
|
||||
rc=SystemParametersInfoA( SPI_SETWORKAREA, 0, &old_area,
|
||||
|
@ -1815,10 +1820,10 @@ static void test_SPI_SETWORKAREA( void ) /* 47 */
|
|||
test_change_message( SPI_SETWORKAREA, 0 );
|
||||
eq( area.left, old_area.left, "left", "%d" );
|
||||
eq( area.top, old_area.top, "top", "%d" );
|
||||
/* size may be rounded up */
|
||||
ok( area.right >= old_area.right && area.right < old_area.right + 16,
|
||||
/* size may be rounded */
|
||||
ok( area.right >= old_area.right - 16 && area.right < old_area.right + 16,
|
||||
"right: got %d instead of %d\n", area.right, old_area.right );
|
||||
ok( area.bottom >= old_area.bottom && area.bottom < old_area.bottom + 16,
|
||||
ok( area.bottom >= old_area.bottom - 16 && area.bottom < old_area.bottom + 16,
|
||||
"bottom: got %d instead of %d\n", area.bottom, old_area.bottom );
|
||||
}
|
||||
|
||||
|
@ -1917,9 +1922,9 @@ static void test_SPI_SETSCREENREADER( void ) /* 71 */
|
|||
if (!test_error_msg(rc,"SPI_SETSCREENREADER")) return;
|
||||
ok(rc!=0,"%d: rc=%d err=%d\n",i,rc,GetLastError());
|
||||
test_change_message( SPI_SETSCREENREADER, 1 );
|
||||
test_reg_key_ex2( SPI_SETSCREENREADER_REGKEY, SPI_SETSCREENREADER_REGKEY_LEGACY,
|
||||
SPI_SETSCREENREADER_VALNAME, SPI_SETSCREENREADER_VALNAME_LEGACY,
|
||||
vals[i] ? "1" : "0" );
|
||||
test_reg_key_ex2_optional( SPI_SETSCREENREADER_REGKEY, SPI_SETSCREENREADER_REGKEY_LEGACY,
|
||||
SPI_SETSCREENREADER_VALNAME, SPI_SETSCREENREADER_VALNAME_LEGACY,
|
||||
vals[i] ? "1" : "0" );
|
||||
|
||||
rc=SystemParametersInfoA( SPI_GETSCREENREADER, 0, &v, 0 );
|
||||
ok(rc!=0,"%d: rc=%d err=%d\n",i,rc,GetLastError());
|
||||
|
@ -1988,14 +1993,16 @@ static void test_SPI_SETLOWPOWERACTIVE( void ) /* 85 */
|
|||
if (!test_error_msg(rc,"SPI_SETLOWPOWERACTIVE")) return;
|
||||
ok(rc!=0,"%d: rc=%d err=%d\n",i,rc,GetLastError());
|
||||
test_change_message( SPI_SETLOWPOWERACTIVE, 1 );
|
||||
test_reg_key( SPI_SETLOWPOWERACTIVE_REGKEY,
|
||||
SPI_SETLOWPOWERACTIVE_VALNAME,
|
||||
vals[i] ? "1" : "0" );
|
||||
test_reg_key_optional( SPI_SETLOWPOWERACTIVE_REGKEY,
|
||||
SPI_SETLOWPOWERACTIVE_VALNAME,
|
||||
vals[i] ? "1" : "0" );
|
||||
|
||||
/* SPI_SETLOWPOWERACTIVE is not persistent in win2k3 and above */
|
||||
v = 0xdeadbeef;
|
||||
rc=SystemParametersInfoA( SPI_GETLOWPOWERACTIVE, 0, &v, 0 );
|
||||
ok(rc!=0,"%d: rc=%d err=%d\n",i,rc,GetLastError());
|
||||
ok(v == vals[i] ||
|
||||
broken(v == (0xdead0000 | vals[i])) || /* win98 only sets the low word */
|
||||
v == 0, /* win2k3 */
|
||||
"SPI_GETLOWPOWERACTIVE: got %d instead of 0 or %d\n", v, vals[i]);
|
||||
}
|
||||
|
@ -2026,14 +2033,16 @@ static void test_SPI_SETPOWEROFFACTIVE( void ) /* 86 */
|
|||
if (!test_error_msg(rc,"SPI_SETPOWEROFFACTIVE")) return;
|
||||
ok(rc!=0,"%d: rc=%d err=%d\n",i,rc,GetLastError());
|
||||
test_change_message( SPI_SETPOWEROFFACTIVE, 1 );
|
||||
test_reg_key( SPI_SETPOWEROFFACTIVE_REGKEY,
|
||||
SPI_SETPOWEROFFACTIVE_VALNAME,
|
||||
vals[i] ? "1" : "0" );
|
||||
test_reg_key_optional( SPI_SETPOWEROFFACTIVE_REGKEY,
|
||||
SPI_SETPOWEROFFACTIVE_VALNAME,
|
||||
vals[i] ? "1" : "0" );
|
||||
|
||||
/* SPI_SETPOWEROFFACTIVE is not persistent in win2k3 and above */
|
||||
v = 0xdeadbeef;
|
||||
rc=SystemParametersInfoA( SPI_GETPOWEROFFACTIVE, 0, &v, 0 );
|
||||
ok(rc!=0,"%d: rc=%d err=%d\n",i,rc,GetLastError());
|
||||
ok(v == vals[i] ||
|
||||
broken(v == (0xdead0000 | vals[i])) || /* win98 only sets the low word */
|
||||
v == 0, /* win2k3 */
|
||||
"SPI_GETPOWEROFFACTIVE: got %d instead of 0 or %d\n", v, vals[i]);
|
||||
}
|
||||
|
@ -2064,9 +2073,9 @@ static void test_SPI_SETSNAPTODEFBUTTON( void ) /* 95 */
|
|||
if (!test_error_msg(rc,"SPI_SETSNAPTODEFBUTTON")) return;
|
||||
ok(rc!=0,"%d: rc=%d err=%d\n",i,rc,GetLastError());
|
||||
test_change_message( SPI_SETSNAPTODEFBUTTON, 0 );
|
||||
test_reg_key( SPI_SETSNAPTODEFBUTTON_REGKEY,
|
||||
SPI_SETSNAPTODEFBUTTON_VALNAME,
|
||||
vals[i] ? "1" : "0" );
|
||||
test_reg_key_optional( SPI_SETSNAPTODEFBUTTON_REGKEY,
|
||||
SPI_SETSNAPTODEFBUTTON_VALNAME,
|
||||
vals[i] ? "1" : "0" );
|
||||
|
||||
rc=SystemParametersInfoA( SPI_GETSNAPTODEFBUTTON, 0, &v, 0 );
|
||||
ok(rc!=0,"%d: rc=%d err=%d\n",i,rc,GetLastError());
|
||||
|
@ -2722,12 +2731,14 @@ static void test_EnumDisplaySettings(void)
|
|||
DWORD num;
|
||||
|
||||
memset(&devmode, 0, sizeof(devmode));
|
||||
devmode.dmSize = sizeof(devmode);
|
||||
/* Win95 doesn't handle ENUM_CURRENT_SETTINGS correctly */
|
||||
EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &devmode);
|
||||
|
||||
hdc = GetDC(0);
|
||||
val = GetDeviceCaps(hdc, BITSPIXEL);
|
||||
ok(devmode.dmBitsPerPel == val, "GetDeviceCaps(BITSPIXEL) returned %d, EnumDisplaySettings returned %d\n",
|
||||
ok(devmode.dmBitsPerPel == val ||
|
||||
broken(devmode.dmDeviceName[0] == 0), /* Win95 */
|
||||
"GetDeviceCaps(BITSPIXEL) returned %d, EnumDisplaySettings returned %d\n",
|
||||
val, devmode.dmBitsPerPel);
|
||||
|
||||
val = GetDeviceCaps(hdc, NUMCOLORS);
|
||||
|
|
|
@ -27,8 +27,7 @@
|
|||
#include "winuser.h"
|
||||
#include "winerror.h"
|
||||
|
||||
#define MODIFIED(rect) (rect.left = 10 && rect.right != 100 && rect.top == 10 && rect.bottom != 100)
|
||||
#define SAME(rect) (rect.left = 10 && rect.right == 100 && rect.top == 10 && rect.bottom == 100)
|
||||
#define MODIFIED(rect) (rect.left == 10 && rect.right != 100 && rect.top == 10 && rect.bottom != 100)
|
||||
#define EMPTY(rect) (rect.left == rect.right && rect.bottom == rect.top)
|
||||
|
||||
static void test_DrawTextCalcRect(void)
|
||||
|
|
|
@ -118,6 +118,16 @@ static void check_parents( HWND hwnd, HWND ga_parent, HWND gwl_parent, HWND get_
|
|||
}
|
||||
}
|
||||
|
||||
static BOOL ignore_message( UINT message )
|
||||
{
|
||||
/* these are always ignored */
|
||||
return (message >= 0xc000 ||
|
||||
message == WM_GETICON ||
|
||||
message == WM_GETOBJECT ||
|
||||
message == WM_TIMECHANGE ||
|
||||
message == WM_DEVICECHANGE);
|
||||
}
|
||||
|
||||
static BOOL CALLBACK EnumChildProc( HWND hwndChild, LPARAM lParam)
|
||||
{
|
||||
(*(LPINT)lParam)++;
|
||||
|
@ -2312,7 +2322,10 @@ static void check_wnd_state_(const char *file, int line,
|
|||
HWND active, HWND foreground, HWND focus, HWND capture)
|
||||
{
|
||||
ok_(file, line)(active == GetActiveWindow(), "GetActiveWindow() = %p\n", GetActiveWindow());
|
||||
if (foreground && GetForegroundWindow())
|
||||
/* only check foreground if it belongs to the current thread */
|
||||
/* foreground can be moved to a different app pretty much at any time */
|
||||
if (foreground && GetForegroundWindow() &&
|
||||
GetWindowThreadProcessId(GetForegroundWindow(), NULL) == GetCurrentThreadId())
|
||||
ok_(file, line)(foreground == GetForegroundWindow(), "GetForegroundWindow() = %p\n", GetForegroundWindow());
|
||||
ok_(file, line)(focus == GetFocus(), "GetFocus() = %p\n", GetFocus());
|
||||
ok_(file, line)(capture == GetCapture(), "GetCapture() = %p\n", GetCapture());
|
||||
|
@ -2621,6 +2634,17 @@ static void test_capture_3(HWND hwnd1, HWND hwnd2)
|
|||
ok (ret, "releasecapture did not return TRUE after second try.\n");
|
||||
}
|
||||
|
||||
/* PeekMessage wrapper that ignores the messages we don't care about */
|
||||
static BOOL peek_message( MSG *msg )
|
||||
{
|
||||
BOOL ret;
|
||||
do
|
||||
{
|
||||
ret = PeekMessageA(msg, 0, 0, 0, PM_REMOVE);
|
||||
} while (ret && (msg->message == WM_TIMER || ignore_message(msg->message)));
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void test_keyboard_input(HWND hwnd)
|
||||
{
|
||||
MSG msg;
|
||||
|
@ -2639,40 +2663,31 @@ static void test_keyboard_input(HWND hwnd)
|
|||
flush_events( TRUE );
|
||||
|
||||
PostMessageA(hwnd, WM_KEYDOWN, 0, 0);
|
||||
do
|
||||
{
|
||||
ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE);
|
||||
ok( ret, "no message available\n");
|
||||
}
|
||||
while (ret && msg.message >= 0xc000);
|
||||
ret = peek_message(&msg);
|
||||
ok( ret, "no message available\n");
|
||||
ok(msg.hwnd == hwnd && msg.message == WM_KEYDOWN, "hwnd %p message %04x\n", msg.hwnd, msg.message);
|
||||
do
|
||||
ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE);
|
||||
while (ret && (msg.message == WM_TIMER || msg.message >= 0xc000));
|
||||
ret = peek_message(&msg);
|
||||
ok( !ret, "message %04x available\n", msg.message);
|
||||
|
||||
ok(GetFocus() == hwnd, "wrong focus window %p\n", GetFocus());
|
||||
|
||||
PostThreadMessageA(GetCurrentThreadId(), WM_KEYDOWN, 0, 0);
|
||||
ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
|
||||
ret = peek_message(&msg);
|
||||
ok(ret, "no message available\n");
|
||||
ok(!msg.hwnd && msg.message == WM_KEYDOWN, "hwnd %p message %04x\n", msg.hwnd, msg.message);
|
||||
ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE);
|
||||
ret = peek_message(&msg);
|
||||
ok( !ret, "message %04x available\n", msg.message);
|
||||
|
||||
ok(GetFocus() == hwnd, "wrong focus window %p\n", GetFocus());
|
||||
|
||||
keybd_event(VK_SPACE, 0, 0, 0);
|
||||
do
|
||||
{
|
||||
ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE);
|
||||
} while (ret && msg.message >= 0xc000);
|
||||
if (!ret)
|
||||
if (!peek_message(&msg))
|
||||
{
|
||||
skip( "keybd_event didn't work, skipping keyboard test\n" );
|
||||
return;
|
||||
}
|
||||
ok(msg.hwnd == hwnd && msg.message == WM_KEYDOWN, "hwnd %p message %04x\n", msg.hwnd, msg.message);
|
||||
ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE);
|
||||
ret = peek_message(&msg);
|
||||
ok( !ret, "message %04x available\n", msg.message);
|
||||
|
||||
SetFocus(0);
|
||||
|
@ -2681,25 +2696,28 @@ static void test_keyboard_input(HWND hwnd)
|
|||
flush_events( TRUE );
|
||||
|
||||
PostMessageA(hwnd, WM_KEYDOWN, 0, 0);
|
||||
ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
|
||||
ret = peek_message(&msg);
|
||||
ok(ret, "no message available\n");
|
||||
ok(msg.hwnd == hwnd && msg.message == WM_KEYDOWN, "hwnd %p message %04x\n", msg.hwnd, msg.message);
|
||||
ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE);
|
||||
ret = peek_message(&msg);
|
||||
ok( !ret, "message %04x available\n", msg.message);
|
||||
|
||||
ok(GetFocus() == 0, "wrong focus window %p\n", GetFocus());
|
||||
|
||||
PostThreadMessageA(GetCurrentThreadId(), WM_KEYDOWN, 0, 0);
|
||||
ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
|
||||
ret = peek_message(&msg);
|
||||
ok(ret, "no message available\n");
|
||||
ok(!msg.hwnd && msg.message == WM_KEYDOWN, "hwnd %p message %04x\n", msg.hwnd, msg.message);
|
||||
ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE);
|
||||
ret = peek_message(&msg);
|
||||
ok( !ret, "message %04x available\n", msg.message);
|
||||
|
||||
ok(GetFocus() == 0, "wrong focus window %p\n", GetFocus());
|
||||
|
||||
keybd_event(VK_SPACE, 0, 0, 0);
|
||||
ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
|
||||
ret = peek_message(&msg);
|
||||
ok(ret, "no message available\n");
|
||||
ok(msg.hwnd == hwnd && msg.message == WM_SYSKEYDOWN, "hwnd %p message %04x\n", msg.hwnd, msg.message);
|
||||
ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE);
|
||||
ret = peek_message(&msg);
|
||||
ok( !ret, "message %04x available\n", msg.message);
|
||||
}
|
||||
|
||||
|
@ -2709,11 +2727,11 @@ static BOOL wait_for_message( MSG *msg )
|
|||
|
||||
for (;;)
|
||||
{
|
||||
ret = PeekMessageA(msg, 0, 0, 0, PM_REMOVE);
|
||||
ret = peek_message(msg);
|
||||
if (ret)
|
||||
{
|
||||
if (msg->message == WM_PAINT) DispatchMessage(msg);
|
||||
else if (msg->message < 0xc000) break; /* skip registered messages */
|
||||
else break;
|
||||
}
|
||||
else if (MsgWaitForMultipleObjects( 0, NULL, FALSE, 100, QS_ALLINPUT ) == WAIT_TIMEOUT) break;
|
||||
}
|
||||
|
@ -2766,9 +2784,7 @@ static void test_mouse_input(HWND hwnd)
|
|||
/* Check that setting the same position may generate WM_MOUSEMOVE */
|
||||
SetCursorPos(x, y);
|
||||
msg.message = 0;
|
||||
do
|
||||
ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE);
|
||||
while (ret && msg.message >= 0xc000); /* skip registered messages */
|
||||
ret = peek_message(&msg);
|
||||
if (ret)
|
||||
{
|
||||
ok(msg.hwnd == popup && msg.message == WM_MOUSEMOVE, "hwnd %p message %04x\n",
|
||||
|
@ -2789,11 +2805,11 @@ static void test_mouse_input(HWND hwnd)
|
|||
/* FIXME: SetCursorPos in Wine generates additional WM_MOUSEMOVE message */
|
||||
while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE))
|
||||
{
|
||||
if (msg.message == WM_TIMER || msg.message >= 0xc000) continue; /* skip registered messages */
|
||||
if (msg.message == WM_TIMER || ignore_message(msg.message)) continue;
|
||||
ok(msg.hwnd == popup && msg.message == WM_MOUSEMOVE,
|
||||
"hwnd %p message %04x\n", msg.hwnd, msg.message);
|
||||
}
|
||||
ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE);
|
||||
ret = peek_message(&msg);
|
||||
ok( !ret, "message %04x available\n", msg.message);
|
||||
|
||||
mouse_event(MOUSEEVENTF_MOVE, -1, -1, 0, 0);
|
||||
|
@ -2853,7 +2869,7 @@ static void test_mouse_input(HWND hwnd)
|
|||
ok(msg.hwnd == popup && msg.message == WM_LBUTTONUP, "hwnd %p/%p message %04x\n",
|
||||
msg.hwnd, popup, msg.message);
|
||||
|
||||
ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE);
|
||||
ret = peek_message(&msg);
|
||||
ok(!ret, "message %04x available\n", msg.message);
|
||||
|
||||
ShowWindow(popup, SW_HIDE);
|
||||
|
@ -2881,10 +2897,10 @@ static void test_mouse_input(HWND hwnd)
|
|||
ok(ret, "no message available\n");
|
||||
ok(msg.hwnd == popup && msg.message == WM_LBUTTONDOWN, "hwnd %p/%p message %04x\n",
|
||||
msg.hwnd, popup, msg.message);
|
||||
ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
|
||||
ok(peek_message(&msg), "no message available\n");
|
||||
ok(msg.hwnd == popup && msg.message == WM_LBUTTONUP, "hwnd %p/%p message %04x\n",
|
||||
msg.hwnd, popup, msg.message);
|
||||
ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
|
||||
ok(peek_message(&msg), "no message available\n");
|
||||
|
||||
/* Test WM_MOUSEACTIVATE */
|
||||
#define TEST_MOUSEACTIVATE(A,B) \
|
||||
|
|
Loading…
Reference in a new issue