[Xquartz-changes] xserver: Branch 'master'

Jeremy Huddleston jeremyhu at freedesktop.org
Fri Dec 3 17:31:28 PST 2010


 hw/xquartz/quartzRandR.c |   23 +++++++++++++----------
 1 file changed, 13 insertions(+), 10 deletions(-)

New commits:
commit 714b68d9e5bf624a6703f168e0f7dc980e88e8c0
Author: Jeremy Huddleston <jeremyhu at apple.com>
Date:   Fri Dec 3 17:27:44 2010 -0800

    XQuartz: RandR: Fix mode changing for multi-monitor configurations.
    
    This just fixes the regression whereby we couldn't switch between the legacy
    fullscreen mode and rootless on multi-monitor configurations.  This was
    happening because ref wasn't being set in these cases (since we don't ever
    actually change CG modes), so we failed a CFEqual.  Setting the references
    fixes this regression and places us one step closer to more mode RandR
    mode switching in multi-monitor configurations.
    
    Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>

diff --git a/hw/xquartz/quartzRandR.c b/hw/xquartz/quartzRandR.c
index 298ec0a..296f9b6 100644
--- a/hw/xquartz/quartzRandR.c
+++ b/hw/xquartz/quartzRandR.c
@@ -438,18 +438,16 @@ static Bool QuartzRandRSetConfig (ScreenPtr           pScreen,
 static Bool _QuartzRandRUpdateFakeModes (ScreenPtr pScreen) {
     QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
 
-    if (pQuartzScreen->displayCount == 1) {
-        if(pQuartzScreen->fullscreenMode.ref)
-            CFRelease(pQuartzScreen->fullscreenMode.ref);
-        if(pQuartzScreen->currentMode.ref)
-            CFRelease(pQuartzScreen->currentMode.ref);
+    if(pQuartzScreen->fullscreenMode.ref)
+        CFRelease(pQuartzScreen->fullscreenMode.ref);
+    if(pQuartzScreen->currentMode.ref)
+        CFRelease(pQuartzScreen->currentMode.ref);
         
-        if (!QuartzRandRCopyCurrentModeInfo(pQuartzScreen->displayIDs[0],
-                                            &pQuartzScreen->fullscreenMode))
-            return FALSE;
+    if (!QuartzRandRCopyCurrentModeInfo(pQuartzScreen->displayIDs[0],
+                                        &pQuartzScreen->fullscreenMode))
+        return FALSE;
 
-        CFRetain(pQuartzScreen->fullscreenMode.ref);  /* This extra retain is for currentMode's copy */
-    } else {
+    if (pQuartzScreen->displayCount > 1) {
         pQuartzScreen->fullscreenMode.width = pScreen->width;
         pQuartzScreen->fullscreenMode.height = pScreen->height;
         if(XQuartzIsRootless)
@@ -467,6 +465,11 @@ static Bool _QuartzRandRUpdateFakeModes (ScreenPtr pScreen) {
     } else {
         pQuartzScreen->currentMode = pQuartzScreen->fullscreenMode;
     }
+
+    /* This extra retain is for currentMode's copy.
+     * fullscreen and rootless share a retain.
+     */
+    CFRetain(pQuartzScreen->currentMode.ref);
     
     DEBUG_LOG("rootlessMode: %d x %d\n", (int)pQuartzScreen->rootlessMode.width, (int)pQuartzScreen->rootlessMode.height);
     DEBUG_LOG("fullscreenMode: %d x %d\n", (int)pQuartzScreen->fullscreenMode.width, (int)pQuartzScreen->fullscreenMode.height);


More information about the Xquartz-changes mailing list