From: Rémi Bernon rbernon@codeweavers.com
--- dlls/win32u/sysparams.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c index fefd836d4f5..cc27f3dc7f2 100644 --- a/dlls/win32u/sysparams.c +++ b/dlls/win32u/sysparams.c @@ -158,6 +158,7 @@ static struct list monitors = LIST_INIT(monitors); static INT64 last_query_display_time; static pthread_mutex_t display_lock = PTHREAD_MUTEX_INITIALIZER;
+static BOOL emulate_modeset; BOOL decorated_mode = TRUE; UINT64 thunk_lock_callback = 0;
@@ -1655,8 +1656,7 @@ static DEVMODEW *get_virtual_modes( const DEVMODEW *current, const DEVMODEW *ini static void add_modes( const DEVMODEW *current, UINT modes_count, const DEVMODEW *modes, void *param ) { struct device_manager_ctx *ctx = param; - DEVMODEW dummy, detached = *current, virtual, *virtual_modes = NULL; - const DEVMODEW physical = modes_count == 1 ? *modes : *current; + DEVMODEW dummy, physical, detached = *current, virtual, *virtual_modes = NULL; struct source *source; UINT virtual_count;
@@ -1665,6 +1665,13 @@ static void add_modes( const DEVMODEW *current, UINT modes_count, const DEVMODEW assert( !list_empty( &sources ) ); source = LIST_ENTRY( list_tail( &sources ), struct source, entry );
+ if (emulate_modeset) + { + modes = current; + modes_count = 1; + } + + physical = modes_count == 1 ? *modes : *current; if (ctx->is_primary) ctx->primary = *current;
detached.dmPelsWidth = 0; @@ -3851,7 +3858,7 @@ static LONG apply_display_settings( struct source *target, const DEVMODEW *devmo place_all_displays( displays, primary_name );
/* use the default implementation in virtual desktop mode */ - if (is_virtual_desktop()) ret = DISP_CHANGE_SUCCESSFUL; + if (is_virtual_desktop() || emulate_modeset) ret = DISP_CHANGE_SUCCESSFUL; else ret = user_driver->pChangeDisplaySettings( displays, primary_name, hwnd, flags, lparam );
if (ret == DISP_CHANGE_SUCCESSFUL) @@ -5423,6 +5430,8 @@ void sysparams_init(void) grab_fullscreen = IS_OPTION_TRUE( buffer[0] ); if (!get_config_key( hkey, appkey, "Decorated", buffer, sizeof(buffer) )) decorated_mode = IS_OPTION_TRUE( buffer[0] ); + if (!get_config_key( hkey, appkey, "EmulateModeset", buffer, sizeof(buffer) )) + emulate_modeset = IS_OPTION_TRUE( buffer[0] );
#undef IS_OPTION_TRUE