[PATCH 2/2] quartz/tests: Test renderer's parent WM_DESTROY notification.
Gabriel Ivăncescu
gabrielopcode at gmail.com
Thu Jan 9 09:22:53 CST 2020
On 09/01/2020 16:46, Zebediah Figura wrote:
> On 1/9/20 7:13 AM, Gabriel Ivăncescu wrote:
>> Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
>> ---
>> dlls/quartz/tests/filtergraph.c | 35 ++++++++++++++++++++++++++++++++-
>> 1 file changed, 34 insertions(+), 1 deletion(-)
>>
>> diff --git a/dlls/quartz/tests/filtergraph.c
>> b/dlls/quartz/tests/filtergraph.c
>> index ca45031..726c54a 100644
>> --- a/dlls/quartz/tests/filtergraph.c
>> +++ b/dlls/quartz/tests/filtergraph.c
>> @@ -4232,16 +4232,38 @@ static HWND get_renderer_hwnd(IFilterGraph2
>> *graph)
>> return hwnd;
>> }
>> +static LRESULT CALLBACK parent_wndproc(HWND hwnd, UINT msg, WPARAM
>> wParam, LPARAM lParam)
>> +{
>> + switch (msg)
>> + {
>> + case WM_PARENTNOTIFY:
>> + if (LOWORD(wParam) == WM_DESTROY)
>> + ok(0, "Received WM_PARENTNOTIFY with WM_DESTROY.\n");
>> + break;
>> + }
>> + return DefWindowProcA(hwnd, msg, wParam, lParam);
>> +}
>> +
>> static void test_window_threading(void)
>> {
>> WCHAR *filename = load_resource(avifile);
>> IFilterGraph2 *graph = create_graph();
>> + WNDCLASSA cls = { 0 };
>> + HWND hwnd, parent;
>> HRESULT hr;
>> DWORD tid;
>> ULONG ref;
>> - HWND hwnd;
>> BOOL ret;
>> + cls.lpfnWndProc = parent_wndproc;
>> + cls.hInstance = GetModuleHandleA(NULL);
>> + cls.hCursor = LoadCursorA(0, (const char*)IDC_ARROW);
>> + cls.lpszClassName = "TestParent";
>> + RegisterClassA(&cls);
>> +
>> + parent = CreateWindowExA(0, "TestParent", NULL,
>> WS_OVERLAPPEDWINDOW, 50, 50, 150, 150, NULL, NULL, cls.hInstance, NULL);
>> + ok(parent != NULL, "Failed to create parent window.\n");
>> +
>> hr = IFilterGraph2_RenderFile(graph, filename, NULL);
>> if (FAILED(hr))
>> {
>> @@ -4256,6 +4278,10 @@ static void test_window_threading(void)
>> {
>> tid = GetWindowThreadProcessId(hwnd, NULL);
>> ok(tid != GetCurrentThreadId(), "Window should have been
>> created on a separate thread.\n");
>> + ok(!(GetWindowLongW(hwnd, GWL_EXSTYLE) &
>> WS_EX_NOPARENTNOTIFY), "Window has WS_EX_NOPARENTNOTIFY.\n");
>> +
>> + SetParent(hwnd, parent);
>> + SetWindowLongW(hwnd, GWL_STYLE, GetWindowLongW(hwnd,
>> GWL_STYLE) | WS_CHILD);
>
> Does the application actually do this, or does it use
> IVideoWindow::put_Owner()? If it is the former, I'd like to see a
> comment to that effect.
>
I actually don't know what the app does when it sets the parent. I wrote
the test to see if Windows notifies the parent, and it seems that it
doesn't (I also set the WS_CHILD just in case), despite not having the
WS_EX_NOPARENTNOTIFY style in the first place. Wine would fail this test
without the first patch, even without put_Owner.
I'll investigate what the app does. However, while this patchset fixes
that app, I thought a more generic solution would be preferable, since
that's how Windows seems to work (unless you have a better idea).
Also, by comment, you meant in the test file as C comment, right?
Thanks,
Gabriel
More information about the wine-devel
mailing list