Henri Verbeet : ddraw/tests: Make sure the window is properly released by ddraw in test_wndproc().
Alexandre Julliard
julliard at winehq.org
Tue May 3 13:30:56 CDT 2011
Module: wine
Branch: master
Commit: 0293e19928f9ec66697cbd6e421c64bb43380aa9
URL: http://source.winehq.org/git/wine.git/?a=commit;h=0293e19928f9ec66697cbd6e421c64bb43380aa9
Author: Henri Verbeet <hverbeet at codeweavers.com>
Date: Mon May 2 22:16:37 2011 +0200
ddraw/tests: Make sure the window is properly released by ddraw in test_wndproc().
---
dlls/ddraw/tests/d3d.c | 22 ++++++++++++++++++++++
1 files changed, 22 insertions(+), 0 deletions(-)
diff --git a/dlls/ddraw/tests/d3d.c b/dlls/ddraw/tests/d3d.c
index 8d43cca..8bb517c 100644
--- a/dlls/ddraw/tests/d3d.c
+++ b/dlls/ddraw/tests/d3d.c
@@ -3251,6 +3251,27 @@ static LRESULT CALLBACK test_proc(HWND hwnd, UINT message, WPARAM wparam, LPARAM
return DefWindowProcA(hwnd, message, wparam, lparam);
}
+/* Set the wndproc back to what ddraw expects it to be, and release the ddraw
+ * interface. This prevents subsequent SetCooperativeLevel() calls on a
+ * different window from failing with DDERR_HWNDALREADYSET. */
+static void fix_wndproc(HWND window, LONG_PTR proc)
+{
+ IDirectDraw7 *ddraw7;
+ HRESULT hr;
+
+ hr = pDirectDrawCreateEx(NULL, (void **)&ddraw7, &IID_IDirectDraw7, NULL);
+ ok(SUCCEEDED(hr), "Failed to create IDirectDraw7 object, hr %#x.", hr);
+ if (FAILED(hr)) return;
+
+ SetWindowLongPtrA(window, GWLP_WNDPROC, proc);
+ hr = IDirectDraw7_SetCooperativeLevel(ddraw7, window, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN);
+ ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
+ hr = IDirectDraw7_SetCooperativeLevel(ddraw7, window, DDSCL_NORMAL);
+ ok(SUCCEEDED(hr), "SetCooperativeLevel failed, hr %#x.\n", hr);
+
+ IDirectDraw7_Release(ddraw7);
+}
+
static void test_wndproc(void)
{
LONG_PTR proc, ddraw_proc;
@@ -3458,6 +3479,7 @@ static void test_wndproc(void)
(LONG_PTR)DefWindowProcA, proc);
done:
+ fix_wndproc(window, (LONG_PTR)test_proc);
expect_messages = NULL;
DestroyWindow(window);
UnregisterClassA("d3d7_test_wndproc_wc", GetModuleHandleA(NULL));
More information about the wine-cvs
mailing list