user32,wined3d: move refresh rate fallback to catch all cases

Erik Inge Bolsø knan-wine at anduin.net
Sun Jun 24 09:37:51 CDT 2007


---
 dlls/user32/sysparams.c |   13 ++++++++++++-
 dlls/wined3d/device.c   |   10 +---------
 2 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/dlls/user32/sysparams.c b/dlls/user32/sysparams.c
index c5de419..0a61afb 100644
--- a/dlls/user32/sysparams.c
+++ b/dlls/user32/sysparams.c
@@ -3010,10 +3010,21 @@ LONG WINAPI ChangeDisplaySettingsExA( LPCSTR devname, LPDEVMODEA devmode, HWND h
 LONG WINAPI ChangeDisplaySettingsExW( LPCWSTR devname, LPDEVMODEW devmode, HWND hwnd,
                                       DWORD flags, LPVOID lparam )
 {
+    LONG ret;
+
     /* make sure the desktop window is created before mode changing */
     GetDesktopWindow();
 
-    return USER_Driver->pChangeDisplaySettingsEx( devname, devmode, hwnd, flags, lparam );
+    ret = USER_Driver->pChangeDisplaySettingsEx( devname, devmode, hwnd, flags, lparam );
+    if (ret != DISP_CHANGE_SUCCESSFUL) {
+        if(devmode->dmDisplayFrequency != 0) {
+            WARN("ChangeDisplaySettingsEx failed, retrying without specified refresh rate\n");
+            devmode->dmFields &= ~DM_DISPLAYFREQUENCY;
+            devmode->dmDisplayFrequency = 0;
+            ret = USER_Driver->pChangeDisplaySettingsEx( devname, devmode, hwnd, flags, lparam );
+	}
+    }
+    return ret;
 }
 
 
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index ac418d9..fa4df02 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -2047,15 +2047,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetDisplayMode(IWineD3DDevice *iface, U
 
     ret = ChangeDisplaySettingsExW(NULL, &devmode, NULL, CDS_FULLSCREEN, NULL);
     if (ret != DISP_CHANGE_SUCCESSFUL) {
-        if(devmode.dmDisplayFrequency != 0) {
-            WARN("ChangeDisplaySettingsExW failed, trying without the refresh rate\n");
-            devmode.dmFields &= ~DM_DISPLAYFREQUENCY;
-            devmode.dmDisplayFrequency = 0;
-            ret = ChangeDisplaySettingsExW(NULL, &devmode, NULL, CDS_FULLSCREEN, NULL) != DISP_CHANGE_SUCCESSFUL;
-        }
-        if(ret != DISP_CHANGE_SUCCESSFUL) {
-            return WINED3DERR_NOTAVAILABLE;
-        }
+        return WINED3DERR_NOTAVAILABLE;
     }
 
     /* Store the new values */
-- 
1.4.4.2



More information about the wine-patches mailing list