Module: wine Branch: master Commit: 1b107ec03ea423f430d2eeb6eecc1f08b0d7ac56 URL: https://source.winehq.org/git/wine.git/?a=commit;h=1b107ec03ea423f430d2eeb6e...
Author: Akihiro Sagawa sagawa.aki@gmail.com Date: Wed Jun 2 23:08:00 2021 +0900
quartz: Notify EC_USERABORT event when closing video window.
Signed-off-by: Akihiro Sagawa sagawa.aki@gmail.com Signed-off-by: Zebediah Figura zfigura@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/quartz/tests/videorenderer.c | 4 ++-- dlls/quartz/tests/vmr7.c | 4 ++-- dlls/quartz/tests/vmr9.c | 4 ++-- dlls/quartz/window.c | 11 +++++++++++ 4 files changed, 17 insertions(+), 6 deletions(-)
diff --git a/dlls/quartz/tests/videorenderer.c b/dlls/quartz/tests/videorenderer.c index c1a2e882dc9..8d0003cf12e 100644 --- a/dlls/quartz/tests/videorenderer.c +++ b/dlls/quartz/tests/videorenderer.c @@ -1344,7 +1344,7 @@ static void test_window_close(IPin *pin, IMemInputPin *input, IMediaControl *con hr = IMediaControl_GetState(control, 1000, &state); ok(hr == VFW_S_STATE_INTERMEDIATE, "Got hr %#x.\n", hr); ret = check_ec_userabort(eventsrc, 0); - todo_wine ok(ret == 1, "Expected EC_USERABORT.\n"); + ok(ret == 1, "Expected EC_USERABORT.\n");
ok(IsWindow(hwnd), "Window should exist.\n"); ok(!IsWindowVisible(hwnd), "Window should be visible.\n"); @@ -1383,7 +1383,7 @@ static void test_window_close(IPin *pin, IMemInputPin *input, IMediaControl *con SendMessageW(hwnd, WM_CLOSE, 0, 0);
ret = check_ec_userabort(eventsrc, 0); - todo_wine ok(ret == 1, "Expected EC_USERABORT.\n"); + ok(ret == 1, "Expected EC_USERABORT.\n");
ok(IsWindow(hwnd), "Window should exist.\n"); ok(!IsWindowVisible(hwnd), "Window should be visible.\n"); diff --git a/dlls/quartz/tests/vmr7.c b/dlls/quartz/tests/vmr7.c index b8af2163099..688770a8501 100644 --- a/dlls/quartz/tests/vmr7.c +++ b/dlls/quartz/tests/vmr7.c @@ -1375,7 +1375,7 @@ static void test_window_close(IPin *pin, IMemInputPin *input, IMediaControl *con hr = IMediaControl_GetState(control, 1000, &state); ok(hr == VFW_S_STATE_INTERMEDIATE, "Got hr %#x.\n", hr); ret = check_ec_userabort(eventsrc, 0); - todo_wine ok(ret == 1, "Expected EC_USERABORT.\n"); + ok(ret == 1, "Expected EC_USERABORT.\n");
ok(IsWindow(hwnd), "Window should exist.\n"); ok(!IsWindowVisible(hwnd), "Window should be visible.\n"); @@ -1415,7 +1415,7 @@ static void test_window_close(IPin *pin, IMemInputPin *input, IMediaControl *con SendMessageW(hwnd, WM_CLOSE, 0, 0);
ret = check_ec_userabort(eventsrc, 0); - todo_wine ok(ret == 1, "Expected EC_USERABORT.\n"); + ok(ret == 1, "Expected EC_USERABORT.\n");
ok(IsWindow(hwnd), "Window should exist.\n"); ok(!IsWindowVisible(hwnd), "Window should be visible.\n"); diff --git a/dlls/quartz/tests/vmr9.c b/dlls/quartz/tests/vmr9.c index 3f6982dfb5a..154b6a6b99e 100644 --- a/dlls/quartz/tests/vmr9.c +++ b/dlls/quartz/tests/vmr9.c @@ -1580,7 +1580,7 @@ static void test_window_close(IPin *pin, IMemInputPin *input, IMediaControl *con hr = IMediaControl_GetState(control, 1000, &state); ok(hr == VFW_S_STATE_INTERMEDIATE, "Got hr %#x.\n", hr); ret = check_ec_userabort(eventsrc, 0); - todo_wine ok(ret == 1, "Expected EC_USERABORT.\n"); + ok(ret == 1, "Expected EC_USERABORT.\n");
ok(IsWindow(hwnd), "Window should exist.\n"); ok(!IsWindowVisible(hwnd), "Window should be visible.\n"); @@ -1620,7 +1620,7 @@ static void test_window_close(IPin *pin, IMemInputPin *input, IMediaControl *con SendMessageW(hwnd, WM_CLOSE, 0, 0);
ret = check_ec_userabort(eventsrc, 0); - todo_wine ok(ret == 1, "Expected EC_USERABORT.\n"); + ok(ret == 1, "Expected EC_USERABORT.\n");
ok(IsWindow(hwnd), "Window should exist.\n"); ok(!IsWindowVisible(hwnd), "Window should be visible.\n"); diff --git a/dlls/quartz/window.c b/dlls/quartz/window.c index 94210e043c7..5b172d5f108 100644 --- a/dlls/quartz/window.c +++ b/dlls/quartz/window.c @@ -77,9 +77,20 @@ static LRESULT CALLBACK WndProcW(HWND hwnd, UINT message, WPARAM wparam, LPARAM DestroyWindow(hwnd); return 0; case WM_CLOSE: + { + IFilterGraph *graph = window->pFilter->graph; + IMediaEventSink *event_sink; IVideoWindow_put_Visible(&window->IVideoWindow_iface, OAFALSE); + if (graph && SUCCEEDED(IFilterGraph_QueryInterface(graph, + &IID_IMediaEventSink, + (void **)&event_sink))) + { + IMediaEventSink_Notify(event_sink, EC_USERABORT, 0, 0); + IMediaEventSink_Release(event_sink); + } return 0; } + }
return DefWindowProcW(hwnd, message, wparam, lparam); }