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