Module: wine Branch: master Commit: 38bef31fb6aaf13ca78a92a0005d4f20e3a11826 URL: https://gitlab.winehq.org/wine/wine/-/commit/38bef31fb6aaf13ca78a92a0005d4f2...
Author: Rémi Bernon rbernon@codeweavers.com Date: Thu Oct 20 11:12:55 2022 +0200
win32u: Read mode from the registry if GetCurrentDisplaySettings fails.
---
dlls/win32u/driver.c | 2 +- dlls/win32u/sysparams.c | 24 ++++++++++++++++++++++-- 2 files changed, 23 insertions(+), 3 deletions(-)
diff --git a/dlls/win32u/driver.c b/dlls/win32u/driver.c index e7dda4a5cf4..557d555d673 100644 --- a/dlls/win32u/driver.c +++ b/dlls/win32u/driver.c @@ -761,7 +761,7 @@ static LONG nulldrv_ChangeDisplaySettings( LPDEVMODEW displays, LPCWSTR primary_
static BOOL nulldrv_GetCurrentDisplaySettings( LPCWSTR name, BOOL is_primary, LPDEVMODEW mode ) { - return FALSE; + return FALSE; /* use default implementation */ }
static BOOL nulldrv_UpdateDisplayDevices( const struct gdi_device_manager *manager, BOOL force, void *param ) diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c index 63661e0e3aa..376487b6a63 100644 --- a/dlls/win32u/sysparams.c +++ b/dlls/win32u/sysparams.c @@ -506,7 +506,26 @@ static BOOL adapter_set_registry_settings( const struct adapter *adapter, const static BOOL adapter_get_current_settings( const struct adapter *adapter, DEVMODEW *mode ) { BOOL is_primary = !!(adapter->dev.state_flags & DISPLAY_DEVICE_PRIMARY_DEVICE); - return user_driver->pGetCurrentDisplaySettings( adapter->dev.device_name, is_primary, mode ); + HANDLE mutex; + HKEY hkey; + BOOL ret; + + if ((ret = user_driver->pGetCurrentDisplaySettings( adapter->dev.device_name, is_primary, mode ))) return TRUE; + + /* default implementation: read current display settings from the registry. */ + + mutex = get_display_device_init_mutex(); + + if (!config_key && !(config_key = reg_open_key( NULL, config_keyW, sizeof(config_keyW) ))) ret = FALSE; + else if (!(hkey = reg_open_key( config_key, adapter->config_key, lstrlenW( adapter->config_key ) * sizeof(WCHAR) ))) ret = FALSE; + else + { + ret = read_adapter_mode( hkey, ENUM_CURRENT_SETTINGS, mode ); + NtClose( hkey ); + } + + release_display_device_init_mutex( mutex ); + return ret; }
static BOOL adapter_set_current_settings( const struct adapter *adapter, const DEVMODEW *mode ) @@ -2511,7 +2530,8 @@ static LONG apply_display_settings( const WCHAR *devname, const DEVMODEW *devmod if ((adapter = find_adapter( NULL ))) { DEVMODEW current_mode = {.dmSize = sizeof(DEVMODEW)}; - adapter_get_current_settings( adapter, ¤t_mode ); + + if (!adapter_get_current_settings( adapter, ¤t_mode )) WARN( "Failed to get primary adapter current display settings.\n" ); adapter_release( adapter );
send_notify_message( NtUserGetDesktopWindow(), WM_DISPLAYCHANGE, current_mode.dmBitsPerPel,