Rémi Bernon : win32u: Set generic DEVMODEW fields in NtUserEnumDisplaySettings.
Alexandre Julliard
julliard at winehq.org
Wed Jul 6 16:55:53 CDT 2022
Module: wine
Branch: master
Commit: 4ce220e4e837186217e69537d7888d8d5bf6dde5
URL: https://source.winehq.org/git/wine.git/?a=commit;h=4ce220e4e837186217e69537d7888d8d5bf6dde5
Author: Rémi Bernon <rbernon at codeweavers.com>
Date: Sun Jun 26 17:48:42 2022 +0200
win32u: Set generic DEVMODEW fields in NtUserEnumDisplaySettings.
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
dlls/win32u/sysparams.c | 27 +++++++++++++++------------
dlls/wineandroid.drv/init.c | 8 --------
dlls/winemac.drv/display.c | 9 ---------
dlls/winex11.drv/display.c | 25 ++++++++-----------------
4 files changed, 23 insertions(+), 46 deletions(-)
diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c
index 4528454f5b9..fa82566e24c 100644
--- a/dlls/win32u/sysparams.c
+++ b/dlls/win32u/sysparams.c
@@ -1926,14 +1926,14 @@ LONG WINAPI NtUserChangeDisplaySettings( UNICODE_STRING *devname, DEVMODEW *devm
/***********************************************************************
* NtUserEnumDisplaySettings (win32u.@)
*/
-BOOL WINAPI NtUserEnumDisplaySettings( UNICODE_STRING *device, DWORD mode,
- DEVMODEW *dev_mode, DWORD flags )
+BOOL WINAPI NtUserEnumDisplaySettings( UNICODE_STRING *device, DWORD index, DEVMODEW *devmode, DWORD flags )
{
+ static const WCHAR wine_display_driverW[] = {'W','i','n','e',' ','D','i','s','p','l','a','y',' ','D','r','i','v','e','r',0};
WCHAR device_name[CCHDEVICENAME];
struct adapter *adapter;
BOOL ret;
- TRACE( "%s %#x %p %#x\n", debugstr_us(device), mode, dev_mode, flags );
+ TRACE( "device %s, index %#x, devmode %p, flags %#x\n", debugstr_us(device), index, devmode, flags );
if (!lock_display_devices()) return FALSE;
if ((adapter = find_adapter( device ))) lstrcpyW( device_name, adapter->dev.device_name );
@@ -1944,15 +1944,18 @@ BOOL WINAPI NtUserEnumDisplaySettings( UNICODE_STRING *device, DWORD mode,
return FALSE;
}
- ret = user_driver->pEnumDisplaySettingsEx( device_name, mode, dev_mode, flags );
- if (ret)
- TRACE( "device:%s mode index:%#x position:(%d,%d) resolution:%ux%u frequency:%uHz "
- "depth:%ubits orientation:%#x.\n", debugstr_w(device_name), mode,
- dev_mode->dmPosition.x, dev_mode->dmPosition.y, dev_mode->dmPelsWidth,
- dev_mode->dmPelsHeight, dev_mode->dmDisplayFrequency, dev_mode->dmBitsPerPel,
- dev_mode->dmDisplayOrientation );
- else
- WARN( "Failed to query %s display settings.\n", wine_dbgstr_w(device_name) );
+ lstrcpynW( devmode->dmDeviceName, wine_display_driverW, ARRAY_SIZE(devmode->dmDeviceName) );
+ devmode->dmSpecVersion = DM_SPECVERSION;
+ devmode->dmDriverVersion = DM_SPECVERSION;
+ devmode->dmSize = offsetof(DEVMODEW, dmICMMethod);
+ memset( &devmode->dmDriverExtra, 0, devmode->dmSize - offsetof(DEVMODEW, dmDriverExtra) );
+
+ ret = user_driver->pEnumDisplaySettingsEx( device_name, index, devmode, flags );
+
+ if (!ret) WARN( "Failed to query %s display settings.\n", debugstr_w(device_name) );
+ else TRACE( "position %dx%d, resolution %ux%u, frequency %u, depth %u, orientation %#x.\n",
+ devmode->dmPosition.x, devmode->dmPosition.y, devmode->dmPelsWidth, devmode->dmPelsHeight,
+ devmode->dmDisplayFrequency, devmode->dmBitsPerPel, devmode->dmDisplayOrientation );
return ret;
}
diff --git a/dlls/wineandroid.drv/init.c b/dlls/wineandroid.drv/init.c
index 5d1c81a77bf..e2cebb974c3 100644
--- a/dlls/wineandroid.drv/init.c
+++ b/dlls/wineandroid.drv/init.c
@@ -303,14 +303,6 @@ BOOL ANDROID_UpdateDisplayDevices( const struct gdi_device_manager *device_manag
*/
BOOL ANDROID_EnumDisplaySettingsEx( LPCWSTR name, DWORD n, LPDEVMODEW devmode, DWORD flags )
{
- static const WCHAR dev_name[CCHDEVICENAME] =
- { 'W','i','n','e',' ','A','n','d','r','o','i','d',' ','d','r','i','v','e','r',0 };
-
- devmode->dmSize = offsetof( DEVMODEW, dmICMMethod );
- devmode->dmSpecVersion = DM_SPECVERSION;
- devmode->dmDriverVersion = DM_SPECVERSION;
- memcpy( devmode->dmDeviceName, dev_name, sizeof(dev_name) );
- devmode->dmDriverExtra = 0;
devmode->u2.dmDisplayFlags = 0;
devmode->dmDisplayFrequency = 0;
devmode->u1.s2.dmPosition.x = 0;
diff --git a/dlls/winemac.drv/display.c b/dlls/winemac.drv/display.c
index 0507acae1a9..191dc1f789b 100644
--- a/dlls/winemac.drv/display.c
+++ b/dlls/winemac.drv/display.c
@@ -1044,8 +1044,6 @@ better:
*/
BOOL macdrv_EnumDisplaySettingsEx(LPCWSTR devname, DWORD mode, DEVMODEW *devmode, DWORD flags)
{
- static const WCHAR dev_name[CCHDEVICENAME] =
- { 'W','i','n','e',' ','M','a','c',' ','d','r','i','v','e','r',0 };
struct macdrv_display *displays = NULL;
int num_displays;
CGDisplayModeRef display_mode;
@@ -1058,13 +1056,6 @@ BOOL macdrv_EnumDisplaySettingsEx(LPCWSTR devname, DWORD mode, DEVMODEW *devmode
init_original_display_mode();
- memcpy(devmode->dmDeviceName, dev_name, sizeof(dev_name));
- devmode->dmSpecVersion = DM_SPECVERSION;
- devmode->dmDriverVersion = DM_SPECVERSION;
- devmode->dmSize = FIELD_OFFSET(DEVMODEW, dmICMMethod);
- devmode->dmDriverExtra = 0;
- memset(&devmode->dmFields, 0, devmode->dmSize - FIELD_OFFSET(DEVMODEW, dmFields));
-
if (mode == ENUM_REGISTRY_SETTINGS)
{
TRACE("mode %d (registry) -- getting default mode\n", mode);
diff --git a/dlls/winex11.drv/display.c b/dlls/winex11.drv/display.c
index 31f73898897..740e018247b 100644
--- a/dlls/winex11.drv/display.c
+++ b/dlls/winex11.drv/display.c
@@ -464,9 +464,7 @@ static DWORD get_display_depth(ULONG_PTR display_id)
*/
BOOL X11DRV_EnumDisplaySettingsEx( LPCWSTR name, DWORD n, LPDEVMODEW devmode, DWORD flags)
{
- static const WCHAR dev_name[CCHDEVICENAME] =
- { 'W','i','n','e',' ','X','1','1',' ','d','r','i','v','e','r',0 };
- DEVMODEW *modes;
+ DEVMODEW *modes, mode;
UINT mode_count;
ULONG_PTR id;
@@ -477,21 +475,20 @@ BOOL X11DRV_EnumDisplaySettingsEx( LPCWSTR name, DWORD n, LPDEVMODEW devmode, DW
ERR("Failed to get %s registry display settings.\n", wine_dbgstr_w(name));
return FALSE;
}
- goto done;
+ return TRUE;
}
if (n == ENUM_CURRENT_SETTINGS)
{
- if (!settings_handler.get_id(name, &id) || !settings_handler.get_current_mode(id, devmode))
+ if (!settings_handler.get_id( name, &id ) || !settings_handler.get_current_mode( id, &mode ))
{
ERR("Failed to get %s current display settings.\n", wine_dbgstr_w(name));
return FALSE;
}
- if (!is_detached_mode(devmode))
- devmode->dmBitsPerPel = get_display_depth(id);
-
- goto done;
+ memcpy( &devmode->dmFields, &mode.dmFields, devmode->dmSize - offsetof(DEVMODEW, dmFields) );
+ if (!is_detached_mode( devmode )) devmode->dmBitsPerPel = get_display_depth( id );
+ return TRUE;
}
pthread_mutex_lock( &settings_mutex );
@@ -522,16 +519,10 @@ BOOL X11DRV_EnumDisplaySettingsEx( LPCWSTR name, DWORD n, LPDEVMODEW devmode, DW
return FALSE;
}
- memcpy(devmode, (BYTE *)cached_modes + (sizeof(*cached_modes) + cached_modes[0].dmDriverExtra) * n, sizeof(*devmode));
+ mode = *(DEVMODEW *)((BYTE *)cached_modes + (sizeof(*cached_modes) + cached_modes[0].dmDriverExtra) * n);
pthread_mutex_unlock( &settings_mutex );
-done:
- /* Set generic fields */
- devmode->dmSize = FIELD_OFFSET(DEVMODEW, dmICMMethod);
- devmode->dmDriverExtra = 0;
- devmode->dmSpecVersion = DM_SPECVERSION;
- devmode->dmDriverVersion = DM_SPECVERSION;
- lstrcpyW(devmode->dmDeviceName, dev_name);
+ memcpy( &devmode->dmFields, &mode.dmFields, devmode->dmSize - offsetof(DEVMODEW, dmFields) );
return TRUE;
}
More information about the wine-cvs
mailing list