From: Akihiro Sagawa sagawa.aki@gmail.com
Please take a look the test above the FIXME comment. The test shows, even if MCI_DGV_OPEN_PARENT is specified, video window is shown. In other words, it doesn't imply the window is a child window.
Signed-off-by: Akihiro Sagawa sagawa.aki@gmail.com --- dlls/winmm/tests/mci.c | 139 +++++++++++++++++++++++++++++++---------- 1 file changed, 106 insertions(+), 33 deletions(-)
diff --git a/dlls/winmm/tests/mci.c b/dlls/winmm/tests/mci.c index 24d4e6b4e15..05492a770be 100644 --- a/dlls/winmm/tests/mci.c +++ b/dlls/winmm/tests/mci.c @@ -1492,41 +1492,114 @@ static void test_video_window(void) MCI_PARMS_UNION parm; MCIERROR err; MCIDEVICEID wDeviceID; - HWND video_window; + struct { + DWORD open_flags; + DWORD style; + DWORD expected_style; + } testcase[] = { + { 0, + 0, + (WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS) & ~WS_MAXIMIZEBOX }, + { MCI_DGV_OPEN_PARENT, + 0, + (WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS) & ~WS_MAXIMIZEBOX }, + { MCI_DGV_OPEN_WS, + 0, + WS_BORDER | WS_CLIPSIBLINGS | WS_BORDER | WS_DLGFRAME }, + { MCI_DGV_OPEN_WS, + WS_POPUPWINDOW, + WS_POPUPWINDOW | WS_CLIPSIBLINGS }, + { MCI_DGV_OPEN_PARENT | MCI_DGV_OPEN_WS, + WS_OVERLAPPEDWINDOW, + WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS }, + { MCI_DGV_OPEN_PARENT | MCI_DGV_OPEN_WS, + WS_CHILDWINDOW, + WS_CHILD }, + }; + unsigned int i; BOOL ret;
- parm.dgv_open.lpstrDeviceType = (WCHAR *)L"MPEGVideo"; - parm.dgv_open.lpstrElementName = (WCHAR *)filename; - err = mciSendCommandW(0, MCI_OPEN, - MCI_OPEN_ELEMENT | MCI_OPEN_TYPE, - (DWORD_PTR)&parm); - ok(!err,"mciCommand open test.mpg type MPEGVideo returned %s\n", dbg_mcierr(err)); - wDeviceID = parm.dgv_open.wDeviceID; - - err = mciSendCommandW(wDeviceID, MCI_PLAY, 0, (DWORD_PTR)&parm); - ok(!err,"mciCommand play returned %s\n", dbg_mcierr(err)); - - video_window = NULL; - EnumWindows(my_visible_window_proc, (LPARAM)&video_window); - ok(video_window != NULL, "video window should be shown\n"); - - err = mciSendCommandW(wDeviceID, MCI_STOP, 0, (DWORD_PTR)&parm); - ok(!err,"mciCommand play returned %s\n", dbg_mcierr(err)); - - ok(IsWindowVisible(video_window), "video window should be visible\n"); - - err = mciSendCommandW(wDeviceID, MCI_PLAY, 0, (DWORD_PTR)&parm); - ok(!err,"mciCommand play returned %s\n", dbg_mcierr(err)); - - ok(IsWindowVisible(video_window), "video window should be visible\n"); - - err = mciSendCommandW(wDeviceID, MCI_SEEK, MCI_SEEK_TO_START, (DWORD_PTR)&parm); - ok(!err,"mciCommand seek returned %s\n", dbg_mcierr(err)); - - ok(IsWindowVisible(video_window), "video window should be visible\n"); - - err = mciSendCommandW(wDeviceID, MCI_CLOSE, 0, 0); - ok(!err,"mciCommand close returned %s\n", dbg_mcierr(err)); + for (i = 0; i < ARRAY_SIZE(testcase); ++i) + { + HWND parent_window = NULL, hwnd, video_window; + DWORD style, expected; + + winetest_push_context("%u", i); + + if (testcase[i].open_flags & MCI_DGV_OPEN_PARENT) + parent_window = CreateWindowExA(0, "static", "parent", + WS_POPUPWINDOW,0,0,100,100, + 0, 0, 0, NULL); + + parm.dgv_open.lpstrDeviceType = (WCHAR *)L"MPEGVideo"; + parm.dgv_open.lpstrElementName = (WCHAR *)filename; + parm.dgv_open.hWndParent = parent_window; + parm.dgv_open.dwStyle = testcase[i].style; + err = mciSendCommandW(0, MCI_OPEN, + MCI_OPEN_ELEMENT | MCI_OPEN_TYPE | testcase[i].open_flags, + (DWORD_PTR)&parm); + ok(!err,"mciCommand open test.mpg type MPEGVideo returned %s\n", dbg_mcierr(err)); + wDeviceID = parm.dgv_open.wDeviceID; + + err = mciSendCommandW(wDeviceID, MCI_PLAY, 0, (DWORD_PTR)&parm); + ok(!err,"mciCommand play returned %s\n", dbg_mcierr(err)); + + if (!(testcase[i].style & WS_CHILD)) + { + video_window = NULL; + EnumWindows(my_visible_window_proc, (LPARAM)&video_window); + todo_wine_if(testcase[i].open_flags & MCI_DGV_OPEN_PARENT) + ok(video_window != NULL, "video window should be shown\n"); + + /* FIXME: Remove once Wine is fixed */ + if (!video_window) goto next; + + hwnd = GetWindow(video_window, GW_OWNER); + todo_wine_if(testcase[i].open_flags & MCI_DGV_OPEN_PARENT) + ok(hwnd == parent_window, "got owner %p, expected %p\n", hwnd, parent_window); + } + else + { + ok(!IsWindowVisible(parent_window), "parent window should be hidden at this point\n"); + ShowWindow(parent_window, SW_SHOWNA); + + hwnd = GetWindow(parent_window, GW_CHILD); + ok(hwnd != NULL, "child video window should be shown\n"); + video_window = hwnd; + } + + expected = testcase[i].expected_style | WS_VISIBLE; + style = GetWindowLongW(video_window, GWL_STYLE); + todo_wine_if(i != 3) + ok(style == expected, "hwnd %p: got style %#lx, expected %#lx\n", video_window, style, expected); + + err = mciSendCommandW(wDeviceID, MCI_STOP, 0, (DWORD_PTR)&parm); + ok(!err,"mciCommand play returned %s\n", dbg_mcierr(err)); + + ok(IsWindowVisible(video_window), "video window should be visible\n"); + + err = mciSendCommandW(wDeviceID, MCI_PLAY, 0, (DWORD_PTR)&parm); + ok(!err,"mciCommand play returned %s\n", dbg_mcierr(err)); + + ok(IsWindowVisible(video_window), "video window should be visible\n"); + + err = mciSendCommandW(wDeviceID, MCI_SEEK, MCI_SEEK_TO_START, (DWORD_PTR)&parm); + ok(!err,"mciCommand seek returned %s\n", dbg_mcierr(err)); + + ok(IsWindowVisible(video_window), "video window should be visible\n"); + + next: + err = mciSendCommandW(wDeviceID, MCI_CLOSE, 0, 0); + ok(!err,"mciCommand close returned %s\n", dbg_mcierr(err)); + + if (parent_window) + { + ret = DestroyWindow(parent_window); + ok(ret, "Failed to destroy parent window\n"); + } + + winetest_pop_context(); + }
ret = DeleteFileW(filename); ok(ret, "Failed to delete %s, error %lu.\n", debugstr_w(filename), GetLastError());