From ca431371a23a2b9ad36c1d64e11ea41d5e4e5f04 Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Fri, 26 Nov 2010 15:31:22 -0500 Subject: [PATCH 1/4] XQuartz: Disable the Mac OS X screensaver when in full screen mode Signed-off-by: Jeremy Huddleston --- hw/xquartz/quartz.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/hw/xquartz/quartz.c b/hw/xquartz/quartz.c index e21303ccd..26b2c1f38 100644 --- a/hw/xquartz/quartz.c +++ b/hw/xquartz/quartz.c @@ -62,6 +62,7 @@ #include #include #include +#include #include #include @@ -246,6 +247,40 @@ void QuartzUpdateScreens(void) { quartzProcs->UpdateScreen(pScreen); } +static void pokeActivityCallback(CFRunLoopTimerRef timer, void *info) { + UpdateSystemActivity(OverallAct); +} + +static void QuartzScreenSaver(int state) { + static CFRunLoopTimerRef pokeActivityTimer = NULL; + static CFRunLoopTimerContext pokeActivityContext = { 0, NULL, NULL, NULL, NULL }; + static pthread_mutex_t pokeActivityMutex = PTHREAD_MUTEX_INITIALIZER; + + pthread_mutex_lock(&pokeActivityMutex); + + if(state) { + if(pokeActivityTimer == NULL) + goto QuartzScreenSaverEnd; + + CFRunLoopTimerInvalidate(pokeActivityTimer); + CFRelease(pokeActivityTimer); + pokeActivityTimer = NULL; + } else { + if(pokeActivityTimer != NULL) + goto QuartzScreenSaverEnd; + + pokeActivityTimer = CFRunLoopTimerCreate(NULL, CFAbsoluteTimeGetCurrent(), 30, 0, 0, pokeActivityCallback, &pokeActivityContext); + if(pokeActivityTimer == NULL) { + ErrorF("Unable to create pokeActivityTimer.\n"); + goto QuartzScreenSaverEnd; + } + + CFRunLoopAddTimer(CFRunLoopGetMain(), pokeActivityTimer, kCFRunLoopCommonModes); + } +QuartzScreenSaverEnd: + pthread_mutex_unlock(&pokeActivityMutex); +} + void QuartzShowFullscreen(int state) { int i; @@ -256,6 +291,8 @@ void QuartzShowFullscreen(int state) { return; } + QuartzScreenSaver(!state); + if(XQuartzFullscreenVisible == state) return; From 14aec8b82a316c6df51ac2a81985ebf1990abd2b Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Fri, 3 Dec 2010 16:45:37 -0800 Subject: [PATCH 2/4] XQuartz: Remove one more backing store leftover See: c4c4676e6874b42c2371eee96faa2c2dbb59a704 Signed-off-by: Jeremy Huddleston --- hw/xquartz/darwin.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/xquartz/darwin.c b/hw/xquartz/darwin.c index c8eade89c..93697a994 100644 --- a/hw/xquartz/darwin.c +++ b/hw/xquartz/darwin.c @@ -792,7 +792,7 @@ xf86SetRootClip (ScreenPtr pScreen, int enable) WindowPtr pChild; Bool WasViewable = (Bool)(pWin->viewable); Bool anyMarked = TRUE; - RegionPtr pOldClip = NULL, bsExposed; + RegionPtr pOldClip = NULL; WindowPtr pLayerWin; BoxRec box; From 14f00449eb81771c01fffcdaf3dd697cdf4e41de Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Fri, 3 Dec 2010 16:46:11 -0800 Subject: [PATCH 3/4] XQuartz: Cleanup some compiler warnings Mark __crashreporter_info__ as __attribute__((__used__)) Signed-off-by: Jeremy Huddleston --- hw/xquartz/mach-startup/bundle-main.c | 2 +- os/log.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hw/xquartz/mach-startup/bundle-main.c b/hw/xquartz/mach-startup/bundle-main.c index 7ac5469eb..75b39392a 100644 --- a/hw/xquartz/mach-startup/bundle-main.c +++ b/hw/xquartz/mach-startup/bundle-main.c @@ -74,7 +74,7 @@ extern int noPanoramiXExtension; #endif static char __crashreporter_info_buff__[4096] = {0}; -static const char *__crashreporter_info__ = &__crashreporter_info_buff__[0]; +static const char *__crashreporter_info__ __attribute__((__used__)) = &__crashreporter_info_buff__[0]; #if MAC_OS_X_VERSION_MIN_REQUIRED >= 1050 // This is actually a toolchain requirement, but I'm not sure the correct check, // but it should be fine to just only include it for Leopard and later. This line diff --git a/os/log.c b/os/log.c index d77708ea6..be4462f4e 100644 --- a/os/log.c +++ b/os/log.c @@ -121,7 +121,7 @@ static Bool needBuffer = TRUE; #include static char __crashreporter_info_buff__[4096] = {0}; -static const char *__crashreporter_info__ = &__crashreporter_info_buff__[0]; +static const char *__crashreporter_info__ __attribute__((__used__)) = &__crashreporter_info_buff__[0]; #if MAC_OS_X_VERSION_MIN_REQUIRED >= 1050 // This is actually a toolchain requirement, but I'm not sure the correct check, // but it should be fine to just only include it for Leopard and later. This line From 714b68d9e5bf624a6703f168e0f7dc980e88e8c0 Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Fri, 3 Dec 2010 17:27:44 -0800 Subject: [PATCH 4/4] 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 --- hw/xquartz/quartzRandR.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/hw/xquartz/quartzRandR.c b/hw/xquartz/quartzRandR.c index 298ec0a52..296f9b669 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);