From ca431371a23a2b9ad36c1d64e11ea41d5e4e5f04 Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Fri, 26 Nov 2010 15:31:22 -0500 Subject: [PATCH] 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;