From e00840cf57907746f6fa1f0350773af0bcc63bbf Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Wed, 6 Feb 2008 20:38:20 +0100 Subject: [PATCH] winex11: Only update the virtual screen rect once in xinerama_init to minimize race conditions. --- dlls/winex11.drv/xinerama.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/dlls/winex11.drv/xinerama.c b/dlls/winex11.drv/xinerama.c index 782c779be27..ee735e61172 100644 --- a/dlls/winex11.drv/xinerama.c +++ b/dlls/winex11.drv/xinerama.c @@ -138,14 +138,15 @@ void xinerama_init( unsigned int width, unsigned int height ) { MONITORINFOEXW *primary; int i; + RECT rect; wine_tsx11_lock(); - SetRect( &virtual_screen_rect, 0, 0, width, height ); + SetRect( &rect, 0, 0, width, height ); if (root_window != DefaultRootWindow( gdi_display ) || !query_screens()) { - default_monitor.rcWork = default_monitor.rcMonitor = virtual_screen_rect; + default_monitor.rcWork = default_monitor.rcMonitor = rect; nb_monitors = 1; monitors = &default_monitor; } @@ -153,20 +154,21 @@ void xinerama_init( unsigned int width, unsigned int height ) primary = get_primary(); /* coordinates (0,0) have to point to the primary monitor origin */ - OffsetRect( &virtual_screen_rect, -primary->rcMonitor.left, -primary->rcMonitor.top ); + OffsetRect( &rect, -primary->rcMonitor.left, -primary->rcMonitor.top ); for (i = 0; i < nb_monitors; i++) { - OffsetRect( &monitors[i].rcMonitor, virtual_screen_rect.left, virtual_screen_rect.top ); - OffsetRect( &monitors[i].rcWork, virtual_screen_rect.left, virtual_screen_rect.top ); + OffsetRect( &monitors[i].rcMonitor, rect.left, rect.top ); + OffsetRect( &monitors[i].rcWork, rect.left, rect.top ); TRACE( "monitor %p: %s%s\n", index_to_monitor(i), wine_dbgstr_rect(&monitors[i].rcMonitor), (monitors[i].dwFlags & MONITORINFOF_PRIMARY) ? " (primary)" : "" ); } + virtual_screen_rect = rect; screen_width = primary->rcMonitor.right - primary->rcMonitor.left; screen_height = primary->rcMonitor.bottom - primary->rcMonitor.top; TRACE( "virtual size: %s primary size: %dx%d\n", - wine_dbgstr_rect(&virtual_screen_rect), screen_width, screen_height ); + wine_dbgstr_rect(&rect), screen_width, screen_height ); wine_tsx11_unlock(); ClipCursor( NULL ); /* reset the cursor clip rectangle */ -- 2.11.4.GIT