From: Rémi Bernon rbernon@codeweavers.com
--- dlls/winex11.drv/display.c | 5 +++++ dlls/winex11.drv/xrandr.c | 5 ----- dlls/winex11.drv/xvidmode.c | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/dlls/winex11.drv/display.c b/dlls/winex11.drv/display.c index 6cf0afcbd23..f891de4ba21 100644 --- a/dlls/winex11.drv/display.c +++ b/dlls/winex11.drv/display.c @@ -238,6 +238,8 @@ LONG X11DRV_ChangeDisplaySettings( LPDEVMODEW displays, LPCWSTR primary_name, HW if ((ret = get_full_mode( ids[count], mode, modes + count ))) goto done; }
+ XGrabServer( gdi_display ); + /* Detach displays first to free up CRTCs */ TRACE( "Using %s\n", settings_handler.name ); for (UINT i = 0; !ret && i < count; i++) @@ -253,6 +255,9 @@ LONG X11DRV_ChangeDisplaySettings( LPDEVMODEW displays, LPCWSTR primary_name, HW ret = settings_handler.set_current_mode( ids[i], modes + i ); }
+ XFlush( gdi_display ); + XUngrabServer( gdi_display ); + done: free( modes ); free( ids ); diff --git a/dlls/winex11.drv/xrandr.c b/dlls/winex11.drv/xrandr.c index 8b560d1d0f5..81932c3fc03 100644 --- a/dlls/winex11.drv/xrandr.c +++ b/dlls/winex11.drv/xrandr.c @@ -390,7 +390,6 @@ static LONG xrandr10_set_current_mode( x11drv_settings_id id, const struct x11dr if (stat != RRSetConfigSuccess) return DISP_CHANGE_FAILED;
- XFlush( gdi_display ); return DISP_CHANGE_SUCCESSFUL; }
@@ -1580,8 +1579,6 @@ static LONG xrandr14_set_current_mode( x11drv_settings_id id, const struct x11dr if (!screen_resources) return ret;
- XGrabServer( gdi_display ); - output_info = pXRRGetOutputInfo( gdi_display, screen_resources, output ); if (!output_info || output_info->connection != RR_Connected) goto done; @@ -1656,8 +1653,6 @@ static LONG xrandr14_set_current_mode( x11drv_settings_id id, const struct x11dr ret = DISP_CHANGE_SUCCESSFUL;
done: - XUngrabServer( gdi_display ); - XFlush( gdi_display ); if (crtc_info) pXRRFreeCrtcInfo( crtc_info ); if (output_info) diff --git a/dlls/winex11.drv/xvidmode.c b/dlls/winex11.drv/xvidmode.c index 40f0a4d867d..fab0c4f135f 100644 --- a/dlls/winex11.drv/xvidmode.c +++ b/dlls/winex11.drv/xvidmode.c @@ -220,7 +220,7 @@ static LONG xf86vm_set_current_mode( x11drv_settings_id id, const struct x11drv_ #else XWarpPointer(gdi_display, None, DefaultRootWindow(gdi_display), 0, 0, 0, 0, 0, 0); #endif - XFlush(gdi_display); + return DISP_CHANGE_SUCCESSFUL; }