Henri Verbeet : ddraw: Only modify the ddraw destination window at the end of ddraw7_SetCooperativeLevel ().

Alexandre Julliard julliard at winehq.org
Tue Jan 15 13:46:17 CST 2013


Module: wine
Branch: master
Commit: 292522c4ad121375bd284eaeae54a0c5d0fe23f3
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=292522c4ad121375bd284eaeae54a0c5d0fe23f3

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Tue Jan 15 08:46:54 2013 +0100

ddraw: Only modify the ddraw destination window at the end of ddraw7_SetCooperativeLevel().

We want this to happen after ddraw_destroy_swapchain() in particular, because
dest_window being different from d3d_window will cause it to destroy
d3d_window, but this seems like a good idea in general.

---

 dlls/ddraw/ddraw.c        |   10 ++--------
 dlls/ddraw/tests/ddraw1.c |    2 +-
 dlls/ddraw/tests/ddraw2.c |    2 +-
 dlls/ddraw/tests/ddraw4.c |    2 +-
 dlls/ddraw/tests/ddraw7.c |    2 +-
 5 files changed, 6 insertions(+), 12 deletions(-)

diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
index ca6f8d5..21acc28 100644
--- a/dlls/ddraw/ddraw.c
+++ b/dlls/ddraw/ddraw.c
@@ -551,9 +551,6 @@ static HRESULT ddraw_set_focus_window(struct ddraw *ddraw, HWND window)
 
     ddraw->focuswindow = window;
 
-    /* Use the focus window for drawing too. */
-    ddraw->dest_window = ddraw->focuswindow;
-
     return DD_OK;
 }
 
@@ -852,10 +849,6 @@ static HRESULT WINAPI ddraw7_SetCooperativeLevel(IDirectDraw7 *iface, HWND hwnd,
         }
     }
 
-    /* Don't override focus windows or private device windows */
-    if (hwnd && !This->focuswindow && !This->devicewindow && (hwnd != window))
-        This->dest_window = hwnd;
-
     if (cooplevel & DDSCL_MULTITHREADED && !(This->cooperative_level & DDSCL_MULTITHREADED))
         wined3d_device_set_multithreaded(This->wined3d_device);
 
@@ -886,7 +879,7 @@ static HRESULT WINAPI ddraw7_SetCooperativeLevel(IDirectDraw7 *iface, HWND hwnd,
         ddraw_destroy_swapchain(This);
     }
 
-    if (FAILED(hr = ddraw_create_swapchain(This, This->dest_window, !(cooplevel & DDSCL_FULLSCREEN))))
+    if (FAILED(hr = ddraw_create_swapchain(This, hwnd, !(cooplevel & DDSCL_FULLSCREEN))))
         ERR("Failed to create swapchain, hr %#x.\n", hr);
 
     if (restore_state)
@@ -922,6 +915,7 @@ static HRESULT WINAPI ddraw7_SetCooperativeLevel(IDirectDraw7 *iface, HWND hwnd,
 
     /* Store the cooperative_level */
     This->cooperative_level = cooplevel;
+    This->dest_window = hwnd;
     TRACE("SetCooperativeLevel retuning DD_OK\n");
     wined3d_mutex_unlock();
 
diff --git a/dlls/ddraw/tests/ddraw1.c b/dlls/ddraw/tests/ddraw1.c
index a37e0b7..2cbcf44 100644
--- a/dlls/ddraw/tests/ddraw1.c
+++ b/dlls/ddraw/tests/ddraw1.c
@@ -2651,7 +2651,7 @@ static void test_coop_level_multi_window(void)
     ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr);
     hr = IDirectDraw_SetCooperativeLevel(ddraw, window2, DDSCL_NORMAL);
     ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr);
-    todo_wine ok(IsWindow(window1), "Window 1 was destroyed.\n");
+    ok(IsWindow(window1), "Window 1 was destroyed.\n");
     ok(IsWindow(window2), "Window 2 was destroyed.\n");
 
     IDirectDraw_Release(ddraw);
diff --git a/dlls/ddraw/tests/ddraw2.c b/dlls/ddraw/tests/ddraw2.c
index e475f5b..79b0e9b 100644
--- a/dlls/ddraw/tests/ddraw2.c
+++ b/dlls/ddraw/tests/ddraw2.c
@@ -2770,7 +2770,7 @@ static void test_coop_level_multi_window(void)
     ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr);
     hr = IDirectDraw2_SetCooperativeLevel(ddraw, window2, DDSCL_NORMAL);
     ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr);
-    todo_wine ok(IsWindow(window1), "Window 1 was destroyed.\n");
+    ok(IsWindow(window1), "Window 1 was destroyed.\n");
     ok(IsWindow(window2), "Window 2 was destroyed.\n");
 
     IDirectDraw2_Release(ddraw);
diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c
index 82cd5d5..3d81d1d 100644
--- a/dlls/ddraw/tests/ddraw4.c
+++ b/dlls/ddraw/tests/ddraw4.c
@@ -2957,7 +2957,7 @@ static void test_coop_level_multi_window(void)
     ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr);
     hr = IDirectDraw4_SetCooperativeLevel(ddraw, window2, DDSCL_NORMAL);
     ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr);
-    todo_wine ok(IsWindow(window1), "Window 1 was destroyed.\n");
+    ok(IsWindow(window1), "Window 1 was destroyed.\n");
     ok(IsWindow(window2), "Window 2 was destroyed.\n");
 
     IDirectDraw4_Release(ddraw);
diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c
index cd22e0c..5668dc7 100644
--- a/dlls/ddraw/tests/ddraw7.c
+++ b/dlls/ddraw/tests/ddraw7.c
@@ -2766,7 +2766,7 @@ static void test_coop_level_multi_window(void)
     ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr);
     hr = IDirectDraw7_SetCooperativeLevel(ddraw, window2, DDSCL_NORMAL);
     ok(SUCCEEDED(hr), "Failed to set cooperative level, hr %#x.\n", hr);
-    todo_wine ok(IsWindow(window1), "Window 1 was destroyed.\n");
+    ok(IsWindow(window1), "Window 1 was destroyed.\n");
     ok(IsWindow(window2), "Window 2 was destroyed.\n");
 
     IDirectDraw7_Release(ddraw);




More information about the wine-cvs mailing list