[2/3] user32: Initialize more fields in the DEVMODE structure
Dmitry Timoshkov
dmitry at codeweavers.com
Thu Nov 1 01:22:41 CDT 2007
Hello,
Changelog:
[2/3] user32: Initialize more fields in the DEVMODE structure.
---
dlls/user32/sysparams.c | 24 ++++++++++++++++--------
dlls/winex11.drv/settings.c | 18 ++++++++++++++++--
2 files changed, 32 insertions(+), 10 deletions(-)
diff --git a/dlls/user32/sysparams.c b/dlls/user32/sysparams.c
index a72108a..ad5704a 100644
--- a/dlls/user32/sysparams.c
+++ b/dlls/user32/sysparams.c
@@ -2985,7 +2985,6 @@ LONG WINAPI ChangeDisplaySettingsW( LPDEVMODEW devmode, DWORD flags )
LONG WINAPI ChangeDisplaySettingsExA( LPCSTR devname, LPDEVMODEA devmode, HWND hwnd,
DWORD flags, LPVOID lparam )
{
- DEVMODEW devmodeW;
LONG ret;
UNICODE_STRING nameW;
@@ -2994,13 +2993,11 @@ LONG WINAPI ChangeDisplaySettingsExA( LPCSTR devname, LPDEVMODEA devmode, HWND h
if (devmode)
{
- devmodeW.dmBitsPerPel = devmode->dmBitsPerPel;
- devmodeW.dmPelsHeight = devmode->dmPelsHeight;
- devmodeW.dmPelsWidth = devmode->dmPelsWidth;
- devmodeW.dmDisplayFlags = devmode->dmDisplayFlags;
- devmodeW.dmDisplayFrequency = devmode->dmDisplayFrequency;
- devmodeW.dmFields = devmode->dmFields;
- ret = ChangeDisplaySettingsExW(nameW.Buffer, &devmodeW, hwnd, flags, lparam);
+ DEVMODEW *devmodeW;
+
+ devmodeW = GdiConvertToDevmodeW(devmode);
+ ret = ChangeDisplaySettingsExW(nameW.Buffer, devmodeW, hwnd, flags, lparam);
+ HeapFree(GetProcessHeap(), 0, devmodeW);
}
else
{
@@ -3063,12 +3060,23 @@ BOOL WINAPI EnumDisplaySettingsExA(LPCSTR lpszDeviceName, DWORD iModeNum,
ret = EnumDisplaySettingsExW(nameW.Buffer,iModeNum,&devmodeW,dwFlags);
if (ret)
{
+ lpDevMode->dmSize = sizeof(*lpDevMode);
+ lpDevMode->dmSpecVersion = devmodeW.dmSpecVersion;
+ lpDevMode->dmDriverVersion = devmodeW.dmDriverVersion;
+ WideCharToMultiByte(CP_ACP, 0, devmodeW.dmDeviceName, -1,
+ (LPSTR)lpDevMode->dmDeviceName, CCHDEVICENAME, NULL, NULL);
+ lpDevMode->dmDriverExtra = 0; /* FIXME */
lpDevMode->dmBitsPerPel = devmodeW.dmBitsPerPel;
lpDevMode->dmPelsHeight = devmodeW.dmPelsHeight;
lpDevMode->dmPelsWidth = devmodeW.dmPelsWidth;
lpDevMode->dmDisplayFlags = devmodeW.dmDisplayFlags;
lpDevMode->dmDisplayFrequency = devmodeW.dmDisplayFrequency;
lpDevMode->dmFields = devmodeW.dmFields;
+
+ lpDevMode->dmPosition.x = devmodeW.dmPosition.x;
+ lpDevMode->dmPosition.y = devmodeW.dmPosition.y;
+ lpDevMode->dmDisplayOrientation = devmodeW.dmDisplayOrientation;
+ lpDevMode->dmDisplayFixedOutput = devmodeW.dmDisplayFixedOutput;
}
if (lpszDeviceName) RtlFreeUnicodeString(&nameW);
return ret;
diff --git a/dlls/winex11.drv/settings.c b/dlls/winex11.drv/settings.c
index cc6dd2c..a28fce6 100644
--- a/dlls/winex11.drv/settings.c
+++ b/dlls/winex11.drv/settings.c
@@ -165,11 +165,25 @@ void X11DRV_Settings_Init(void)
*/
BOOL X11DRV_EnumDisplaySettingsEx( LPCWSTR name, DWORD n, LPDEVMODEW devmode, DWORD flags)
{
- DWORD dwBpp = screen_depth;
+ static const WCHAR dev_name[CCHDEVICENAME] =
+ { 'W','i','n','e',' ','X','1','1',' ','d','r','i','v','e','r',0 };
+ DWORD dwBpp;
+
+ dwBpp = screen_depth;
if (dwBpp == 24) dwBpp = 32;
+
+ devmode->dmSize = sizeof(DEVMODEW);
+ devmode->dmSpecVersion = MAKEWORD(1,4);
+ devmode->dmDriverVersion = MAKEWORD(1,4);
+ memcpy(devmode->dmDeviceName, dev_name, sizeof(dev_name));
+ devmode->dmDriverExtra = 0;
devmode->dmDisplayFlags = 0;
devmode->dmDisplayFrequency = 0;
- devmode->dmSize = sizeof(DEVMODEW);
+ devmode->dmPosition.x = 0;
+ devmode->dmPosition.y = 0;
+ devmode->dmDisplayOrientation = 0;
+ devmode->dmDisplayFixedOutput = 0;
+
if (n == ENUM_CURRENT_SETTINGS)
{
TRACE("mode %d (current) -- getting current mode (%s)\n", n, handler_name);
--
1.5.3.4
More information about the wine-patches
mailing list