From: Alexandros Frantzis alexandros.frantzis@collabora.com
Provide current mode information through the gdi_device_manager and let win32u manage the current display settings.
Signed-off-by: Alexandros Frantzis alexandros.frantzis@collabora.com --- dlls/win32u/sysparams.c | 4 ++++ dlls/winewayland.drv/display.c | 12 ++++++++++++ dlls/winewayland.drv/waylanddrv.h | 2 ++ dlls/winewayland.drv/waylanddrv_main.c | 1 + include/wine/gdi_driver.h | 1 + 5 files changed, 20 insertions(+)
diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c index 2c423e2fe45..5b720a817d3 100644 --- a/dlls/win32u/sysparams.c +++ b/dlls/win32u/sysparams.c @@ -1502,6 +1502,10 @@ static void add_mode( const DEVMODEW *mode, DWORD target, void *param ) if (!read_adapter_mode( ctx->adapter_key, ENUM_REGISTRY_SETTINGS, &stored )) write_adapter_mode( ctx->adapter_key, ENUM_REGISTRY_SETTINGS, mode ); } + else if (target == GDI_MODE_CURRENT) + { + write_adapter_mode( ctx->adapter_key, ENUM_CURRENT_SETTINGS, mode ); + } else if (target == GDI_MODE_NEXT && write_adapter_mode( ctx->adapter_key, ctx->mode_count, mode )) { diff --git a/dlls/winewayland.drv/display.c b/dlls/winewayland.drv/display.c index b3f875dd8af..cd009c54a7a 100644 --- a/dlls/winewayland.drv/display.c +++ b/dlls/winewayland.drv/display.c @@ -134,6 +134,7 @@ static void wayland_add_device_modes(const struct gdi_device_manager *device_man mode.dmPosition.x = 0; mode.dmPosition.y = 0; device_manager->add_mode(&mode, GDI_MODE_REGISTRY_IF_EMPTY, param); + device_manager->add_mode(&mode, GDI_MODE_CURRENT, param); }
/*********************************************************************** @@ -164,3 +165,14 @@ BOOL WAYLAND_UpdateDisplayDevices(const struct gdi_device_manager *device_manage
return TRUE; } + +/*********************************************************************** + * GetCurrentDisplaySettings (WAYLAND.@) + * + */ +BOOL WAYLAND_GetCurrentDisplaySettings(LPCWSTR name, BOOL is_primary, LPDEVMODEW devmode) +{ + /* We provide current mode information through the gdi_device_manager and + * let win32u manage the current display settings. */ + return FALSE; +} diff --git a/dlls/winewayland.drv/waylanddrv.h b/dlls/winewayland.drv/waylanddrv.h index 8458ed17df2..941b4672d0d 100644 --- a/dlls/winewayland.drv/waylanddrv.h +++ b/dlls/winewayland.drv/waylanddrv.h @@ -88,6 +88,8 @@ void wayland_output_destroy(struct wayland_output *output) DECLSPEC_HIDDEN; * USER driver functions */
+BOOL WAYLAND_GetCurrentDisplaySettings(LPCWSTR name, BOOL is_primary, + LPDEVMODEW devmode) DECLSPEC_HIDDEN; BOOL WAYLAND_UpdateDisplayDevices(const struct gdi_device_manager *device_manager, BOOL force, void *param) DECLSPEC_HIDDEN;
diff --git a/dlls/winewayland.drv/waylanddrv_main.c b/dlls/winewayland.drv/waylanddrv_main.c index a9297edc500..35e7ecd3a6d 100644 --- a/dlls/winewayland.drv/waylanddrv_main.c +++ b/dlls/winewayland.drv/waylanddrv_main.c @@ -31,6 +31,7 @@
static const struct user_driver_funcs waylanddrv_funcs = { + .pGetCurrentDisplaySettings = WAYLAND_GetCurrentDisplaySettings, .pUpdateDisplayDevices = WAYLAND_UpdateDisplayDevices, };
diff --git a/include/wine/gdi_driver.h b/include/wine/gdi_driver.h index 53607bbcc4b..38fb01fe953 100644 --- a/include/wine/gdi_driver.h +++ b/include/wine/gdi_driver.h @@ -263,6 +263,7 @@ struct gdi_monitor
#define GDI_MODE_NEXT 0 #define GDI_MODE_REGISTRY_IF_EMPTY 1 +#define GDI_MODE_CURRENT 2
struct gdi_device_manager {