Akihiro Sagawa : quartz: Notify EC_USERABORT event when closing video window.

Alexandre Julliard julliard at winehq.org
Mon Jun 7 16:30:35 CDT 2021


Module: wine
Branch: master
Commit: 1b107ec03ea423f430d2eeb6eecc1f08b0d7ac56
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=1b107ec03ea423f430d2eeb6eecc1f08b0d7ac56

Author: Akihiro Sagawa <sagawa.aki at 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 at gmail.com>
Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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);
 }




More information about the wine-cvs mailing list