diff options
author | marha <marha@users.sourceforge.net> | 2012-03-26 14:23:28 +0200 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2012-03-26 14:23:28 +0200 |
commit | 76bcc36ed305418a3ddc5752d287ede894243e1b (patch) | |
tree | bacb320c825768471ce56f058f17ce863d592376 /xorg-server/hw/xquartz/quartz.c | |
parent | 7d894e32566b710952c44cbc71939ad1d9e2fa8d (diff) | |
parent | 0f834b91a4768673833ab4917e87d86c237bb1a6 (diff) | |
download | vcxsrv-76bcc36ed305418a3ddc5752d287ede894243e1b.tar.gz vcxsrv-76bcc36ed305418a3ddc5752d287ede894243e1b.tar.bz2 vcxsrv-76bcc36ed305418a3ddc5752d287ede894243e1b.zip |
Merge remote-tracking branch 'origin/released'
Conflicts:
pixman/pixman/pixman-mmx.c
xorg-server/Xext/shm.c
xorg-server/Xext/syncsrv.h
xorg-server/Xext/xvmain.c
xorg-server/Xi/exevents.c
xorg-server/Xi/opendev.c
xorg-server/composite/compalloc.c
xorg-server/composite/compoverlay.c
xorg-server/dix/colormap.c
xorg-server/dix/devices.c
xorg-server/dix/dispatch.c
xorg-server/dix/dixfonts.c
xorg-server/dix/eventconvert.c
xorg-server/dix/events.c
xorg-server/dix/gc.c
xorg-server/dix/getevents.c
xorg-server/dix/main.c
xorg-server/dix/privates.c
xorg-server/dix/registry.c
xorg-server/dix/resource.c
xorg-server/exa/exa_accel.c
xorg-server/exa/exa_migration_classic.c
xorg-server/exa/exa_unaccel.c
xorg-server/fb/fb.h
xorg-server/fb/fbcopy.c
xorg-server/fb/fbpixmap.c
xorg-server/glx/dispatch.h
xorg-server/glx/glapi.h
xorg-server/glx/glapi_gentable.c
xorg-server/glx/glapitable.h
xorg-server/glx/glprocs.h
xorg-server/glx/glxcmds.c
xorg-server/glx/glxcmdsswap.c
xorg-server/glx/glxdricommon.c
xorg-server/glx/glxdriswrast.c
xorg-server/glx/glxext.c
xorg-server/glx/indirect_dispatch.c
xorg-server/glx/indirect_dispatch.h
xorg-server/glx/indirect_dispatch_swap.c
xorg-server/glx/indirect_size.h
xorg-server/glx/indirect_size_get.h
xorg-server/glx/indirect_table.c
xorg-server/glx/indirect_util.c
xorg-server/glx/rensize.c
xorg-server/glx/single2swap.c
xorg-server/glx/singlepix.c
xorg-server/glx/singlepixswap.c
xorg-server/glx/singlesize.c
xorg-server/hw/dmx/dmxinit.c
xorg-server/hw/kdrive/ephyr/ephyr.c
xorg-server/hw/kdrive/ephyr/hostx.c
xorg-server/hw/kdrive/ephyr/hostx.h
xorg-server/hw/kdrive/src/kinput.c
xorg-server/hw/xfree86/common/compiler.h
xorg-server/hw/xwin/InitInput.c
xorg-server/hw/xwin/InitOutput.c
xorg-server/hw/xwin/ddraw.h
xorg-server/hw/xwin/glx/glwrap.c
xorg-server/hw/xwin/glx/indirect.c
xorg-server/hw/xwin/glx/wgl_ext_api.h
xorg-server/hw/xwin/glx/winpriv.c
xorg-server/hw/xwin/win.h
xorg-server/hw/xwin/winallpriv.c
xorg-server/hw/xwin/winauth.c
xorg-server/hw/xwin/winclipboard.h
xorg-server/hw/xwin/winclipboardinit.c
xorg-server/hw/xwin/winclipboardthread.c
xorg-server/hw/xwin/winclipboardunicode.c
xorg-server/hw/xwin/winclipboardwndproc.c
xorg-server/hw/xwin/winclipboardwrappers.c
xorg-server/hw/xwin/winclipboardxevents.c
xorg-server/hw/xwin/wincmap.c
xorg-server/hw/xwin/winconfig.c
xorg-server/hw/xwin/wincreatewnd.c
xorg-server/hw/xwin/wincursor.c
xorg-server/hw/xwin/windialogs.c
xorg-server/hw/xwin/winengine.c
xorg-server/hw/xwin/winerror.c
xorg-server/hw/xwin/wingc.c
xorg-server/hw/xwin/wingetsp.c
xorg-server/hw/xwin/winkeybd.c
xorg-server/hw/xwin/winkeybd.h
xorg-server/hw/xwin/winlayouts.h
xorg-server/hw/xwin/winmisc.c
xorg-server/hw/xwin/winmonitors.c
xorg-server/hw/xwin/winmouse.c
xorg-server/hw/xwin/winmsg.c
xorg-server/hw/xwin/winmsg.h
xorg-server/hw/xwin/winmultiwindowclass.c
xorg-server/hw/xwin/winmultiwindowicons.c
xorg-server/hw/xwin/winmultiwindowshape.c
xorg-server/hw/xwin/winmultiwindowwindow.c
xorg-server/hw/xwin/winmultiwindowwm.c
xorg-server/hw/xwin/winmultiwindowwndproc.c
xorg-server/hw/xwin/winnativegdi.c
xorg-server/hw/xwin/winpfbdd.c
xorg-server/hw/xwin/winpixmap.c
xorg-server/hw/xwin/winpolyline.c
xorg-server/hw/xwin/winprefs.c
xorg-server/hw/xwin/winprocarg.c
xorg-server/hw/xwin/winregistry.c
xorg-server/hw/xwin/winscrinit.c
xorg-server/hw/xwin/winsetsp.c
xorg-server/hw/xwin/winshaddd.c
xorg-server/hw/xwin/winshadddnl.c
xorg-server/hw/xwin/winshadgdi.c
xorg-server/hw/xwin/wintrayicon.c
xorg-server/hw/xwin/winwin32rootless.c
xorg-server/hw/xwin/winwin32rootlesswindow.c
xorg-server/hw/xwin/winwin32rootlesswndproc.c
xorg-server/hw/xwin/winwindow.c
xorg-server/hw/xwin/winwindow.h
xorg-server/hw/xwin/winwindowswm.c
xorg-server/hw/xwin/winwndproc.c
xorg-server/include/callback.h
xorg-server/include/dixstruct.h
xorg-server/include/misc.h
xorg-server/include/os.h
xorg-server/include/scrnintstr.h
xorg-server/mi/micmap.c
xorg-server/mi/miinitext.c
xorg-server/mi/mioverlay.c
xorg-server/mi/misprite.c
xorg-server/mi/mivaltree.c
xorg-server/mi/miwindow.c
xorg-server/miext/damage/damage.c
xorg-server/miext/rootless/rootlessGC.c
xorg-server/miext/rootless/rootlessWindow.c
xorg-server/os/WaitFor.c
xorg-server/os/access.c
xorg-server/os/connection.c
xorg-server/os/io.c
xorg-server/os/log.c
xorg-server/os/osinit.c
xorg-server/os/utils.c
xorg-server/os/xdmcp.c
xorg-server/os/xprintf.c
xorg-server/os/xstrans.c
xorg-server/render/mipict.c
xorg-server/xkb/xkbActions.c
xorg-server/xkb/xkbInit.c
xorg-server/xkeyboard-config/compat/default.in
Diffstat (limited to 'xorg-server/hw/xquartz/quartz.c')
-rw-r--r-- | xorg-server/hw/xquartz/quartz.c | 220 |
1 files changed, 118 insertions, 102 deletions
diff --git a/xorg-server/hw/xquartz/quartz.c b/xorg-server/hw/xquartz/quartz.c index c395b42e6..e4578cc3e 100644 --- a/xorg-server/hw/xquartz/quartz.c +++ b/xorg-server/hw/xquartz/quartz.c @@ -68,10 +68,10 @@ #include <rootlessCommon.h> #include <Xplugin.h> -DevPrivateKeyRec quartzScreenKeyRec; -int aquaMenuBarHeight = 0; -QuartzModeProcsPtr quartzProcs = NULL; -const char *quartzOpenGLBundle = NULL; +DevPrivateKeyRec quartzScreenKeyRec; +int aquaMenuBarHeight = 0; +QuartzModeProcsPtr quartzProcs = NULL; +const char *quartzOpenGLBundle = NULL; Bool XQuartzFullscreenDisableHotkeys = TRUE; Bool XQuartzOptionSendsAlt = FALSE; @@ -96,9 +96,8 @@ int32_t XQuartzShieldingWindowLevel = 0; * QuartzAddScreen * Do mode dependent initialization of each screen for Quartz. */ -Bool QuartzAddScreen( - int index, - ScreenPtr pScreen) +Bool +QuartzAddScreen(int index, ScreenPtr pScreen) { // allocate space for private per screen Quartz specific storage QuartzScreenPtr displayInfo = calloc(sizeof(QuartzScreenRec), 1); @@ -110,25 +109,23 @@ Bool QuartzAddScreen( return quartzProcs->AddScreen(index, pScreen); } - /* * QuartzSetupScreen * Finalize mode specific setup of each screen. */ -Bool QuartzSetupScreen( - int index, - ScreenPtr pScreen) +Bool +QuartzSetupScreen(int index, ScreenPtr pScreen) { // do Quartz mode specific setup - if (! quartzProcs->SetupScreen(index, pScreen)) + if (!quartzProcs->SetupScreen(index, pScreen)) return FALSE; // setup cursor support - if (! quartzProcs->InitCursor(pScreen)) + if (!quartzProcs->InitCursor(pScreen)) return FALSE; #if defined(RANDR) - if(!QuartzRandRInit(pScreen)) { + if (!QuartzRandRInit(pScreen)) { DEBUG_LOG("Failed to init RandR extension.\n"); return FALSE; } @@ -137,14 +134,12 @@ Bool QuartzSetupScreen( return TRUE; } - /* * QuartzInitOutput * Quartz display initialization. */ -void QuartzInitOutput( - int argc, - char **argv ) +void +QuartzInitOutput(int argc, char **argv) { /* For XQuartz, we want to just use the default signal handler to work better with CrashTracer */ signal(SIGSEGV, SIG_DFL); @@ -167,27 +162,23 @@ void QuartzInitOutput( #endif if (!RegisterBlockAndWakeupHandlers(QuartzBlockHandler, - QuartzWakeupHandler, - NULL)) - { + QuartzWakeupHandler, NULL)) { FatalError("Could not register block and wakeup handlers."); } if (!dixRegisterPrivateKey(&quartzScreenKeyRec, PRIVATE_SCREEN, 0)) - FatalError("Failed to alloc quartz screen private.\n"); + FatalError("Failed to alloc quartz screen private.\n"); // Do display mode specific initialization quartzProcs->DisplayInit(); } - /* * QuartzInitInput * Inform the main thread the X server is ready to handle events. */ -void QuartzInitInput( - int argc, - char **argv ) +void +QuartzInitInput(int argc, char **argv) { X11ApplicationSetCanQuit(0); X11ApplicationServerReady(); @@ -196,44 +187,44 @@ void QuartzInitInput( quartzProcs->InitInput(argc, argv); } - -void QuartzUpdateScreens(void) { +void +QuartzUpdateScreens(void) +{ ScreenPtr pScreen; WindowPtr pRoot; int x, y, width, height, sx, sy; xEvent e; BoxRec bounds; - - if (noPseudoramiXExtension || screenInfo.numScreens != 1) - { + + if (noPseudoramiXExtension || screenInfo.numScreens != 1) { /* FIXME: if not using Xinerama, we have multiple screens, and - to do this properly may need to add or remove screens. Which - isn't possible. So don't do anything. Another reason why - we default to running with Xinerama. */ - + to do this properly may need to add or remove screens. Which + isn't possible. So don't do anything. Another reason why + we default to running with Xinerama. */ + return; } - + pScreen = screenInfo.screens[0]; - + PseudoramiXResetScreens(); quartzProcs->AddPseudoramiXScreens(&x, &y, &width, &height, pScreen); - + pScreen->x = x; pScreen->y = y; pScreen->mmWidth = pScreen->mmWidth * ((double) width / pScreen->width); pScreen->mmHeight = pScreen->mmHeight * ((double) height / pScreen->height); pScreen->width = width; pScreen->height = height; - + DarwinAdjustScreenOrigins(&screenInfo); - + /* DarwinAdjustScreenOrigins or UpdateScreen may change pScreen->x/y, * so use it rather than x/y */ sx = pScreen->x + darwinMainScreenX; sy = pScreen->y + darwinMainScreenY; - + /* Adjust the root window. */ pRoot = pScreen->root; AppleWMSetScreenOrigin(pRoot); @@ -250,7 +241,10 @@ void QuartzUpdateScreens(void) { inputInfo.pointer->spriteInfo->sprite->physLimits = bounds; inputInfo.pointer->spriteInfo->sprite->hotLimits = bounds; - DEBUG_LOG("Root Window: %dx%d @ (%d, %d) darwinMainScreen (%d, %d) xy (%d, %d) dixScreenOrigins (%d, %d)\n", width, height, x - sx, y - sy, darwinMainScreenX, darwinMainScreenY, x, y, pScreen->x, pScreen->y); + DEBUG_LOG + ("Root Window: %dx%d @ (%d, %d) darwinMainScreen (%d, %d) xy (%d, %d) dixScreenOrigins (%d, %d)\n", + width, height, x - sx, y - sy, darwinMainScreenX, darwinMainScreenY, x, + y, pScreen->x, pScreen->y); /* Send an event for the root reconfigure */ e.u.u.type = ConfigureNotify; @@ -267,74 +261,86 @@ void QuartzUpdateScreens(void) { quartzProcs->UpdateScreen(pScreen); /* miPaintWindow needs to be called after RootlessUpdateScreenPixmap (from xprUpdateScreen) */ - miPaintWindow(pRoot, &pRoot->borderClip, PW_BACKGROUND); + miPaintWindow(pRoot, &pRoot->borderClip, PW_BACKGROUND); /* Tell RandR about the new size, so new connections get the correct info */ RRScreenSizeNotify(pScreen); } -static void pokeActivityCallback(CFRunLoopTimerRef timer, void *info) { +static void +pokeActivityCallback(CFRunLoopTimerRef timer, void *info) +{ UpdateSystemActivity(OverallAct); } -static void QuartzScreenSaver(int state) { +static void +QuartzScreenSaver(int state) +{ static CFRunLoopTimerRef pokeActivityTimer = NULL; - static CFRunLoopTimerContext pokeActivityContext = { 0, NULL, NULL, NULL, NULL }; + static CFRunLoopTimerContext pokeActivityContext = + { 0, NULL, NULL, NULL, NULL }; static OSSpinLock pokeActivitySpinLock = OS_SPINLOCK_INIT; OSSpinLockLock(&pokeActivitySpinLock); - if(state) { - if(pokeActivityTimer == NULL) + if (state) { + if (pokeActivityTimer == NULL) goto QuartzScreenSaverEnd; CFRunLoopTimerInvalidate(pokeActivityTimer); CFRelease(pokeActivityTimer); pokeActivityTimer = NULL; - } else { - if(pokeActivityTimer != NULL) + } + else { + if (pokeActivityTimer != NULL) goto QuartzScreenSaverEnd; - - pokeActivityTimer = CFRunLoopTimerCreate(NULL, CFAbsoluteTimeGetCurrent(), 30, 0, 0, pokeActivityCallback, &pokeActivityContext); - if(pokeActivityTimer == NULL) { + + pokeActivityTimer = + CFRunLoopTimerCreate(NULL, CFAbsoluteTimeGetCurrent(), 30, 0, 0, + pokeActivityCallback, &pokeActivityContext); + if (pokeActivityTimer == NULL) { ErrorF("Unable to create pokeActivityTimer.\n"); goto QuartzScreenSaverEnd; } - CFRunLoopAddTimer(CFRunLoopGetMain(), pokeActivityTimer, kCFRunLoopCommonModes); + CFRunLoopAddTimer(CFRunLoopGetMain(), pokeActivityTimer, + kCFRunLoopCommonModes); } -QuartzScreenSaverEnd: + QuartzScreenSaverEnd: OSSpinLockUnlock(&pokeActivitySpinLock); } -void QuartzShowFullscreen(int state) { +void +QuartzShowFullscreen(int state) +{ int i; - + DEBUG_LOG("QuartzShowFullscreen: state=%d\n", state); - - if(XQuartzIsRootless) { + + if (XQuartzIsRootless) { ErrorF("QuartzShowFullscreen called while in rootless mode.\n"); return; } - + QuartzScreenSaver(!state); - - if(XQuartzFullscreenVisible == state) + + if (XQuartzFullscreenVisible == state) return; - + XQuartzFullscreenVisible = state; - - xp_disable_update (); - + + xp_disable_update(); + if (!XQuartzFullscreenVisible) RootlessHideAllWindows(); - + RootlessUpdateRooted(XQuartzFullscreenVisible); - + if (XQuartzFullscreenVisible) { - RootlessShowAllWindows (); - for (i=0; i < screenInfo.numScreens; i++) { - ScreenPtr pScreen = screenInfo.screens[i]; + RootlessShowAllWindows(); + for (i = 0; i < screenInfo.numScreens; i++) { + ScreenPtr pScreen = screenInfo.screens[i]; + RootlessRepositionWindows(pScreen); // JH: I don't think this is necessary, but keeping it here as a reminder //RootlessUpdateScreenPixmap(pScreen); @@ -345,32 +351,35 @@ void QuartzShowFullscreen(int state) { * in fullscreen mode, even though it's not visible. */ X11ApplicationShowHideMenubar(!XQuartzFullscreenVisible); - - xp_reenable_update (); - + + xp_reenable_update(); + if (XQuartzFullscreenDisableHotkeys) xp_disable_hot_keys(XQuartzFullscreenVisible); } -void QuartzSetRootless(Bool state) { +void +QuartzSetRootless(Bool state) +{ DEBUG_LOG("QuartzSetRootless state=%d\n", state); - - if(XQuartzIsRootless == state) + + if (XQuartzIsRootless == state) return; - - if(state) + + if (state) QuartzShowFullscreen(FALSE); - + XQuartzIsRootless = state; xp_disable_update(); - /* When in rootless, the menubar is not part of the screen, so we need to update our screens on toggle */ + /* When in rootless, the menubar is not part of the screen, so we need to update our screens on toggle */ QuartzUpdateScreens(); - if(XQuartzIsRootless) { + if (XQuartzIsRootless) { RootlessShowAllWindows(); - } else { + } + else { RootlessHideAllWindows(); } @@ -387,31 +396,33 @@ void QuartzSetRootless(Bool state) { * Calls mode specific screen resume to restore the X clip regions * (if needed) and the X server cursor state. */ -void QuartzShow(void) { +void +QuartzShow(void) +{ int i; if (XQuartzServerVisible) return; - + XQuartzServerVisible = TRUE; for (i = 0; i < screenInfo.numScreens; i++) { if (screenInfo.screens[i]) { quartzProcs->ResumeScreen(screenInfo.screens[i]); } } - + if (!XQuartzIsRootless) QuartzShowFullscreen(TRUE); } - /* * QuartzHide * Remove the X server display from the screen. Does nothing if already * hidden. Calls mode specific screen suspend to set X clip regions to * prevent drawing (if needed) and restore the Aqua cursor. */ -void QuartzHide(void) +void +QuartzHide(void) { int i; @@ -423,18 +434,17 @@ void QuartzHide(void) } } - if(!XQuartzIsRootless) + if (!XQuartzIsRootless) QuartzShowFullscreen(FALSE); XQuartzServerVisible = FALSE; } - /* * QuartzSetRootClip * Enable or disable rendering to the X screen. */ -void QuartzSetRootClip( - BOOL enable) +void +QuartzSetRootClip(BOOL enable) { int i; @@ -452,7 +462,9 @@ void QuartzSetRootClip( * QuartzSpaceChanged * Unmap offscreen windows, map onscreen windows */ -void QuartzSpaceChanged(uint32_t space_id) { +void +QuartzSpaceChanged(uint32_t space_id) +{ /* Do something special here, so we don't depend on quartz-wm for spaces to work... */ DEBUG_LOG("Space Changed (%u) ... do something interesting...\n", space_id); } @@ -462,26 +474,30 @@ void QuartzSpaceChanged(uint32_t space_id) { * Associate an X11 screen with one or more CoreGraphics display IDs by copying * the list into a private array. Free the previously copied array, if present. */ -void QuartzCopyDisplayIDs(ScreenPtr pScreen, - int displayCount, CGDirectDisplayID *displayIDs) { +void +QuartzCopyDisplayIDs(ScreenPtr pScreen, + int displayCount, CGDirectDisplayID * displayIDs) +{ QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen); free(pQuartzScreen->displayIDs); - if(displayCount) { + if (displayCount) { size_t size = displayCount * sizeof(CGDirectDisplayID); + pQuartzScreen->displayIDs = malloc(size); memcpy(pQuartzScreen->displayIDs, displayIDs, size); - } else { - pQuartzScreen->displayIDs = NULL; + } + else { + pQuartzScreen->displayIDs = NULL; } pQuartzScreen->displayCount = displayCount; } void NSBeep(void); -void DDXRingBell( - int volume, // volume is % of max - int pitch, // pitch is Hz - int duration) // duration is milliseconds +void +DDXRingBell(int volume, // volume is % of max + int pitch, // pitch is Hz + int duration) // duration is milliseconds { if (volume) NSBeep(); |