user32, wined3d: move refresh rate fallback to catch all cases (resend)
Erik Inge Bolsø
knan-wine at anduin.net
Mon Jan 14 15:06:27 CST 2008
If requesting a refresh rate that isn't available, but a better one is,
ChangeDisplaySettings fails and some games fail to launch. This does
not seem to match WinXP behaviour with the same graphics card + lcd
monitor combination.
Pushing the refresh rate retry up a level fixes my case (1024x768 at 50Hz,
hardcoded).
(http://appdb.winehq.org/objectManager.php?sClass=version&iId=5618)
---
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