user32: Add more ShowWindow tests.
Move ShowWindow tests for children with an invisible parent into a separate test, add more ShowWindow tests. The tests show that an assumption in dlls/x11drv/winpos.c that SetWindowPos should not be called on a child with an invisible parent is not always true.
This commit is contained in:
parent
ba438d4f5d
commit
97c111d0d0
|
@ -634,8 +634,74 @@ static const struct message WmShowChildSeq_4[] = {
|
||||||
{ WM_CHILDACTIVATE, sent },
|
{ WM_CHILDACTIVATE, sent },
|
||||||
{ 0 }
|
{ 0 }
|
||||||
};
|
};
|
||||||
|
/* ShowWindow(SW_MINIMIZE) for child with invisible parent */
|
||||||
|
static const struct message WmShowChildInvisibleParentSeq_1[] = {
|
||||||
|
{ HCBT_MINMAX, hook|lparam, 0, SW_MINIMIZE },
|
||||||
|
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOZORDER|SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOCOPYBITS|0x8000 },
|
||||||
|
{ WM_NCCALCSIZE, sent|wparam, 1 },
|
||||||
|
{ WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOREDRAW|SWP_NOCOPYBITS|0x8000 },
|
||||||
|
{ WM_MOVE, sent|defwinproc },
|
||||||
|
{ WM_SIZE, sent|defwinproc },
|
||||||
|
{ EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 },
|
||||||
|
{ 0 }
|
||||||
|
};
|
||||||
|
/* repeated ShowWindow(SW_MINIMIZE) for child with invisible parent */
|
||||||
|
static const struct message WmShowChildInvisibleParentSeq_1r[] = {
|
||||||
|
{ HCBT_MINMAX, hook|lparam, 0, SW_MINIMIZE },
|
||||||
|
{ 0 }
|
||||||
|
};
|
||||||
|
/* ShowWindow(SW_MAXIMIZE) for child with invisible parent */
|
||||||
|
static const struct message WmShowChildInvisibleParentSeq_2[] = {
|
||||||
|
{ HCBT_MINMAX, hook|lparam, 0, SW_MAXIMIZE },
|
||||||
|
{ WM_GETMINMAXINFO, sent },
|
||||||
|
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED|0x8000 },
|
||||||
|
{ WM_NCCALCSIZE, sent|wparam, 1 },
|
||||||
|
{ WM_CHILDACTIVATE, sent },
|
||||||
|
{ WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_NOMOVE|SWP_NOZORDER|SWP_NOREDRAW|SWP_NOCLIENTMOVE|0x8000 },
|
||||||
|
{ WM_SIZE, sent|defwinproc },
|
||||||
|
{ EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 },
|
||||||
|
{ 0 }
|
||||||
|
};
|
||||||
|
/* repeated ShowWindow(SW_MAXIMIZE) for child with invisible parent */
|
||||||
|
static const struct message WmShowChildInvisibleParentSeq_2r[] = {
|
||||||
|
{ HCBT_MINMAX, hook|lparam, 0, SW_MAXIMIZE },
|
||||||
|
{ 0 }
|
||||||
|
};
|
||||||
|
/* ShowWindow(SW_SHOWMINIMIZED) for child with invisible parent */
|
||||||
|
static const struct message WmShowChildInvisibleParentSeq_3[] = {
|
||||||
|
{ HCBT_MINMAX, hook|lparam, 0, SW_SHOWMINIMIZED },
|
||||||
|
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_NOCOPYBITS|0x8000 },
|
||||||
|
{ WM_NCCALCSIZE, sent|wparam, 1 },
|
||||||
|
{ WM_CHILDACTIVATE, sent },
|
||||||
|
{ WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_NOZORDER|SWP_NOREDRAW|SWP_NOCOPYBITS|0x8000 },
|
||||||
|
{ WM_MOVE, sent|defwinproc },
|
||||||
|
{ WM_SIZE, sent|defwinproc },
|
||||||
|
{ EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 },
|
||||||
|
{ 0 }
|
||||||
|
};
|
||||||
|
/* repeated ShowWindow(SW_SHOWMINIMIZED) for child with invisible parent */
|
||||||
|
static const struct message WmShowChildInvisibleParentSeq_3r[] = {
|
||||||
|
{ HCBT_MINMAX, hook|lparam, 0, SW_SHOWMINIMIZED },
|
||||||
|
{ 0 }
|
||||||
|
};
|
||||||
|
/* ShowWindow(SW_SHOWMINNOACTIVE) for child with invisible parent */
|
||||||
|
static const struct message WmShowChildInvisibleParentSeq_4[] = {
|
||||||
|
{ HCBT_MINMAX, hook|lparam, 0, SW_SHOWMINNOACTIVE },
|
||||||
|
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOCOPYBITS|0x8000 },
|
||||||
|
{ WM_NCCALCSIZE, sent|wparam, 1 },
|
||||||
|
{ WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOREDRAW|SWP_NOCOPYBITS|0x8000 },
|
||||||
|
{ WM_MOVE, sent|defwinproc },
|
||||||
|
{ WM_SIZE, sent|defwinproc },
|
||||||
|
{ EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 },
|
||||||
|
{ 0 }
|
||||||
|
};
|
||||||
|
/* repeated ShowWindow(SW_SHOWMINNOACTIVE) for child with invisible parent */
|
||||||
|
static const struct message WmShowChildInvisibleParentSeq_4r[] = {
|
||||||
|
{ HCBT_MINMAX, hook|lparam, 0, SW_SHOWMINNOACTIVE },
|
||||||
|
{ 0 }
|
||||||
|
};
|
||||||
/* ShowWindow(SW_SHOW) for child with invisible parent */
|
/* ShowWindow(SW_SHOW) for child with invisible parent */
|
||||||
static const struct message WmShowChildInvisibleParentSeq[] = {
|
static const struct message WmShowChildInvisibleParentSeq_5[] = {
|
||||||
{ WM_SHOWWINDOW, sent|wparam, 1 },
|
{ WM_SHOWWINDOW, sent|wparam, 1 },
|
||||||
{ 0 }
|
{ 0 }
|
||||||
};
|
};
|
||||||
|
@ -645,7 +711,7 @@ static const struct message WmHideChildInvisibleParentSeq[] = {
|
||||||
{ 0 }
|
{ 0 }
|
||||||
};
|
};
|
||||||
/* SetWindowPos(SWP_SHOWWINDOW) for child with invisible parent */
|
/* SetWindowPos(SWP_SHOWWINDOW) for child with invisible parent */
|
||||||
static const struct message WmShowChildInvisibleParentSeq_2[] = {
|
static const struct message WmShowChildInvisibleParentSeq_6[] = {
|
||||||
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOZORDER },
|
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOZORDER },
|
||||||
{ EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 },
|
{ EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 },
|
||||||
{ WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOREDRAW|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
|
{ WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOREDRAW|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
|
||||||
|
@ -1342,9 +1408,21 @@ static void ok_sequence_(const struct message *expected, const char *context, in
|
||||||
context, expected->message, expected->wParam, actual->wParam);
|
context, expected->message, expected->wParam, actual->wParam);
|
||||||
}
|
}
|
||||||
if (expected->flags & lparam)
|
if (expected->flags & lparam)
|
||||||
|
{
|
||||||
|
if (expected->lParam != actual->lParam && todo)
|
||||||
|
{
|
||||||
|
todo_wine {
|
||||||
|
failcount ++;
|
||||||
|
ok_( file, line) (FALSE,
|
||||||
|
"%s: in msg 0x%04x expecting lParam 0x%lx got 0x%lx\n",
|
||||||
|
context, expected->message, expected->lParam, actual->lParam);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
ok_( file, line) (expected->lParam == actual->lParam,
|
ok_( file, line) (expected->lParam == actual->lParam,
|
||||||
"%s: in msg 0x%04x expecting lParam 0x%lx got 0x%lx\n",
|
"%s: in msg 0x%04x expecting lParam 0x%lx got 0x%lx\n",
|
||||||
context, expected->message, expected->lParam, actual->lParam);
|
context, expected->message, expected->lParam, actual->lParam);
|
||||||
|
}
|
||||||
ok_( file, line) ((expected->flags & defwinproc) == (actual->flags & defwinproc),
|
ok_( file, line) ((expected->flags & defwinproc) == (actual->flags & defwinproc),
|
||||||
"%s: the msg 0x%04x should %shave been sent by DefWindowProc\n",
|
"%s: the msg 0x%04x should %shave been sent by DefWindowProc\n",
|
||||||
context, expected->message, (expected->flags & defwinproc) ? "" : "NOT ");
|
context, expected->message, (expected->flags & defwinproc) ? "" : "NOT ");
|
||||||
|
@ -3554,40 +3632,6 @@ static void test_messages(void)
|
||||||
DialogBoxA( 0, "TEST_DIALOG", hparent, TestModalDlgProcA );
|
DialogBoxA( 0, "TEST_DIALOG", hparent, TestModalDlgProcA );
|
||||||
ok_sequence(WmModalDialogSeq, "ModalDialog", TRUE);
|
ok_sequence(WmModalDialogSeq, "ModalDialog", TRUE);
|
||||||
|
|
||||||
/* test showing child with hidden parent */
|
|
||||||
ShowWindow( hparent, SW_HIDE );
|
|
||||||
flush_sequence();
|
|
||||||
|
|
||||||
hchild = CreateWindowExA(0, "TestWindowClass", "Test child", WS_CHILD,
|
|
||||||
0, 0, 10, 10, hparent, 0, 0, NULL);
|
|
||||||
ok (hchild != 0, "Failed to create child window\n");
|
|
||||||
ok_sequence(WmCreateChildSeq, "CreateWindow:child", FALSE);
|
|
||||||
|
|
||||||
ShowWindow( hchild, SW_SHOW );
|
|
||||||
ok_sequence(WmShowChildInvisibleParentSeq, "ShowWindow:show child with invisible parent", FALSE);
|
|
||||||
ok(GetWindowLongA(hchild, GWL_STYLE) & WS_VISIBLE, "WS_VISIBLE should be set\n");
|
|
||||||
ok(!IsWindowVisible(hchild), "IsWindowVisible() should return FALSE\n");
|
|
||||||
|
|
||||||
ShowWindow( hchild, SW_HIDE );
|
|
||||||
ok_sequence(WmHideChildInvisibleParentSeq, "ShowWindow:hide child with invisible parent", FALSE);
|
|
||||||
ok(!(GetWindowLongA(hchild, GWL_STYLE) & WS_VISIBLE), "WS_VISIBLE should be not set\n");
|
|
||||||
ok(!IsWindowVisible(hchild), "IsWindowVisible() should return FALSE\n");
|
|
||||||
|
|
||||||
SetWindowPos(hchild, 0,0,0,0,0, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOZORDER);
|
|
||||||
ok_sequence(WmShowChildInvisibleParentSeq_2, "SetWindowPos:show child with invisible parent", FALSE);
|
|
||||||
ok(GetWindowLongA(hchild, GWL_STYLE) & WS_VISIBLE, "WS_VISIBLE should be set\n");
|
|
||||||
ok(!IsWindowVisible(hchild), "IsWindowVisible() should return FALSE\n");
|
|
||||||
|
|
||||||
SetWindowPos(hchild, 0,0,0,0,0, SWP_HIDEWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOZORDER);
|
|
||||||
ok_sequence(WmHideChildInvisibleParentSeq_2, "SetWindowPos:hide child with invisible parent", FALSE);
|
|
||||||
ok(!(GetWindowLongA(hchild, GWL_STYLE) & WS_VISIBLE), "WS_VISIBLE should not be set\n");
|
|
||||||
ok(!IsWindowVisible(hchild), "IsWindowVisible() should return FALSE\n");
|
|
||||||
|
|
||||||
SetWindowPos(hchild, 0,0,0,0,0, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOZORDER);
|
|
||||||
flush_sequence();
|
|
||||||
DestroyWindow(hchild);
|
|
||||||
ok_sequence(WmDestroyInvisibleChildSeq, "DestroyInvisibleChildSeq", FALSE);
|
|
||||||
|
|
||||||
DestroyWindow(hparent);
|
DestroyWindow(hparent);
|
||||||
flush_sequence();
|
flush_sequence();
|
||||||
|
|
||||||
|
@ -3679,6 +3723,155 @@ static void test_messages(void)
|
||||||
test_showwindow();
|
test_showwindow();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void invisible_parent_tests(void)
|
||||||
|
{
|
||||||
|
HWND hparent, hchild;
|
||||||
|
|
||||||
|
hparent = CreateWindowExA(0, "TestParentClass", "Test parent", WS_OVERLAPPEDWINDOW,
|
||||||
|
100, 100, 200, 200, 0, 0, 0, NULL);
|
||||||
|
ok (hparent != 0, "Failed to create parent window\n");
|
||||||
|
flush_sequence();
|
||||||
|
|
||||||
|
/* test showing child with hidden parent */
|
||||||
|
|
||||||
|
hchild = CreateWindowExA(0, "TestWindowClass", "Test child", WS_CHILD,
|
||||||
|
0, 0, 10, 10, hparent, 0, 0, NULL);
|
||||||
|
ok (hchild != 0, "Failed to create child window\n");
|
||||||
|
ok_sequence(WmCreateChildSeq, "CreateWindow:child", FALSE);
|
||||||
|
|
||||||
|
ShowWindow( hchild, SW_MINIMIZE );
|
||||||
|
ok_sequence(WmShowChildInvisibleParentSeq_1, "ShowWindow(SW_MINIMIZE) child with invisible parent", TRUE);
|
||||||
|
ok(GetWindowLongA(hchild, GWL_STYLE) & WS_VISIBLE, "WS_VISIBLE should be set\n");
|
||||||
|
ok(!IsWindowVisible(hchild), "IsWindowVisible() should return FALSE\n");
|
||||||
|
|
||||||
|
/* repeat */
|
||||||
|
flush_events();
|
||||||
|
ShowWindow( hchild, SW_MINIMIZE );
|
||||||
|
ok_sequence(WmShowChildInvisibleParentSeq_1r, "ShowWindow(SW_MINIMIZE) child with invisible parent", TRUE);
|
||||||
|
|
||||||
|
DestroyWindow(hchild);
|
||||||
|
hchild = CreateWindowExA(0, "TestWindowClass", "Test child", WS_CHILD,
|
||||||
|
0, 0, 10, 10, hparent, 0, 0, NULL);
|
||||||
|
flush_sequence();
|
||||||
|
|
||||||
|
ShowWindow( hchild, SW_MAXIMIZE );
|
||||||
|
ok_sequence(WmShowChildInvisibleParentSeq_2, "ShowWindow(SW_MAXIMIZE) child with invisible parent", TRUE);
|
||||||
|
ok(GetWindowLongA(hchild, GWL_STYLE) & WS_VISIBLE, "WS_VISIBLE should be set\n");
|
||||||
|
ok(!IsWindowVisible(hchild), "IsWindowVisible() should return FALSE\n");
|
||||||
|
|
||||||
|
/* repeat */
|
||||||
|
flush_events();
|
||||||
|
ShowWindow( hchild, SW_MAXIMIZE );
|
||||||
|
ok_sequence(WmShowChildInvisibleParentSeq_2r, "ShowWindow(SW_MAXIMIZE) child with invisible parent", TRUE);
|
||||||
|
|
||||||
|
DestroyWindow(hchild);
|
||||||
|
hchild = CreateWindowExA(0, "TestWindowClass", "Test child", WS_CHILD,
|
||||||
|
0, 0, 10, 10, hparent, 0, 0, NULL);
|
||||||
|
flush_sequence();
|
||||||
|
|
||||||
|
ShowWindow( hchild, SW_SHOWMINIMIZED );
|
||||||
|
ok_sequence(WmShowChildInvisibleParentSeq_3, "ShowWindow(SW_SHOWMINIMIZED) child with invisible parent", TRUE);
|
||||||
|
ok(GetWindowLongA(hchild, GWL_STYLE) & WS_VISIBLE, "WS_VISIBLE should be set\n");
|
||||||
|
ok(!IsWindowVisible(hchild), "IsWindowVisible() should return FALSE\n");
|
||||||
|
|
||||||
|
/* repeat */
|
||||||
|
flush_events();
|
||||||
|
ShowWindow( hchild, SW_SHOWMINIMIZED );
|
||||||
|
ok_sequence(WmShowChildInvisibleParentSeq_3r, "ShowWindow(SW_SHOWMINIMIZED) child with invisible parent", TRUE);
|
||||||
|
|
||||||
|
DestroyWindow(hchild);
|
||||||
|
hchild = CreateWindowExA(0, "TestWindowClass", "Test child", WS_CHILD,
|
||||||
|
0, 0, 10, 10, hparent, 0, 0, NULL);
|
||||||
|
flush_sequence();
|
||||||
|
|
||||||
|
/* same as ShowWindow( hchild, SW_MAXIMIZE ); */
|
||||||
|
ShowWindow( hchild, SW_SHOWMAXIMIZED );
|
||||||
|
ok_sequence(WmShowChildInvisibleParentSeq_2, "ShowWindow(SW_SHOWMAXIMIZED) child with invisible parent", TRUE);
|
||||||
|
ok(GetWindowLongA(hchild, GWL_STYLE) & WS_VISIBLE, "WS_VISIBLE should be set\n");
|
||||||
|
ok(!IsWindowVisible(hchild), "IsWindowVisible() should return FALSE\n");
|
||||||
|
|
||||||
|
DestroyWindow(hchild);
|
||||||
|
hchild = CreateWindowExA(0, "TestWindowClass", "Test child", WS_CHILD,
|
||||||
|
0, 0, 10, 10, hparent, 0, 0, NULL);
|
||||||
|
flush_sequence();
|
||||||
|
|
||||||
|
ShowWindow( hchild, SW_SHOWMINNOACTIVE );
|
||||||
|
ok_sequence(WmShowChildInvisibleParentSeq_4, "ShowWindow(SW_SHOWMINNOACTIVE) child with invisible parent", TRUE);
|
||||||
|
ok(GetWindowLongA(hchild, GWL_STYLE) & WS_VISIBLE, "WS_VISIBLE should be set\n");
|
||||||
|
ok(!IsWindowVisible(hchild), "IsWindowVisible() should return FALSE\n");
|
||||||
|
|
||||||
|
/* repeat */
|
||||||
|
flush_events();
|
||||||
|
ShowWindow( hchild, SW_SHOWMINNOACTIVE );
|
||||||
|
ok_sequence(WmShowChildInvisibleParentSeq_4r, "ShowWindow(SW_SHOWMINNOACTIVE) child with invisible parent", TRUE);
|
||||||
|
|
||||||
|
DestroyWindow(hchild);
|
||||||
|
hchild = CreateWindowExA(0, "TestWindowClass", "Test child", WS_CHILD,
|
||||||
|
0, 0, 10, 10, hparent, 0, 0, NULL);
|
||||||
|
flush_sequence();
|
||||||
|
|
||||||
|
/* FIXME: looks like XP SP2 doesn't know about SW_FORCEMINIMIZE at all */
|
||||||
|
ShowWindow( hchild, SW_FORCEMINIMIZE );
|
||||||
|
ok_sequence(WmEmptySeq, "ShowWindow(SW_FORCEMINIMIZE) child with invisible parent", TRUE);
|
||||||
|
todo_wine {
|
||||||
|
ok(!(GetWindowLongA(hchild, GWL_STYLE) & WS_VISIBLE), "WS_VISIBLE should be not set\n");
|
||||||
|
}
|
||||||
|
ok(!IsWindowVisible(hchild), "IsWindowVisible() should return FALSE\n");
|
||||||
|
|
||||||
|
DestroyWindow(hchild);
|
||||||
|
hchild = CreateWindowExA(0, "TestWindowClass", "Test child", WS_CHILD,
|
||||||
|
0, 0, 10, 10, hparent, 0, 0, NULL);
|
||||||
|
flush_sequence();
|
||||||
|
|
||||||
|
ShowWindow( hchild, SW_SHOWNA );
|
||||||
|
ok_sequence(WmShowChildInvisibleParentSeq_5, "ShowWindow(SW_SHOWNA) child with invisible parent", FALSE);
|
||||||
|
ok(GetWindowLongA(hchild, GWL_STYLE) & WS_VISIBLE, "WS_VISIBLE should be set\n");
|
||||||
|
ok(!IsWindowVisible(hchild), "IsWindowVisible() should return FALSE\n");
|
||||||
|
|
||||||
|
/* repeat */
|
||||||
|
flush_events();
|
||||||
|
ShowWindow( hchild, SW_SHOWNA );
|
||||||
|
ok_sequence(WmShowChildInvisibleParentSeq_5, "ShowWindow(SW_SHOWNA) child with invisible parent", FALSE);
|
||||||
|
|
||||||
|
DestroyWindow(hchild);
|
||||||
|
hchild = CreateWindowExA(0, "TestWindowClass", "Test child", WS_CHILD,
|
||||||
|
0, 0, 10, 10, hparent, 0, 0, NULL);
|
||||||
|
flush_sequence();
|
||||||
|
|
||||||
|
ShowWindow( hchild, SW_SHOW );
|
||||||
|
ok_sequence(WmShowChildInvisibleParentSeq_5, "ShowWindow(SW_SHOW) child with invisible parent", FALSE);
|
||||||
|
ok(GetWindowLongA(hchild, GWL_STYLE) & WS_VISIBLE, "WS_VISIBLE should be set\n");
|
||||||
|
ok(!IsWindowVisible(hchild), "IsWindowVisible() should return FALSE\n");
|
||||||
|
|
||||||
|
/* repeat */
|
||||||
|
flush_events();
|
||||||
|
ShowWindow( hchild, SW_SHOW );
|
||||||
|
ok_sequence(WmEmptySeq, "ShowWindow(SW_SHOW) child with invisible parent", FALSE);
|
||||||
|
|
||||||
|
ShowWindow( hchild, SW_HIDE );
|
||||||
|
ok_sequence(WmHideChildInvisibleParentSeq, "ShowWindow:hide child with invisible parent", FALSE);
|
||||||
|
ok(!(GetWindowLongA(hchild, GWL_STYLE) & WS_VISIBLE), "WS_VISIBLE should be not set\n");
|
||||||
|
ok(!IsWindowVisible(hchild), "IsWindowVisible() should return FALSE\n");
|
||||||
|
|
||||||
|
SetWindowPos(hchild, 0,0,0,0,0, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOZORDER);
|
||||||
|
ok_sequence(WmShowChildInvisibleParentSeq_6, "SetWindowPos:show child with invisible parent", FALSE);
|
||||||
|
ok(GetWindowLongA(hchild, GWL_STYLE) & WS_VISIBLE, "WS_VISIBLE should be set\n");
|
||||||
|
ok(!IsWindowVisible(hchild), "IsWindowVisible() should return FALSE\n");
|
||||||
|
|
||||||
|
SetWindowPos(hchild, 0,0,0,0,0, SWP_HIDEWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOZORDER);
|
||||||
|
ok_sequence(WmHideChildInvisibleParentSeq_2, "SetWindowPos:hide child with invisible parent", FALSE);
|
||||||
|
ok(!(GetWindowLongA(hchild, GWL_STYLE) & WS_VISIBLE), "WS_VISIBLE should not be set\n");
|
||||||
|
ok(!IsWindowVisible(hchild), "IsWindowVisible() should return FALSE\n");
|
||||||
|
|
||||||
|
SetWindowPos(hchild, 0,0,0,0,0, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOZORDER);
|
||||||
|
flush_sequence();
|
||||||
|
DestroyWindow(hchild);
|
||||||
|
ok_sequence(WmDestroyInvisibleChildSeq, "DestroyInvisibleChildSeq", FALSE);
|
||||||
|
|
||||||
|
DestroyWindow(hparent);
|
||||||
|
flush_sequence();
|
||||||
|
}
|
||||||
|
|
||||||
/****************** button message test *************************/
|
/****************** button message test *************************/
|
||||||
static const struct message WmSetFocusButtonSeq[] =
|
static const struct message WmSetFocusButtonSeq[] =
|
||||||
{
|
{
|
||||||
|
@ -7269,6 +7462,7 @@ START_TEST(msg)
|
||||||
test_PeekMessage();
|
test_PeekMessage();
|
||||||
test_scrollwindowex();
|
test_scrollwindowex();
|
||||||
test_messages();
|
test_messages();
|
||||||
|
invisible_parent_tests();
|
||||||
test_mdi_messages();
|
test_mdi_messages();
|
||||||
test_button_messages();
|
test_button_messages();
|
||||||
test_paint_messages();
|
test_paint_messages();
|
||||||
|
|
Loading…
Reference in New Issue