From: R��mi Bernon rbernon@codeweavers.com
--- dlls/win32u/sysparams.c | 22 +++++++++++++--------- dlls/winemac.drv/display.c | 3 --- dlls/winex11.drv/display.c | 2 -- 3 files changed, 13 insertions(+), 14 deletions(-)
diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c index 0a7a852cf12..a3abc8948de 100644 --- a/dlls/win32u/sysparams.c +++ b/dlls/win32u/sysparams.c @@ -1536,7 +1536,7 @@ static BOOL update_display_cache_from_registry(void) return ret; }
-static BOOL update_display_cache(void) +static BOOL update_display_cache( BOOL force ) { HWINSTA winstation = NtUserGetProcessWindowStation(); RECT old_virtual_rect = {0}, new_virtual_rect = {0}; @@ -1558,14 +1558,17 @@ static BOOL update_display_cache(void) LIST_FOR_EACH_ENTRY( monitor, &monitors, struct monitor, entry ) union_rect( &old_virtual_rect, &old_virtual_rect, &monitor->rc_monitor );
- user_driver->pUpdateDisplayDevices( &device_manager, FALSE, &ctx ); - release_display_manager_ctx( &ctx ); - - if (update_display_cache_from_registry()) goto done; - if (ctx.gpu_count) + if (!force) { - ERR( "driver reported devices, but we failed to read them\n" ); - return FALSE; + user_driver->pUpdateDisplayDevices( &device_manager, FALSE, &ctx ); + release_display_manager_ctx( &ctx ); + + if (update_display_cache_from_registry()) goto done; + if (ctx.gpu_count) + { + ERR( "driver reported devices, but we failed to read them\n" ); + return FALSE; + } }
if (!user_driver->pUpdateDisplayDevices( &device_manager, TRUE, &ctx )) @@ -1623,7 +1626,7 @@ done:
static BOOL lock_display_devices(void) { - if (!update_display_cache()) return FALSE; + if (!update_display_cache( FALSE )) return FALSE; pthread_mutex_lock( &display_lock ); return TRUE; } @@ -2453,6 +2456,7 @@ static LONG apply_display_settings( const WCHAR *devname, const DEVMODEW *devmod SMTO_ABORTIFHUNG, 2000, FALSE );
free( displays ); + if (!ret && !update_display_cache( TRUE )) WARN( "Failed to update display cache after mode change.\n" ); return ret; }
diff --git a/dlls/winemac.drv/display.c b/dlls/winemac.drv/display.c index 7da902c649f..768a0a3587a 100644 --- a/dlls/winemac.drv/display.c +++ b/dlls/winemac.drv/display.c @@ -832,10 +832,7 @@ LONG macdrv_ChangeDisplaySettings(LPDEVMODEW displays, HWND hwnd, DWORD flags, L ret = DISP_CHANGE_BADMODE; } else if (macdrv_set_display_mode(&macdrv_displays[0], best_display_mode)) - { - macdrv_init_display_devices(TRUE); send_message(NtUserGetDesktopWindow(), WM_MACDRV_UPDATE_DESKTOP_RECT, 0, 0); - } else { WARN("Failed to set display mode\n"); diff --git a/dlls/winex11.drv/display.c b/dlls/winex11.drv/display.c index b80ec825980..78ab5dcf8be 100644 --- a/dlls/winex11.drv/display.c +++ b/dlls/winex11.drv/display.c @@ -418,8 +418,6 @@ LONG X11DRV_ChangeDisplaySettings( LPDEVMODEW displays, HWND hwnd, DWORD flags, ret = apply_display_settings( displays, ids, FALSE ); if (ret == DISP_CHANGE_SUCCESSFUL) ret = apply_display_settings( displays, ids, TRUE ); - if (ret == DISP_CHANGE_SUCCESSFUL) - X11DRV_DisplayDevices_Init(TRUE);
done: free( ids );