Alexandre Julliard : winex11: Only update the virtual screen rect once in xinerama_init to minimize race conditions .

Alexandre Julliard julliard at winehq.org
Thu Feb 7 07:59:26 CST 2008


Module: wine
Branch: master
Commit: e00840cf57907746f6fa1f0350773af0bcc63bbf
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=e00840cf57907746f6fa1f0350773af0bcc63bbf

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Wed Feb  6 20:38:20 2008 +0100

winex11: Only update the virtual screen rect once in xinerama_init to minimize race conditions.

---

 dlls/winex11.drv/xinerama.c |   14 ++++++++------
 1 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/dlls/winex11.drv/xinerama.c b/dlls/winex11.drv/xinerama.c
index 782c779..ee735e6 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 */




More information about the wine-cvs mailing list