David Adam : ddraw: Add tests for the foreground window set by SetCooperativeLevel.
Alexandre Julliard
julliard at winehq.org
Mon Nov 1 11:54:35 CDT 2010
Module: wine
Branch: master
Commit: 94f74a7caf84458d4400db46e0158b3e951f1d75
URL: http://source.winehq.org/git/wine.git/?a=commit;h=94f74a7caf84458d4400db46e0158b3e951f1d75
Author: David Adam <david.adam.cnrs at gmail.com>
Date: Thu Oct 28 14:18:15 2010 +0200
ddraw: Add tests for the foreground window set by SetCooperativeLevel.
---
dlls/ddraw/tests/ddrawmodes.c | 106 +++++++++++++++++++++++++++++++++-------
1 files changed, 87 insertions(+), 19 deletions(-)
diff --git a/dlls/ddraw/tests/ddrawmodes.c b/dlls/ddraw/tests/ddrawmodes.c
index b6491f3..e83541a 100644
--- a/dlls/ddraw/tests/ddrawmodes.c
+++ b/dlls/ddraw/tests/ddrawmodes.c
@@ -33,7 +33,7 @@ static LPDIRECTDRAW lpDD = NULL;
static LPDIRECTDRAWSURFACE lpDDSPrimary = NULL;
static LPDIRECTDRAWSURFACE lpDDSBack = NULL;
static WNDCLASS wc;
-static HWND hwnd;
+static HWND hwnd, hwnd2;
static int modes_cnt;
static int modes_size;
static LPDDSURFACEDESC modes;
@@ -54,31 +54,21 @@ static void init_function_pointers(void)
pDirectDrawEnumerateExW = (void*)GetProcAddress(hmod, "DirectDrawEnumerateExW");
}
-static void createwindow(void)
+static HWND createwindow(void)
{
- wc.style = CS_HREDRAW | CS_VREDRAW;
- wc.lpfnWndProc = DefWindowProcA;
- wc.cbClsExtra = 0;
- wc.cbWndExtra = 0;
- wc.hInstance = GetModuleHandleA(0);
- wc.hIcon = LoadIconA(wc.hInstance, IDI_APPLICATION);
- wc.hCursor = LoadCursorA(NULL, IDC_ARROW);
- wc.hbrBackground = GetStockObject(BLACK_BRUSH);
- wc.lpszMenuName = NULL;
- wc.lpszClassName = "TestWindowClass";
- if(!RegisterClassA(&wc))
- assert(0);
+ HWND hwnd;
hwnd = CreateWindowExA(0, "TestWindowClass", "TestWindowClass",
WS_POPUP, 0, 0,
GetSystemMetrics(SM_CXSCREEN),
GetSystemMetrics(SM_CYSCREEN),
NULL, NULL, GetModuleHandleA(0), NULL);
- assert(hwnd != NULL);
ShowWindow(hwnd, SW_HIDE);
UpdateWindow(hwnd);
SetFocus(hwnd);
+
+ return hwnd;
}
static BOOL createdirectdraw(void)
@@ -546,6 +536,7 @@ static void testdisplaymodes(void)
static void testcooperativelevels_normal(void)
{
+ BOOL sfw;
HRESULT rc;
DDSURFACEDESC surfacedesc;
IDirectDrawSurface *surface = (IDirectDrawSurface *) 0xdeadbeef;
@@ -561,11 +552,23 @@ static void testcooperativelevels_normal(void)
ok(rc==DDERR_INVALIDPARAMS,"SetCooperativeLevel(DDSCL_SETFOCUSWINDOW | DDSCL_CREATEDEVICEWINDOW) returned: %x\n",rc);
/* Do some tests with DDSCL_NORMAL mode */
+
/* Fullscreen mode + normal mode + exclusive mode */
+ sfw=FALSE;
+ if(hwnd2)
+ sfw=SetForegroundWindow(hwnd2);
+ else
+ skip("Failed to create the second window\n");
+
rc = IDirectDraw_SetCooperativeLevel(lpDD, hwnd, DDSCL_FULLSCREEN | DDSCL_EXCLUSIVE | DDSCL_NORMAL);
todo_wine ok(rc==DD_OK,"SetCooperativeLevel(DDSCL_FULLSCREEN | DDSCL_EXCLUSIVE | DDSCL_NORMAL) returned: %x\n",rc);
+
+ if(sfw)
+ todo_wine ok(GetForegroundWindow()==hwnd,"Expected the main windows (%p) for foreground, received the second one (%p)\n",hwnd, hwnd2);
+
/* Try creating a double buffered primary in fullscreen + exclusive + normal mode */
rc = IDirectDraw_CreateSurface(lpDD, &surfacedesc, &surface, NULL);
+
if (rc == DDERR_UNSUPPORTEDMODE)
skip("Unsupported mode\n");
else
@@ -574,12 +577,21 @@ static void testcooperativelevels_normal(void)
todo_wine ok(surface!=NULL, "Returned NULL surface pointer \n");
}
if(surface && surface != (IDirectDrawSurface *)0xdeadbeef) IDirectDrawSurface_Release(surface);
+
/* Exclusive mode + normal mode */
rc = IDirectDraw_SetCooperativeLevel(lpDD, hwnd, DDSCL_EXCLUSIVE | DDSCL_NORMAL);
ok(rc==DDERR_INVALIDPARAMS,"SetCooperativeLevel(DDSCL_EXCLUSIVE | DDSCL_NORMAL) returned: %x\n",rc);
+
/* Fullscreen mode + normal mode */
+ sfw=FALSE;
+ if(hwnd2) sfw=SetForegroundWindow(hwnd2);
+
rc = IDirectDraw_SetCooperativeLevel(lpDD, hwnd, DDSCL_FULLSCREEN | DDSCL_NORMAL);
todo_wine ok(rc==DD_OK,"SetCooperativeLevel(DDSCL_FULLSCREEN | DDSCL_NORMAL) returned: %x\n",rc);
+
+ if(sfw)
+ ok(GetForegroundWindow()==hwnd2,"Expected the second windows (%p) for foreground, received the main one (%p)\n",hwnd2, hwnd);
+
/* Try creating a double buffered primary in fullscreen + normal mode */
rc = IDirectDraw_CreateSurface(lpDD, &surfacedesc, &surface, NULL);
if (rc == DDERR_UNSUPPORTEDMODE)
@@ -589,12 +601,20 @@ static void testcooperativelevels_normal(void)
ok(rc == DDERR_NOEXCLUSIVEMODE, "IDirectDraw_CreateSurface returned %08x\n", rc);
ok(surface == NULL, "Returned surface pointer is %p\n", surface);
}
+
if(surface && surface != (IDirectDrawSurface *)0xdeadbeef) IDirectDrawSurface_Release(surface);
- /* Normal mode */
+
+ /* switching from Fullscreen mode to Normal mode */
+ sfw=FALSE;
+ if(hwnd2) sfw=SetForegroundWindow(hwnd2);
+
rc = IDirectDraw_SetCooperativeLevel(lpDD,
hwnd, DDSCL_NORMAL);
ok(rc==DD_OK,"SetCooperativeLevel(DDSCL_NORMAL) returned: %x\n",rc);
+ if(sfw)
+ ok(GetForegroundWindow()==hwnd2,"Expected the second windows (%p) for foreground, received the main one (%p)\n",hwnd2, hwnd);
+
/* Try creating a double buffered primary in normal mode */
rc = IDirectDraw_CreateSurface(lpDD, &surfacedesc, &surface, NULL);
if (rc == DDERR_UNSUPPORTEDMODE)
@@ -606,6 +626,17 @@ static void testcooperativelevels_normal(void)
}
if(surface && surface != (IDirectDrawSurface *)0xdeadbeef) IDirectDrawSurface_Release(surface);
+ /* switching from Normal mode to Fullscreen + Normal mode */
+ sfw=FALSE;
+ if(hwnd2) sfw=SetForegroundWindow(hwnd2);
+
+ rc = IDirectDraw_SetCooperativeLevel(lpDD,
+ hwnd, DDSCL_NORMAL | DDSCL_FULLSCREEN);
+ todo_wine ok(rc==DD_OK,"SetCooperativeLevel(DDSCL_NORMAL | FULLSCREEN) returned: %x\n",rc);
+
+ if(sfw)
+ ok(GetForegroundWindow()==hwnd2,"Expected the second windows (%p) for foreground, received the main one (%p)\n",hwnd2, hwnd);
+
/* Set the focus window */
rc = IDirectDraw_SetCooperativeLevel(lpDD, hwnd, DDSCL_SETFOCUSWINDOW | DDSCL_CREATEDEVICEWINDOW);
@@ -681,7 +712,7 @@ static void testcooperativelevels_normal(void)
static void testcooperativelevels_exclusive(void)
{
- BOOL success;
+ BOOL sfw, success;
HRESULT rc;
RECT window_rect;
@@ -702,11 +733,21 @@ static void testcooperativelevels_exclusive(void)
ok(rc==DDERR_INVALIDPARAMS,"SetCooperativeLevel(DDSCL_FULLSCREEN) returned: %x\n",rc);
/* Full screen mode + exclusive mode */
+ sfw=FALSE;
+ if(hwnd2)
+ sfw=SetForegroundWindow(hwnd2);
+ else
+ skip("Failed to create the second window\n");
+
rc = IDirectDraw_SetCooperativeLevel(lpDD,
hwnd, DDSCL_FULLSCREEN | DDSCL_EXCLUSIVE);
ok(rc==DD_OK,"SetCooperativeLevel(DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN) returned: %x\n",rc);
- GetClientRect(hwnd, &window_rect);
+
+ if(sfw)
+ ok(GetForegroundWindow()==hwnd,"Expected the main windows (%p) for foreground, received the second one (%p)\n",hwnd, hwnd2);
+
/* rect_before_create is assumed to hold the screen rect */
+ GetClientRect(hwnd, &window_rect);
rc = EqualRect(&rect_before_create, &window_rect);
todo_wine ok(rc!=0, "Fullscreen window has wrong size\n");
@@ -783,9 +824,36 @@ START_TEST(ddrawmodes)
{
init_function_pointers();
- createwindow();
+ wc.style = CS_HREDRAW | CS_VREDRAW;
+ wc.lpfnWndProc = DefWindowProcA;
+ wc.cbClsExtra = 0;
+ wc.cbWndExtra = 0;
+ wc.hInstance = GetModuleHandleA(0);
+ wc.hIcon = LoadIconA(wc.hInstance, IDI_APPLICATION);
+ wc.hCursor = LoadCursorA(NULL, IDC_ARROW);
+ wc.hbrBackground = GetStockObject(BLACK_BRUSH);
+ wc.lpszMenuName = NULL;
+ wc.lpszClassName = "TestWindowClass";
+ if (!RegisterClassA(&wc))
+ {
+ skip("RegisterClassA failed\n");
+ return;
+ }
+
+ hwnd2=createwindow();
+ hwnd=createwindow();
+
+ if (!hwnd)
+ {
+ skip("Failed to create the main window\n");
+ return;
+ }
+
if (!createdirectdraw())
+ {
+ skip("Failed to create the direct draw object\n");
return;
+ }
test_DirectDrawEnumerateA();
test_DirectDrawEnumerateW();
More information about the wine-cvs
mailing list