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@apple.com>
This commit is contained in:
Jeremy Huddleston 2010-12-03 17:27:44 -08:00
parent 14f00449eb
commit 714b68d9e5

View File

@ -438,18 +438,16 @@ static Bool QuartzRandRSetConfig (ScreenPtr pScreen,
static Bool _QuartzRandRUpdateFakeModes (ScreenPtr pScreen) { static Bool _QuartzRandRUpdateFakeModes (ScreenPtr pScreen) {
QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen); QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
if (pQuartzScreen->displayCount == 1) { if(pQuartzScreen->fullscreenMode.ref)
if(pQuartzScreen->fullscreenMode.ref) CFRelease(pQuartzScreen->fullscreenMode.ref);
CFRelease(pQuartzScreen->fullscreenMode.ref); if(pQuartzScreen->currentMode.ref)
if(pQuartzScreen->currentMode.ref) CFRelease(pQuartzScreen->currentMode.ref);
CFRelease(pQuartzScreen->currentMode.ref);
if (!QuartzRandRCopyCurrentModeInfo(pQuartzScreen->displayIDs[0], if (!QuartzRandRCopyCurrentModeInfo(pQuartzScreen->displayIDs[0],
&pQuartzScreen->fullscreenMode)) &pQuartzScreen->fullscreenMode))
return FALSE; return FALSE;
CFRetain(pQuartzScreen->fullscreenMode.ref); /* This extra retain is for currentMode's copy */ if (pQuartzScreen->displayCount > 1) {
} else {
pQuartzScreen->fullscreenMode.width = pScreen->width; pQuartzScreen->fullscreenMode.width = pScreen->width;
pQuartzScreen->fullscreenMode.height = pScreen->height; pQuartzScreen->fullscreenMode.height = pScreen->height;
if(XQuartzIsRootless) if(XQuartzIsRootless)
@ -467,6 +465,11 @@ static Bool _QuartzRandRUpdateFakeModes (ScreenPtr pScreen) {
} else { } else {
pQuartzScreen->currentMode = pQuartzScreen->fullscreenMode; 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("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); DEBUG_LOG("fullscreenMode: %d x %d\n", (int)pQuartzScreen->fullscreenMode.width, (int)pQuartzScreen->fullscreenMode.height);