* Source cleanup. 
* SetMode adding a check see if it same reslution or not if it not same we change it.
* SetMode adding correct check for hal or hel. choice hal if it the drv provide it.
Modified: trunk/reactos/lib/ddraw/hal/ddraw_hal.c
Modified: trunk/reactos/lib/ddraw/main/ddraw_main.c

Modified: trunk/reactos/lib/ddraw/hal/ddraw_hal.c
--- trunk/reactos/lib/ddraw/hal/ddraw_hal.c	2005-11-01 13:52:22 UTC (rev 18930)
+++ trunk/reactos/lib/ddraw/hal/ddraw_hal.c	2005-11-01 14:46:34 UTC (rev 18931)
@@ -447,24 +447,19 @@
     return  FlipGdi.ddRVal;    
 }
 
-HRESULT Hal_DirectDraw_SetDisplayMode (LPDIRECTDRAW7 iface, DWORD dwWidth, DWORD dwHeight, 
-                                                    DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags)
-{
-    DX_STUB;
-}
 
-#if 0
+
 HRESULT Hal_DirectDraw_SetDisplayMode (LPDIRECTDRAW7 iface, DWORD dwWidth, DWORD dwHeight, 
                                                     DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags)
 {
-    IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
-  
+    IDirectDrawImpl* This = (IDirectDrawImpl*)iface;	
+	DDHAL_SETMODEDATA mode;
+
     if (!(This->DirectDrawGlobal.lpDDCBtmp->HALDD.dwFlags & DDHAL_CB32_SETMODE)) 
     {
         return DDERR_NODRIVERSUPPORT;
     }
-
-    DDHAL_SETMODEDATA mode;
+    
     mode.lpDD = &This->DirectDrawGlobal;
     mode.ddRVal = DDERR_NODRIVERSUPPORT;
 
@@ -476,11 +471,8 @@
     {
         return DDERR_NODRIVERSUPPORT;
     } 
-
-	BOOL dummy;
-	DdReenableDirectDrawObject(&This->DirectDrawGlobal, &dummy);
-    
+	   
 	return mode.ddRVal;
 }
-#endif
 
+

Modified: trunk/reactos/lib/ddraw/main/ddraw_main.c
--- trunk/reactos/lib/ddraw/main/ddraw_main.c	2005-11-01 13:52:22 UTC (rev 18930)
+++ trunk/reactos/lib/ddraw/main/ddraw_main.c	2005-11-01 14:46:34 UTC (rev 18931)
@@ -83,20 +83,35 @@
                                                                 DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags)
 {
     IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
+	BOOL dummy = TRUE;
+	DWORD ret;
+	
+	/* FIXME check the refresrate if it same if it not same do the mode switch */
+	if ((This->DirectDrawGlobal.vmiData.dwDisplayHeight == dwHeight) && 
+		(This->DirectDrawGlobal.vmiData.dwDisplayWidth == dwWidth)  && 
+		(This->DirectDrawGlobal.vmiData.ddpfDisplay.dwRGBBitCount == dwBPP))  
+		{
+          
+		  return DD_OK;
+		}
 
-    /* FIXME implement hal setMode */
-    if(Hal_DirectDraw_SetDisplayMode(iface, dwWidth, dwHeight, 
-                                            dwBPP, dwRefreshRate, dwFlags) == DD_OK)
-    {
-        return DD_OK;
+	/* Check use the Hal or Hel for SetMode */
+	if (This->DirectDrawGlobal.lpDDCBtmp->HALDD.dwFlags & DDHAL_CB32_SETMODE)
+	{
+		ret = Hal_DirectDraw_SetDisplayMode(iface, dwWidth, dwHeight, dwBPP, dwRefreshRate, dwFlags);       
     }    
-
-    DWORD ret = Hel_DirectDraw_SetDisplayMode(iface, dwWidth, dwHeight, dwBPP, dwRefreshRate, dwFlags);
-
-	BOOL dummy;
-	DdReenableDirectDrawObject(&This->DirectDrawGlobal, &dummy);
-
-    return ret; 
+	else 
+	{
+		ret = Hel_DirectDraw_SetDisplayMode(iface, dwWidth, dwHeight, dwBPP, dwRefreshRate, dwFlags);
+	}
+	
+	if (ret == DD_OK)
+	{
+		DdReenableDirectDrawObject(&This->DirectDrawGlobal, &dummy);
+		/* FIXME fill the This->DirectDrawGlobal.vmiData right */
+	}
+  
+	return ret;
 }
 
 ULONG WINAPI Main_DirectDraw_AddRef (LPDIRECTDRAW7 iface)