Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/strmbase/window.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-)
diff --git a/dlls/strmbase/window.c b/dlls/strmbase/window.c index b7c0bae47b2..4ecc81c24e5 100644 --- a/dlls/strmbase/window.c +++ b/dlls/strmbase/window.c @@ -297,15 +297,24 @@ HRESULT WINAPI BaseControlWindowImpl_put_Caption(IVideoWindow *iface, BSTR strCa return S_OK; }
-HRESULT WINAPI BaseControlWindowImpl_get_Caption(IVideoWindow *iface, BSTR *strCaption) +HRESULT WINAPI BaseControlWindowImpl_get_Caption(IVideoWindow *iface, BSTR *caption) { - BaseControlWindow* This = impl_from_IVideoWindow(iface); + BaseControlWindow *window = impl_from_IVideoWindow(iface); + WCHAR *str; + int len;
- TRACE("(%p/%p)->(%p)\n", This, iface, strCaption); + TRACE("window %p, caption %p.\n", window, caption);
- GetWindowTextW(This->baseWindow.hWnd, (LPWSTR)strCaption, 100); + *caption = NULL;
- return S_OK; + len = GetWindowTextLengthW(window->baseWindow.hWnd) + 1; + if (!(str = heap_alloc(len * sizeof(WCHAR)))) + return E_OUTOFMEMORY; + + GetWindowTextW(window->baseWindow.hWnd, str, len); + *caption = SysAllocString(str); + heap_free(str); + return *caption ? S_OK : E_OUTOFMEMORY; }
HRESULT WINAPI BaseControlWindowImpl_put_WindowStyle(IVideoWindow *iface, LONG WindowStyle)
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/quartz/tests/videorenderer.c | 735 ++++++++++++++++++++++++++++++ 1 file changed, 735 insertions(+)
diff --git a/dlls/quartz/tests/videorenderer.c b/dlls/quartz/tests/videorenderer.c index c2eb16f0cc0..cd8fa4d511d 100644 --- a/dlls/quartz/tests/videorenderer.c +++ b/dlls/quartz/tests/videorenderer.c @@ -1346,6 +1346,740 @@ static void test_overlay(void) ok(!ref, "Got outstanding refcount %d.\n", ref); }
+/* try to make sure pending X events have been processed before continuing */ +static void flush_events(void) +{ + int diff = 200; + DWORD time; + MSG msg; + + time = GetTickCount() + diff; + while (diff > 0) + { + if (MsgWaitForMultipleObjects(0, NULL, FALSE, 100, QS_ALLINPUT) == WAIT_TIMEOUT) + break; + while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE)) + DispatchMessageA(&msg); + diff = time - GetTickCount(); + } +} + +static LRESULT CALLBACK window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) +{ + if (winetest_debug > 1) + trace("hwnd %p, msg %#x, wparam %#lx, lparam %#lx.\n", hwnd, msg, wparam, lparam); + + if (wparam == 0xdeadbeef) + return 0; + + return DefWindowProcA(hwnd, msg, wparam, lparam); +} + +static void test_video_window_caption(IVideoWindow *window, HWND hwnd) +{ + WCHAR text[50]; + BSTR caption; + HRESULT hr; + + hr = IVideoWindow_get_Caption(window, &caption); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(!wcscmp(caption, L"ActiveMovie Window"), "Got caption %s.\n", wine_dbgstr_w(caption)); + SysFreeString(caption); + + GetWindowTextW(hwnd, text, ARRAY_SIZE(text)); + ok(!wcscmp(text, L"ActiveMovie Window"), "Got caption %s.\n", wine_dbgstr_w(text)); + + caption = SysAllocString(L"foo"); + hr = IVideoWindow_put_Caption(window, caption); + ok(hr == S_OK, "Got hr %#x.\n", hr); + SysFreeString(caption); + + hr = IVideoWindow_get_Caption(window, &caption); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(!wcscmp(caption, L"foo"), "Got caption %s.\n", wine_dbgstr_w(caption)); + SysFreeString(caption); + + GetWindowTextW(hwnd, text, ARRAY_SIZE(text)); + ok(!wcscmp(text, L"foo"), "Got caption %s.\n", wine_dbgstr_w(text)); +} + +static void test_video_window_style(IVideoWindow *window, HWND hwnd, HWND our_hwnd) +{ + HRESULT hr; + LONG style; + + hr = IVideoWindow_get_WindowStyle(window, &style); + ok(hr == S_OK, "Got hr %#x.\n", hr); + todo_wine ok(style == (WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_OVERLAPPEDWINDOW), + "Got style %#x.\n", style); + + style = GetWindowLongA(hwnd, GWL_STYLE); + todo_wine ok(style == (WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_OVERLAPPEDWINDOW), + "Got style %#x.\n", style); + + hr = IVideoWindow_put_WindowStyle(window, style | WS_DISABLED); + ok(hr == E_INVALIDARG, "Got hr %#x.\n", hr); + hr = IVideoWindow_put_WindowStyle(window, style | WS_HSCROLL); + ok(hr == E_INVALIDARG, "Got hr %#x.\n", hr); + hr = IVideoWindow_put_WindowStyle(window, style | WS_VSCROLL); + ok(hr == E_INVALIDARG, "Got hr %#x.\n", hr); + hr = IVideoWindow_put_WindowStyle(window, style | WS_MAXIMIZE); + ok(hr == E_INVALIDARG, "Got hr %#x.\n", hr); + hr = IVideoWindow_put_WindowStyle(window, style | WS_MINIMIZE); + ok(hr == E_INVALIDARG, "Got hr %#x.\n", hr); + + hr = IVideoWindow_put_WindowStyle(window, style & ~WS_CLIPCHILDREN); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IVideoWindow_get_WindowStyle(window, &style); + ok(hr == S_OK, "Got hr %#x.\n", hr); + todo_wine ok(style == (WS_CLIPSIBLINGS | WS_OVERLAPPEDWINDOW), "Got style %#x.\n", style); + + style = GetWindowLongA(hwnd, GWL_STYLE); + todo_wine ok(style == (WS_CLIPSIBLINGS | WS_OVERLAPPEDWINDOW), "Got style %#x.\n", style); + + todo_wine ok(GetActiveWindow() == our_hwnd, "Got active window %p.\n", GetActiveWindow()); + + hr = IVideoWindow_get_WindowStyleEx(window, &style); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(style == WS_EX_WINDOWEDGE, "Got style %#x.\n", style); + + style = GetWindowLongA(hwnd, GWL_EXSTYLE); + ok(style == WS_EX_WINDOWEDGE, "Got style %#x.\n", style); + + hr = IVideoWindow_put_WindowStyleEx(window, style | WS_EX_TRANSPARENT); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IVideoWindow_get_WindowStyleEx(window, &style); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(style == (WS_EX_WINDOWEDGE | WS_EX_TRANSPARENT), "Got style %#x.\n", style); + + style = GetWindowLongA(hwnd, GWL_EXSTYLE); + ok(style == (WS_EX_WINDOWEDGE | WS_EX_TRANSPARENT), "Got style %#x.\n", style); +} + +static BOOL CALLBACK top_window_cb(HWND hwnd, LPARAM ctx) +{ + DWORD pid; + GetWindowThreadProcessId(hwnd, &pid); + if (pid == GetCurrentProcessId() && (GetWindowLongW(hwnd, GWL_STYLE) & WS_VISIBLE)) + { + *(HWND *)ctx = hwnd; + return FALSE; + } + return TRUE; +} + +static HWND get_top_window(void) +{ + HWND hwnd; + EnumWindows(top_window_cb, (LPARAM)&hwnd); + return hwnd; +} + +static void test_video_window_state(IVideoWindow *window, HWND hwnd, HWND our_hwnd) +{ + HRESULT hr; + LONG state; + HWND top; + + SetWindowPos(our_hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); + + hr = IVideoWindow_get_WindowState(window, &state); + ok(hr == S_OK, "Got hr %#x.\n", hr); + todo_wine ok(state == SW_HIDE, "Got state %d.\n", state); + + hr = IVideoWindow_get_Visible(window, &state); + ok(state == OAFALSE, "Got state %d.\n", state); + + ok(!IsWindowVisible(hwnd), "Window should not be visible.\n"); + ok(!IsIconic(hwnd), "Window should not be minimized.\n"); + ok(!IsZoomed(hwnd), "Window should not be maximized.\n"); + + hr = IVideoWindow_put_WindowState(window, SW_SHOWNA); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IVideoWindow_get_WindowState(window, &state); + ok(hr == S_OK, "Got hr %#x.\n", hr); + todo_wine ok(state == SW_SHOW, "Got state %d.\n", state); + + hr = IVideoWindow_get_Visible(window, &state); + todo_wine ok(state == OATRUE, "Got state %d.\n", state); + + ok(IsWindowVisible(hwnd), "Window should be visible.\n"); + ok(!IsIconic(hwnd), "Window should not be minimized.\n"); + ok(!IsZoomed(hwnd), "Window should not be maximized.\n"); + ok(GetActiveWindow() == our_hwnd, "Got active window %p.\n", GetActiveWindow()); + top = get_top_window(); + ok(top == hwnd, "Got top window %p.\n", top); + + hr = IVideoWindow_put_WindowState(window, SW_MINIMIZE); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IVideoWindow_get_WindowState(window, &state); + ok(hr == S_OK, "Got hr %#x.\n", hr); + todo_wine ok(state == SW_MINIMIZE, "Got state %d.\n", state); + + hr = IVideoWindow_get_Visible(window, &state); + todo_wine ok(state == OATRUE, "Got state %d.\n", state); + + ok(IsWindowVisible(hwnd), "Window should be visible.\n"); + ok(IsIconic(hwnd), "Window should be minimized.\n"); + ok(!IsZoomed(hwnd), "Window should not be maximized.\n"); + ok(GetActiveWindow() == our_hwnd, "Got active window %p.\n", GetActiveWindow()); + + hr = IVideoWindow_put_WindowState(window, SW_RESTORE); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IVideoWindow_get_WindowState(window, &state); + ok(hr == S_OK, "Got hr %#x.\n", hr); + todo_wine ok(state == SW_SHOW, "Got state %d.\n", state); + + hr = IVideoWindow_get_Visible(window, &state); + todo_wine ok(state == OATRUE, "Got state %d.\n", state); + + ok(IsWindowVisible(hwnd), "Window should be visible.\n"); + ok(!IsIconic(hwnd), "Window should not be minimized.\n"); + ok(!IsZoomed(hwnd), "Window should not be maximized.\n"); + ok(GetActiveWindow() == hwnd, "Got active window %p.\n", GetActiveWindow()); + + hr = IVideoWindow_put_WindowState(window, SW_MAXIMIZE); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IVideoWindow_get_WindowState(window, &state); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(state == SW_MAXIMIZE, "Got state %d.\n", state); + + hr = IVideoWindow_get_Visible(window, &state); + todo_wine ok(state == OATRUE, "Got state %d.\n", state); + + ok(IsWindowVisible(hwnd), "Window should be visible.\n"); + ok(!IsIconic(hwnd), "Window should be minimized.\n"); + ok(IsZoomed(hwnd), "Window should not be maximized.\n"); + ok(GetActiveWindow() == hwnd, "Got active window %p.\n", GetActiveWindow()); + + hr = IVideoWindow_put_WindowState(window, SW_RESTORE); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IVideoWindow_put_WindowState(window, SW_HIDE); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IVideoWindow_get_WindowState(window, &state); + ok(hr == S_OK, "Got hr %#x.\n", hr); + todo_wine ok(state == SW_HIDE, "Got state %d.\n", state); + + hr = IVideoWindow_get_Visible(window, &state); + ok(state == OAFALSE, "Got state %d.\n", state); + + ok(!IsWindowVisible(hwnd), "Window should not be visible.\n"); + ok(!IsIconic(hwnd), "Window should not be minimized.\n"); + ok(!IsZoomed(hwnd), "Window should not be maximized.\n"); + ok(GetActiveWindow() == our_hwnd, "Got active window %p.\n", GetActiveWindow()); + + hr = IVideoWindow_put_Visible(window, OATRUE); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IVideoWindow_get_WindowState(window, &state); + ok(hr == S_OK, "Got hr %#x.\n", hr); + todo_wine ok(state == SW_SHOW, "Got state %d.\n", state); + + hr = IVideoWindow_get_Visible(window, &state); + todo_wine ok(state == OATRUE, "Got state %d.\n", state); + + ok(IsWindowVisible(hwnd), "Window should be visible.\n"); + ok(!IsIconic(hwnd), "Window should not be minimized.\n"); + ok(!IsZoomed(hwnd), "Window should not be maximized.\n"); + ok(GetActiveWindow() == hwnd, "Got active window %p.\n", GetActiveWindow()); + + hr = IVideoWindow_put_Visible(window, OAFALSE); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IVideoWindow_get_WindowState(window, &state); + ok(hr == S_OK, "Got hr %#x.\n", hr); + todo_wine ok(state == SW_HIDE, "Got state %d.\n", state); + + hr = IVideoWindow_get_Visible(window, &state); + ok(state == OAFALSE, "Got state %d.\n", state); + + ok(!IsWindowVisible(hwnd), "Window should not be visible.\n"); + ok(!IsIconic(hwnd), "Window should not be minimized.\n"); + ok(!IsZoomed(hwnd), "Window should not be maximized.\n"); + ok(GetActiveWindow() == our_hwnd, "Got active window %p.\n", GetActiveWindow()); + + hr = IVideoWindow_put_WindowState(window, SW_SHOWNA); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + SetWindowPos(our_hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); + hr = IVideoWindow_SetWindowForeground(window, OATRUE); + todo_wine + { + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(GetActiveWindow() == hwnd, "Got active window %p.\n", GetActiveWindow()); + ok(GetFocus() == hwnd, "Got focus window %p.\n", GetFocus()); + ok(GetForegroundWindow() == hwnd, "Got foreground window %p.\n", GetForegroundWindow()); + top = get_top_window(); + ok(top == hwnd, "Got top window %p.\n", top); + } + + hr = IVideoWindow_SetWindowForeground(window, OAFALSE); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(GetActiveWindow() == hwnd, "Got active window %p.\n", GetActiveWindow()); + ok(GetFocus() == hwnd, "Got focus window %p.\n", GetFocus()); + ok(GetForegroundWindow() == hwnd, "Got foreground window %p.\n", GetForegroundWindow()); + top = get_top_window(); + ok(top == hwnd, "Got top window %p.\n", top); + + SetWindowPos(our_hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); + hr = IVideoWindow_SetWindowForeground(window, OAFALSE); + ok(hr == S_OK, "Got hr %#x.\n", hr); + todo_wine ok(GetActiveWindow() == our_hwnd, "Got active window %p.\n", GetActiveWindow()); + todo_wine ok(GetFocus() == our_hwnd, "Got focus window %p.\n", GetFocus()); + todo_wine ok(GetForegroundWindow() == our_hwnd, "Got foreground window %p.\n", GetForegroundWindow()); + top = get_top_window(); + ok(top == hwnd, "Got top window %p.\n", top); +} + +static void test_video_window_position(IVideoWindow *window, HWND hwnd, HWND our_hwnd) +{ + LONG left, width, top, height, expect_width, expect_height; + RECT rect = {0, 0, 640, 480}; + HWND top_hwnd; + HRESULT hr; + + SetWindowPos(our_hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); + + AdjustWindowRect(&rect, GetWindowLongA(hwnd, GWL_STYLE), FALSE); + expect_width = rect.right - rect.left; + expect_height = rect.bottom - rect.top; + + hr = IVideoWindow_put_Left(window, 0); + ok(hr == S_OK, "Got hr %#x.\n", hr); + hr = IVideoWindow_put_Top(window, 0); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IVideoWindow_get_Left(window, &left); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(left == 0, "Got left %d.\n", left); + hr = IVideoWindow_get_Top(window, &top); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(top == 0, "Got top %d.\n", top); + hr = IVideoWindow_get_Width(window, &width); + ok(hr == S_OK, "Got hr %#x.\n", hr); + todo_wine ok(width == expect_width, "Got width %d.\n", width); + hr = IVideoWindow_get_Height(window, &height); + ok(hr == S_OK, "Got hr %#x.\n", hr); + todo_wine ok(height == expect_height, "Got height %d.\n", height); + hr = IVideoWindow_GetWindowPosition(window, &left, &top, &width, &height); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(left == 0, "Got left %d.\n", left); + ok(top == 0, "Got top %d.\n", top); + todo_wine ok(width == expect_width, "Got width %d.\n", width); + todo_wine ok(height == expect_height, "Got height %d.\n", height); + GetWindowRect(hwnd, &rect); + ok(rect.left == 0, "Got window left %d.\n", rect.left); + ok(rect.top == 0, "Got window top %d.\n", rect.top); + todo_wine ok(rect.right == expect_width, "Got window right %d.\n", rect.right); + todo_wine ok(rect.bottom == expect_height, "Got window bottom %d.\n", rect.bottom); + + hr = IVideoWindow_put_Left(window, 10); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IVideoWindow_get_Left(window, &left); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(left == 10, "Got left %d.\n", left); + hr = IVideoWindow_get_Top(window, &top); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(top == 0, "Got top %d.\n", top); + hr = IVideoWindow_get_Width(window, &width); + ok(hr == S_OK, "Got hr %#x.\n", hr); + todo_wine ok(width == expect_width, "Got width %d.\n", width); + hr = IVideoWindow_get_Height(window, &height); + ok(hr == S_OK, "Got hr %#x.\n", hr); + todo_wine ok(height == expect_height, "Got height %d.\n", height); + hr = IVideoWindow_GetWindowPosition(window, &left, &top, &width, &height); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(left == 10, "Got left %d.\n", left); + ok(top == 0, "Got top %d.\n", top); + todo_wine ok(width == expect_width, "Got width %d.\n", width); + todo_wine ok(height == expect_height, "Got height %d.\n", height); + GetWindowRect(hwnd, &rect); + ok(rect.left == 10, "Got window left %d.\n", rect.left); + ok(rect.top == 0, "Got window top %d.\n", rect.top); + todo_wine ok(rect.right == 10 + expect_width, "Got window right %d.\n", rect.right); + todo_wine ok(rect.bottom == expect_height, "Got window bottom %d.\n", rect.bottom); + + hr = IVideoWindow_put_Height(window, 200); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IVideoWindow_get_Left(window, &left); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(left == 10, "Got left %d.\n", left); + hr = IVideoWindow_get_Top(window, &top); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(top == 0, "Got top %d.\n", top); + hr = IVideoWindow_get_Width(window, &width); + ok(hr == S_OK, "Got hr %#x.\n", hr); + todo_wine ok(width == expect_width, "Got width %d.\n", width); + hr = IVideoWindow_get_Height(window, &height); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(height == 200, "Got height %d.\n", height); + hr = IVideoWindow_GetWindowPosition(window, &left, &top, &width, &height); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(left == 10, "Got left %d.\n", left); + ok(top == 0, "Got top %d.\n", top); + todo_wine ok(width == expect_width, "Got width %d.\n", width); + ok(height == 200, "Got height %d.\n", height); + GetWindowRect(hwnd, &rect); + ok(rect.left == 10, "Got window left %d.\n", rect.left); + ok(rect.top == 0, "Got window top %d.\n", rect.top); + todo_wine ok(rect.right == 10 + expect_width, "Got window right %d.\n", rect.right); + ok(rect.bottom == 200, "Got window bottom %d.\n", rect.bottom); + + hr = IVideoWindow_SetWindowPosition(window, 100, 200, 300, 400); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IVideoWindow_get_Left(window, &left); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(left == 100, "Got left %d.\n", left); + hr = IVideoWindow_get_Top(window, &top); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(top == 200, "Got top %d.\n", top); + hr = IVideoWindow_get_Width(window, &width); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(width == 300, "Got width %d.\n", width); + hr = IVideoWindow_get_Height(window, &height); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(height == 400, "Got height %d.\n", height); + hr = IVideoWindow_GetWindowPosition(window, &left, &top, &width, &height); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(left == 100, "Got left %d.\n", left); + ok(top == 200, "Got top %d.\n", top); + ok(width == 300, "Got width %d.\n", width); + ok(height == 400, "Got height %d.\n", height); + GetWindowRect(hwnd, &rect); + ok(rect.left == 100, "Got window left %d.\n", rect.left); + ok(rect.top == 200, "Got window top %d.\n", rect.top); + ok(rect.right == 400, "Got window right %d.\n", rect.right); + ok(rect.bottom == 600, "Got window bottom %d.\n", rect.bottom); + + todo_wine ok(GetActiveWindow() == our_hwnd, "Got active window %p.\n", GetActiveWindow()); + top_hwnd = get_top_window(); + todo_wine ok(top_hwnd == our_hwnd, "Got top window %p.\n", top_hwnd); +} + +static void test_video_window_owner(IVideoWindow *window, HWND hwnd, HWND our_hwnd) +{ + HWND parent, top_hwnd; + LONG style, state; + OAHWND oahwnd; + HRESULT hr; + + SetWindowPos(our_hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); + + hr = IVideoWindow_get_Owner(window, &oahwnd); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(!oahwnd, "Got owner %#lx.\n", oahwnd); + + parent = GetAncestor(hwnd, GA_PARENT); + ok(parent == GetDesktopWindow(), "Got parent %p.\n", parent); + style = GetWindowLongA(hwnd, GWL_STYLE); + ok(!(style & WS_CHILD), "Got style %#x.\n", style); + + hr = IVideoWindow_put_Owner(window, (OAHWND)our_hwnd); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IVideoWindow_get_Owner(window, &oahwnd); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(oahwnd == (OAHWND)our_hwnd, "Got owner %#lx.\n", oahwnd); + + parent = GetAncestor(hwnd, GA_PARENT); + ok(parent == our_hwnd, "Got parent %p.\n", parent); + style = GetWindowLongA(hwnd, GWL_STYLE); + todo_wine ok((style & WS_CHILD), "Got style %#x.\n", style); + + todo_wine ok(GetActiveWindow() == our_hwnd, "Got active window %p.\n", GetActiveWindow()); + top_hwnd = get_top_window(); + ok(top_hwnd == our_hwnd, "Got top window %p.\n", top_hwnd); + + ShowWindow(our_hwnd, SW_HIDE); + + hr = IVideoWindow_put_Visible(window, OATRUE); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IVideoWindow_get_Visible(window, &state); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(state == OAFALSE, "Got state %d.\n", state); + + hr = IVideoWindow_put_Owner(window, 0); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IVideoWindow_get_Owner(window, &oahwnd); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(!oahwnd, "Got owner %#lx.\n", oahwnd); + + parent = GetAncestor(hwnd, GA_PARENT); + ok(parent == GetDesktopWindow(), "Got parent %p.\n", parent); + style = GetWindowLongA(hwnd, GWL_STYLE); + ok(!(style & WS_CHILD), "Got style %#x.\n", style); + + ok(GetActiveWindow() == hwnd, "Got active window %p.\n", GetActiveWindow()); + top_hwnd = get_top_window(); + ok(top_hwnd == hwnd, "Got top window %p.\n", top_hwnd); + + hr = IVideoWindow_get_Visible(window, &state); + ok(hr == S_OK, "Got hr %#x.\n", hr); + todo_wine ok(state == OATRUE, "Got state %d.\n", state); +} + +static void test_video_window_messages(IVideoWindow *window, HWND hwnd, HWND our_hwnd) +{ + unsigned int i; + OAHWND oahwnd; + HRESULT hr; + BOOL ret; + MSG msg; + + static UINT drain_tests[] = + { + WM_MOUSEACTIVATE, + WM_NCLBUTTONDOWN, + WM_NCLBUTTONUP, + WM_NCLBUTTONDBLCLK, + WM_NCRBUTTONDOWN, + WM_NCRBUTTONUP, + WM_NCRBUTTONDBLCLK, + WM_NCMBUTTONDOWN, + WM_NCMBUTTONUP, + WM_NCMBUTTONDBLCLK, + WM_KEYDOWN, + WM_KEYUP, + WM_MOUSEMOVE, + WM_LBUTTONDOWN, + WM_LBUTTONUP, + WM_LBUTTONDBLCLK, + WM_RBUTTONDOWN, + WM_RBUTTONUP, + WM_RBUTTONDBLCLK, + WM_MBUTTONDOWN, + WM_MBUTTONUP, + WM_MBUTTONDBLCLK, + }; + + flush_events(); + + hr = IVideoWindow_get_MessageDrain(window, &oahwnd); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(!oahwnd, "Got window %#lx.\n", oahwnd); + + hr = IVideoWindow_put_MessageDrain(window, (OAHWND)our_hwnd); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IVideoWindow_get_MessageDrain(window, &oahwnd); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(oahwnd == (OAHWND)our_hwnd, "Got window %#lx.\n", oahwnd); + + for (i = 0; i < ARRAY_SIZE(drain_tests); ++i) + { + SendMessageA(hwnd, drain_tests[i], 0xdeadbeef, 0); + ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE); + ok(ret, "Expected a message.\n"); + ok(msg.hwnd == our_hwnd, "Got hwnd %p.\n", msg.hwnd); + ok(msg.message == drain_tests[i], "Got message %#x.\n", msg.message); + ok(msg.wParam == 0xdeadbeef, "Got wparam %#lx.\n", msg.wParam); + ok(!msg.lParam, "Got lparam %#lx.\n", msg.lParam); + DispatchMessageA(&msg); + + ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE); + ok(!ret, "Got unexpected message %#x.\n", msg.message); + } + + hr = IVideoWindow_put_MessageDrain(window, 0); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IVideoWindow_put_Owner(window, (OAHWND)our_hwnd); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + flush_events(); + + hr = IVideoWindow_NotifyOwnerMessage(window, (OAHWND)our_hwnd, WM_SYSCOLORCHANGE, 0, 0); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = GetQueueStatus(QS_SENDMESSAGE | QS_POSTMESSAGE); + todo_wine ok(!ret, "Got unexpected status %#x.\n", ret); + + hr = IVideoWindow_NotifyOwnerMessage(window, (OAHWND)our_hwnd, WM_SETCURSOR, + (WPARAM)hwnd, MAKELONG(HTCLIENT, WM_MOUSEMOVE)); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ret = GetQueueStatus(QS_SENDMESSAGE | QS_POSTMESSAGE); + todo_wine ok(!ret, "Got unexpected status %#x.\n", ret); + + hr = IVideoWindow_put_Owner(window, 0); + ok(hr == S_OK, "Got hr %#x.\n", hr); +} + +static void test_video_window_autoshow(IVideoWindow *window, IFilterGraph2 *graph, HWND hwnd) +{ + IMediaControl *control; + HRESULT hr; + LONG l; + + IFilterGraph2_QueryInterface(graph, &IID_IMediaControl, (void **)&control); + + hr = IVideoWindow_get_AutoShow(window, &l); + ok(hr == S_OK, "Got hr %#x.\n", hr); + todo_wine ok(l == OATRUE, "Got %d.\n", l); + + hr = IVideoWindow_put_Visible(window, OAFALSE); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IMediaControl_Pause(control); + ok(hr == S_FALSE, "Got hr %#x.\n", hr); + + hr = IVideoWindow_get_Visible(window, &l); + ok(hr == S_OK, "Got hr %#x.\n", hr); + todo_wine ok(l == OATRUE, "Got %d.\n", l); + + hr = IMediaControl_Stop(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IVideoWindow_get_Visible(window, &l); + ok(hr == S_OK, "Got hr %#x.\n", hr); + todo_wine ok(l == OATRUE, "Got %d.\n", l); + + hr = IVideoWindow_put_AutoShow(window, OAFALSE); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IVideoWindow_put_Visible(window, OAFALSE); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IMediaControl_Pause(control); + ok(hr == S_FALSE, "Got hr %#x.\n", hr); + + hr = IVideoWindow_get_Visible(window, &l); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(l == OAFALSE, "Got %d.\n", l); + + hr = IMediaControl_Stop(control); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + IMediaControl_Release(control); +} + +static void test_video_window(void) +{ + VIDEOINFOHEADER vih = + { + .bmiHeader.biSize = sizeof(BITMAPINFOHEADER), + .bmiHeader.biBitCount = 24, + .bmiHeader.biWidth = 640, + .bmiHeader.biHeight = 480, + .bmiHeader.biPlanes = 1, + .bmiHeader.biCompression = BI_RGB, + }; + AM_MEDIA_TYPE req_mt = + { + .majortype = MEDIATYPE_Video, + .subtype = MEDIASUBTYPE_RGB24, + .formattype = FORMAT_VideoInfo, + .cbFormat = sizeof(vih), + .pbFormat = (BYTE *)&vih, + }; + IFilterGraph2 *graph = create_graph(); + WNDCLASSA window_class = {0}; + struct testfilter source; + LONG width, height, l; + IVideoWindow *window; + IBaseFilter *filter; + HWND hwnd, our_hwnd; + IOverlay *overlay; + BSTR caption; + HRESULT hr; + DWORD tid; + ULONG ref; + IPin *pin; + RECT rect; + + window_class.lpszClassName = "wine_test_class"; + window_class.lpfnWndProc = window_proc; + RegisterClassA(&window_class); + our_hwnd = CreateWindowA("wine_test_class", "test window", WS_VISIBLE | WS_OVERLAPPEDWINDOW, + 100, 200, 300, 400, NULL, NULL, NULL, NULL); + flush_events(); + + filter = create_video_renderer(); + flush_events(); + + ok(GetActiveWindow() == our_hwnd, "Got active window %p.\n", GetActiveWindow()); + + IBaseFilter_FindPin(filter, L"In", &pin); + + hr = IPin_QueryInterface(pin, &IID_IOverlay, (void **)&overlay); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IOverlay_GetWindowHandle(overlay, &hwnd); + ok(hr == S_OK, "Got hr %#x.\n", hr); + if (winetest_debug > 1) trace("ours %p, theirs %p\n", our_hwnd, hwnd); + GetWindowRect(hwnd, &rect); + + tid = GetWindowThreadProcessId(hwnd, NULL); + ok(tid == GetCurrentThreadId(), "Expected tid %#x, got %#x.\n", GetCurrentThreadId(), tid); + + hr = IBaseFilter_QueryInterface(filter, &IID_IVideoWindow, (void **)&window); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + hr = IVideoWindow_get_Caption(window, &caption); + todo_wine ok(hr == VFW_E_NOT_CONNECTED, "Got hr %#x.\n", hr); + + hr = IVideoWindow_get_WindowStyle(window, &l); + todo_wine ok(hr == VFW_E_NOT_CONNECTED, "Got hr %#x.\n", hr); + + hr = IVideoWindow_get_AutoShow(window, &l); + todo_wine ok(hr == VFW_E_NOT_CONNECTED, "Got hr %#x.\n", hr); + + testfilter_init(&source); + IFilterGraph2_AddFilter(graph, &source.filter.IBaseFilter_iface, NULL); + IFilterGraph2_AddFilter(graph, filter, NULL); + hr = IFilterGraph2_ConnectDirect(graph, &source.source.pin.IPin_iface, pin, &req_mt); + ok(hr == S_OK, "Got hr %#x.\n", hr); + + ok(GetActiveWindow() == our_hwnd, "Got active window %p.\n", GetActiveWindow()); + + test_video_window_caption(window, hwnd); + test_video_window_style(window, hwnd, our_hwnd); + test_video_window_state(window, hwnd, our_hwnd); + test_video_window_position(window, hwnd, our_hwnd); + test_video_window_autoshow(window, graph, hwnd); + test_video_window_owner(window, hwnd, our_hwnd); + test_video_window_messages(window, hwnd, our_hwnd); + + hr = IVideoWindow_put_FullScreenMode(window, OATRUE); + todo_wine ok(hr == E_NOTIMPL, "Got hr %#x.\n", hr); + + hr = IVideoWindow_get_FullScreenMode(window, &l); + todo_wine ok(hr == E_NOTIMPL, "Got hr %#x.\n", hr); + + hr = IVideoWindow_GetMinIdealImageSize(window, &width, &height); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(width == 640, "Got width %d.\n", width); + ok(height == 480, "Got height %d.\n", height); + + hr = IVideoWindow_GetMaxIdealImageSize(window, &width, &height); + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(width == 640, "Got width %d.\n", width); + ok(height == 480, "Got height %d.\n", height); + + IFilterGraph2_Release(graph); + IVideoWindow_Release(window); + IOverlay_Release(overlay); + IPin_Release(pin); + ref = IBaseFilter_Release(filter); + ok(!ref, "Got outstanding refcount %d.\n", ref); + ref = IBaseFilter_Release(&source.filter.IBaseFilter_iface); + todo_wine ok(!ref, "Got outstanding refcount %d.\n", ref); + DestroyWindow(our_hwnd); +} + START_TEST(videorenderer) { CoInitialize(NULL); @@ -1360,6 +2094,7 @@ START_TEST(videorenderer) test_unconnected_filter_state(); test_connect_pin(); test_overlay(); + test_video_window();
CoUninitialize(); }
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=57604
Your paranoid android.
=== wvistau64_he (32 bit report) ===
quartz: videorenderer.c:1071: Test failed: Expected EC_COMPLETE. videorenderer.c:1076: Test failed: Got unexpected EC_COMPLETE.
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/quartz/tests/videorenderer.c | 18 +++++++++--------- dlls/strmbase/window.c | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/dlls/quartz/tests/videorenderer.c b/dlls/quartz/tests/videorenderer.c index cd8fa4d511d..ae467ed71aa 100644 --- a/dlls/quartz/tests/videorenderer.c +++ b/dlls/quartz/tests/videorenderer.c @@ -1609,17 +1609,17 @@ static void test_video_window_state(IVideoWindow *window, HWND hwnd, HWND our_hw hr = IVideoWindow_put_WindowState(window, SW_SHOWNA); ok(hr == S_OK, "Got hr %#x.\n", hr);
+ hr = IVideoWindow_SetWindowForeground(window, TRUE); + ok(hr == E_INVALIDARG, "Got hr %#x.\n", hr); + SetWindowPos(our_hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); hr = IVideoWindow_SetWindowForeground(window, OATRUE); - todo_wine - { - ok(hr == S_OK, "Got hr %#x.\n", hr); - ok(GetActiveWindow() == hwnd, "Got active window %p.\n", GetActiveWindow()); - ok(GetFocus() == hwnd, "Got focus window %p.\n", GetFocus()); - ok(GetForegroundWindow() == hwnd, "Got foreground window %p.\n", GetForegroundWindow()); - top = get_top_window(); - ok(top == hwnd, "Got top window %p.\n", top); - } + ok(hr == S_OK, "Got hr %#x.\n", hr); + ok(GetActiveWindow() == hwnd, "Got active window %p.\n", GetActiveWindow()); + ok(GetFocus() == hwnd, "Got focus window %p.\n", GetFocus()); + ok(GetForegroundWindow() == hwnd, "Got foreground window %p.\n", GetForegroundWindow()); + top = get_top_window(); + todo_wine ok(top == hwnd, "Got top window %p.\n", top);
hr = IVideoWindow_SetWindowForeground(window, OAFALSE); ok(hr == S_OK, "Got hr %#x.\n", hr); diff --git a/dlls/strmbase/window.c b/dlls/strmbase/window.c index 4ecc81c24e5..f280b323ab0 100644 --- a/dlls/strmbase/window.c +++ b/dlls/strmbase/window.c @@ -652,7 +652,7 @@ HRESULT WINAPI BaseControlWindowImpl_SetWindowForeground(IVideoWindow *iface, LO
TRACE("(%p/%p)->(%d)\n", This, iface, Focus);
- if ((Focus != FALSE) && (Focus != TRUE)) + if ((Focus != OAFALSE) && (Focus != OATRUE)) return E_INVALIDARG;
hr = IPin_ConnectedTo(&This->pPin->IPin_iface, &pPin);
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/quartz/tests/videorenderer.c | 4 ++-- dlls/strmbase/window.c | 27 +++++++++++++-------------- 2 files changed, 15 insertions(+), 16 deletions(-)
diff --git a/dlls/quartz/tests/videorenderer.c b/dlls/quartz/tests/videorenderer.c index ae467ed71aa..f4c3f92e289 100644 --- a/dlls/quartz/tests/videorenderer.c +++ b/dlls/quartz/tests/videorenderer.c @@ -1795,9 +1795,9 @@ static void test_video_window_owner(IVideoWindow *window, HWND hwnd, HWND our_hw parent = GetAncestor(hwnd, GA_PARENT); ok(parent == our_hwnd, "Got parent %p.\n", parent); style = GetWindowLongA(hwnd, GWL_STYLE); - todo_wine ok((style & WS_CHILD), "Got style %#x.\n", style); + ok((style & WS_CHILD), "Got style %#x.\n", style);
- todo_wine ok(GetActiveWindow() == our_hwnd, "Got active window %p.\n", GetActiveWindow()); + ok(GetActiveWindow() == our_hwnd, "Got active window %p.\n", GetActiveWindow()); top_hwnd = get_top_window(); ok(top_hwnd == our_hwnd, "Got top window %p.\n", top_hwnd);
diff --git a/dlls/strmbase/window.c b/dlls/strmbase/window.c index f280b323ab0..446c389220b 100644 --- a/dlls/strmbase/window.c +++ b/dlls/strmbase/window.c @@ -558,23 +558,22 @@ HRESULT WINAPI BaseControlWindowImpl_get_Height(IVideoWindow *iface, LONG *pHeig return S_OK; }
-HRESULT WINAPI BaseControlWindowImpl_put_Owner(IVideoWindow *iface, OAHWND Owner) +HRESULT WINAPI BaseControlWindowImpl_put_Owner(IVideoWindow *iface, OAHWND owner) { - BaseControlWindow* This = impl_from_IVideoWindow(iface); + BaseControlWindow *window = impl_from_IVideoWindow(iface); + HWND hwnd = window->baseWindow.hWnd;
- TRACE("(%p/%p)->(%08x)\n", This, iface, (DWORD) Owner); + TRACE("window %p, owner %#lx.\n", window, owner);
- This->hwndOwner = (HWND)Owner; - SetParent(This->baseWindow.hWnd, This->hwndOwner); - if (This->baseWindow.WindowStyles & WS_CHILD) - { - LONG old = GetWindowLongW(This->baseWindow.hWnd, GWL_STYLE); - if (old != This->baseWindow.WindowStyles) - { - SetWindowLongW(This->baseWindow.hWnd, GWL_STYLE, This->baseWindow.WindowStyles); - SetWindowPos(This->baseWindow.hWnd,0,0,0,0,0,SWP_FRAMECHANGED|SWP_NOSIZE|SWP_NOZORDER); - } - } + /* Make sure we are marked as WS_CHILD before reparenting ourselves, so that + * we do not steal focus. LEGO Island depends on this. */ + + window->hwndOwner = (HWND)owner; + if (owner) + SetWindowLongPtrW(hwnd, GWL_STYLE, GetWindowLongPtrW(hwnd, GWL_STYLE) | WS_CHILD); + else + SetWindowLongPtrW(hwnd, GWL_STYLE, GetWindowLongPtrW(hwnd, GWL_STYLE) & ~WS_CHILD); + SetParent(hwnd, (HWND)owner);
return S_OK; }
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=57606
Your paranoid android.
=== wvistau64_he (32 bit report) ===
quartz: videorenderer.c:1071: Test failed: Expected EC_COMPLETE. videorenderer.c:1076: Test failed: Got unexpected EC_COMPLETE.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=10440 Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/quartz/tests/videorenderer.c | 4 ++-- dlls/strmbase/window.c | 14 +++++++++----- 2 files changed, 11 insertions(+), 7 deletions(-)
diff --git a/dlls/quartz/tests/videorenderer.c b/dlls/quartz/tests/videorenderer.c index f4c3f92e289..f1f901d164d 100644 --- a/dlls/quartz/tests/videorenderer.c +++ b/dlls/quartz/tests/videorenderer.c @@ -1762,9 +1762,9 @@ static void test_video_window_position(IVideoWindow *window, HWND hwnd, HWND our ok(rect.right == 400, "Got window right %d.\n", rect.right); ok(rect.bottom == 600, "Got window bottom %d.\n", rect.bottom);
- todo_wine ok(GetActiveWindow() == our_hwnd, "Got active window %p.\n", GetActiveWindow()); + ok(GetActiveWindow() == our_hwnd, "Got active window %p.\n", GetActiveWindow()); top_hwnd = get_top_window(); - todo_wine ok(top_hwnd == our_hwnd, "Got top window %p.\n", top_hwnd); + ok(top_hwnd == our_hwnd, "Got top window %p.\n", top_hwnd); }
static void test_video_window_owner(IVideoWindow *window, HWND hwnd, HWND our_hwnd) diff --git a/dlls/strmbase/window.c b/dlls/strmbase/window.c index 446c389220b..cb41aee2f4f 100644 --- a/dlls/strmbase/window.c +++ b/dlls/strmbase/window.c @@ -462,7 +462,8 @@ HRESULT WINAPI BaseControlWindowImpl_put_Left(IVideoWindow *iface, LONG Left) TRACE("(%p/%p)->(%d)\n", This, iface, Left);
GetWindowRect(This->baseWindow.hWnd, &WindowPos); - if (!SetWindowPos(This->baseWindow.hWnd, NULL, Left, WindowPos.top, 0, 0, SWP_NOZORDER|SWP_NOSIZE)) + if (!SetWindowPos(This->baseWindow.hWnd, NULL, Left, WindowPos.top, 0, 0, + SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOSIZE)) return E_FAIL;
return S_OK; @@ -487,7 +488,8 @@ HRESULT WINAPI BaseControlWindowImpl_put_Width(IVideoWindow *iface, LONG Width)
TRACE("(%p/%p)->(%d)\n", This, iface, Width);
- if (!SetWindowPos(This->baseWindow.hWnd, NULL, 0, 0, Width, This->baseWindow.Height, SWP_NOZORDER|SWP_NOMOVE)) + if (!SetWindowPos(This->baseWindow.hWnd, NULL, 0, 0, Width, This->baseWindow.Height, + SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOMOVE)) return E_FAIL;
This->baseWindow.Width = Width; @@ -514,7 +516,8 @@ HRESULT WINAPI BaseControlWindowImpl_put_Top(IVideoWindow *iface, LONG Top) TRACE("(%p/%p)->(%d)\n", This, iface, Top); GetWindowRect(This->baseWindow.hWnd, &WindowPos);
- if (!SetWindowPos(This->baseWindow.hWnd, NULL, WindowPos.left, Top, 0, 0, SWP_NOZORDER|SWP_NOSIZE)) + if (!SetWindowPos(This->baseWindow.hWnd, NULL, WindowPos.left, Top, 0, 0, + SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOSIZE)) return E_FAIL;
return S_OK; @@ -539,7 +542,8 @@ HRESULT WINAPI BaseControlWindowImpl_put_Height(IVideoWindow *iface, LONG Height
TRACE("(%p/%p)->(%d)\n", This, iface, Height);
- if (!SetWindowPos(This->baseWindow.hWnd, NULL, 0, 0, This->baseWindow.Width, Height, SWP_NOZORDER|SWP_NOMOVE)) + if (!SetWindowPos(This->baseWindow.hWnd, NULL, 0, 0, This->baseWindow.Width, + Height, SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOMOVE)) return E_FAIL;
This->baseWindow.Height = Height; @@ -675,7 +679,7 @@ HRESULT WINAPI BaseControlWindowImpl_SetWindowPosition(IVideoWindow *iface, LONG
TRACE("(%p/%p)->(%d, %d, %d, %d)\n", This, iface, Left, Top, Width, Height);
- if (!SetWindowPos(This->baseWindow.hWnd, NULL, Left, Top, Width, Height, SWP_NOZORDER)) + if (!SetWindowPos(This->baseWindow.hWnd, NULL, Left, Top, Width, Height, SWP_NOACTIVATE | SWP_NOZORDER)) return E_FAIL;
This->baseWindow.Width = Width;
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=57607
Your paranoid android.
=== w864 (32 bit report) ===
quartz: videorenderer.c:1893: Test failed: Got unexpected message 0x113.