[70781] trunk/dports/x11/xorg-server-devel

jeremyhu at macports.org jeremyhu at macports.org
Fri Aug 20 23:36:00 PDT 2010


Revision: 70781
          http://trac.macports.org/changeset/70781
Author:   jeremyhu at macports.org
Date:     2010-08-20 23:35:57 -0700 (Fri, 20 Aug 2010)
Log Message:
-----------
xorg-server-devel: Bump to 1.9.0

Modified Paths:
--------------
    trunk/dports/x11/xorg-server-devel/Portfile

Added Paths:
-----------
    trunk/dports/x11/xorg-server-devel/files/0001-rootless-Remove-ROOTLESS_WORKAROUND.patch
    trunk/dports/x11/xorg-server-devel/files/0002-XQuartz-RandR-Implement-basic-RandR-functionality.patch
    trunk/dports/x11/xorg-server-devel/files/0003-XQuartz-RandR-Toggle-rootless-mode-on-XRandR-mode.patch
    trunk/dports/x11/xorg-server-devel/files/0004-XQuartz-RandR-Remove-FAKE_RANDR-code.patch
    trunk/dports/x11/xorg-server-devel/files/0005-XQuartz-RandR-Use-deprecated-CG-APIs-only-on-Leopa.patch
    trunk/dports/x11/xorg-server-devel/files/0006-XQuartz-RandR-Respond-better-to-resolution-changes.patch
    trunk/dports/x11/xorg-server-devel/files/0007-XQuartz-RandR-Better-handle-switching-betwen-RandR.patch
    trunk/dports/x11/xorg-server-devel/files/0008-XQuartz-RandR-Don-t-change-the-rootless-preference.patch
    trunk/dports/x11/xorg-server-devel/files/0009-XQuartz-RandR-Refactor-legacy-mode-switching-to-be.patch
    trunk/dports/x11/xorg-server-devel/files/0010-Workaround-the-GC-clipping-problem-in-miPaintWindow.patch
    trunk/dports/x11/xorg-server-devel/files/0011-fb-Revert-fb-changes-that-broke-XQuartz.patch

Removed Paths:
-------------
    trunk/dports/x11/xorg-server-devel/files/0001-XQuartz-Ignore-kXquartzToggleFullscreen-when-rootle.patch
    trunk/dports/x11/xorg-server-devel/files/0002-XQuartz-Make-application-switching-work-better-for.patch
    trunk/dports/x11/xorg-server-devel/files/0003-XQuartz-UpdateScreen-at-the-end-of-SetRootless.patch
    trunk/dports/x11/xorg-server-devel/files/0004-XQuartz-xpr-Bail-on-errors-during-unlock-and-destr.patch
    trunk/dports/x11/xorg-server-devel/files/0005-XQuartz-RandR-Implement-basic-RandR-functionality.patch
    trunk/dports/x11/xorg-server-devel/files/0006-XQuartz-RandR-Toggle-rootless-mode-on-XRandR-mode.patch
    trunk/dports/x11/xorg-server-devel/files/0007-XQuartz-RandR-Remove-FAKE_RANDR-code.patch
    trunk/dports/x11/xorg-server-devel/files/0008-XQuartz-RandR-Use-deprecated-CG-APIs-only-on-Leopa.patch
    trunk/dports/x11/xorg-server-devel/files/0009-XQuartz-RandR-Respond-better-to-resolution-changes.patch
    trunk/dports/x11/xorg-server-devel/files/0010-XQuartz-RandR-Better-handle-switching-betwen-RandR.patch
    trunk/dports/x11/xorg-server-devel/files/0011-XQuartz-RandR-Don-t-change-the-rootless-preference.patch
    trunk/dports/x11/xorg-server-devel/files/0012-XQuartz-RandR-Refactor-legacy-mode-switching-to-be.patch
    trunk/dports/x11/xorg-server-devel/files/0013-Workaround-the-GC-clipping-problem-in-miPaintWindow.patch
    trunk/dports/x11/xorg-server-devel/files/0014-fb-Revert-fb-changes-that-broke-XQuartz.patch

Modified: trunk/dports/x11/xorg-server-devel/Portfile
===================================================================
--- trunk/dports/x11/xorg-server-devel/Portfile	2010-08-20 22:32:45 UTC (rev 70780)
+++ trunk/dports/x11/xorg-server-devel/Portfile	2010-08-21 06:35:57 UTC (rev 70781)
@@ -5,7 +5,7 @@
 name		xorg-server-devel
 conflicts       xorg-server
 set my_name	xorg-server
-version		1.8.99.906
+version		1.9.0
 categories	x11 devel
 maintainers	jeremyhu openmaintainer
 description	The X.org / Xquartz X server.
@@ -19,9 +19,9 @@
 dist_subdir     ${my_name}
 distname        ${my_name}-${version}
 
-checksums           md5     d4ab361cacc35e2ed4587019980b7e57 \
-                    sha1    2d84e541609f444de0cc9ce1a0b2ee392a4ba886 \
-                    rmd160  c3650c9282ddcaf4286b082f0d3f977a4e3667ef
+checksums           md5     ba1173998a5a4216fd7b40eded96697e \
+                    sha1    a18d2212df80446b597b71b8948d133f52c399cc \
+                    rmd160  9d0152458e4d82681422705d9ab0c7808a0aa372
 
 use_bzip2	yes
 use_parallel_build yes
@@ -81,20 +81,17 @@
 	RAWCPP=${configure.cpp}
 
 patchfiles \
-        0001-XQuartz-Ignore-kXquartzToggleFullscreen-when-rootle.patch \
-        0002-XQuartz-Make-application-switching-work-better-for.patch \
-        0003-XQuartz-UpdateScreen-at-the-end-of-SetRootless.patch \
-        0004-XQuartz-xpr-Bail-on-errors-during-unlock-and-destr.patch \
-        0005-XQuartz-RandR-Implement-basic-RandR-functionality.patch \
-        0006-XQuartz-RandR-Toggle-rootless-mode-on-XRandR-mode.patch \
-        0007-XQuartz-RandR-Remove-FAKE_RANDR-code.patch \
-        0008-XQuartz-RandR-Use-deprecated-CG-APIs-only-on-Leopa.patch \
-        0009-XQuartz-RandR-Respond-better-to-resolution-changes.patch \
-        0010-XQuartz-RandR-Better-handle-switching-betwen-RandR.patch \
-        0011-XQuartz-RandR-Don-t-change-the-rootless-preference.patch \
-        0012-XQuartz-RandR-Refactor-legacy-mode-switching-to-be.patch \
-        0013-Workaround-the-GC-clipping-problem-in-miPaintWindow.patch \
-        0014-fb-Revert-fb-changes-that-broke-XQuartz.patch
+        0001-rootless-Remove-ROOTLESS_WORKAROUND.patch \
+        0002-XQuartz-RandR-Implement-basic-RandR-functionality.patch \
+        0003-XQuartz-RandR-Toggle-rootless-mode-on-XRandR-mode.patch \
+        0004-XQuartz-RandR-Remove-FAKE_RANDR-code.patch \
+        0005-XQuartz-RandR-Use-deprecated-CG-APIs-only-on-Leopa.patch \
+        0006-XQuartz-RandR-Respond-better-to-resolution-changes.patch \
+        0007-XQuartz-RandR-Better-handle-switching-betwen-RandR.patch \
+        0008-XQuartz-RandR-Don-t-change-the-rootless-preference.patch \
+        0009-XQuartz-RandR-Refactor-legacy-mode-switching-to-be.patch \
+        0010-Workaround-the-GC-clipping-problem-in-miPaintWindow.patch \
+        0011-fb-Revert-fb-changes-that-broke-XQuartz.patch
 
 patch.pre_args -p1
 

Deleted: trunk/dports/x11/xorg-server-devel/files/0001-XQuartz-Ignore-kXquartzToggleFullscreen-when-rootle.patch
===================================================================
--- trunk/dports/x11/xorg-server-devel/files/0001-XQuartz-Ignore-kXquartzToggleFullscreen-when-rootle.patch	2010-08-20 22:32:45 UTC (rev 70780)
+++ trunk/dports/x11/xorg-server-devel/files/0001-XQuartz-Ignore-kXquartzToggleFullscreen-when-rootle.patch	2010-08-21 06:35:57 UTC (rev 70781)
@@ -1,28 +0,0 @@
-From e5bc62a03289f956c54c4699edf47f7ff237b5be Mon Sep 17 00:00:00 2001
-From: Jeremy Huddleston <jeremyhu at apple.com>
-Date: Sun, 25 Jul 2010 22:29:11 -0700
-Subject: [PATCH] XQuartz: Ignore kXquartzToggleFullscreen when rootless
-
-Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
----
- hw/xquartz/darwinEvents.c |    4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git xorg-server-1.8.99.906/hw/xquartz/darwinEvents.c xorg-server-1.8.99.906/hw/xquartz/darwinEvents.c
-index 147b32a..7b34b8a 100644
---- xorg-server-1.8.99.906/hw/xquartz/darwinEvents.c
-+++ xorg-server-1.8.99.906/hw/xquartz/darwinEvents.c
-@@ -238,8 +238,8 @@ static void DarwinEventHandler(int screenNum, InternalEvent *ie, DeviceIntPtr de
-             
-         case kXquartzToggleFullscreen:
-             DEBUG_LOG("kXquartzToggleFullscreen\n");
--            if (quartzEnableRootless) 
--                QuartzSetFullscreen(!quartzHasRoot);
-+            if(quartzEnableRootless) 
-+                ErrorF("Ignoring kXquartzToggleFullscreen because of rootless mode.");
-             else if (quartzHasRoot)
-                 QuartzHide();
-             else
--- 
-1.5.6.6
-

Added: trunk/dports/x11/xorg-server-devel/files/0001-rootless-Remove-ROOTLESS_WORKAROUND.patch
===================================================================
--- trunk/dports/x11/xorg-server-devel/files/0001-rootless-Remove-ROOTLESS_WORKAROUND.patch	                        (rev 0)
+++ trunk/dports/x11/xorg-server-devel/files/0001-rootless-Remove-ROOTLESS_WORKAROUND.patch	2010-08-21 06:35:57 UTC (rev 70781)
@@ -0,0 +1,50 @@
+From 968d3549f84cd1f529328c4cd8d968c189d6d646 Mon Sep 17 00:00:00 2001
+From: Jeremy Huddleston <jeremyhu at apple.com>
+Date: Sun, 15 Aug 2010 20:07:28 -0700
+Subject: [PATCH] rootless: Remove ROOTLESS_WORKAROUND
+
+This was already removed for XWin (20701522be803fe47e921fcf059dadf64c7f287d)
+with no reported side effects.  XQuartz seems to be behaving ok without it as
+well.  While this possibly brings back bug #1168, we don't have any reproduction
+steps for that issue, and if it crops up again, we should fix it a real way
+rather than this hokey workaround which doesn't even work for COMPOSITE.
+
+Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
+---
+ configure.ac          |    2 +-
+ miext/damage/damage.c |    6 +-----
+ 2 files changed, 2 insertions(+), 6 deletions(-)
+
+diff --git xorg-server-1.9.0/configure.ac xorg-server-1.9.0/configure.ac
+index 9884fa7..95f7a76 100644
+--- xorg-server-1.9.0/configure.ac
++++ xorg-server-1.9.0/configure.ac
+@@ -1926,7 +1926,7 @@ if test "x$XQUARTZ" = xyes; then
+ 
+ 	AC_CHECK_LIB([Xplugin],[xp_init],[:])
+ 
+-	CFLAGS="${CFLAGS} -DROOTLESS_WORKAROUND -DROOTLESS_SAFEALPHA -DNO_ALLOCA"
++	CFLAGS="${CFLAGS} -DROOTLESS_SAFEALPHA -DNO_ALLOCA"
+ 
+ 	PKG_CHECK_MODULES(XPBPROXY, $APPLEWMPROTO $LIBAPPLEWM xfixes x11)
+ 
+diff --git xorg-server-1.9.0/miext/damage/damage.c xorg-server-1.9.0/miext/damage/damage.c
+index 1cf0513..e0e96f2 100644
+--- xorg-server-1.9.0/miext/damage/damage.c
++++ xorg-server-1.9.0/miext/damage/damage.c
+@@ -89,11 +89,7 @@ getDrawableDamageRef (DrawablePtr pDrawable)
+ 	ScreenPtr   pScreen = pDrawable->pScreen;
+ 
+ 	pPixmap = 0;
+-	if (pScreen->GetWindowPixmap
+-#ifdef ROOTLESS_WORKAROUND
+-	    && ((WindowPtr)pDrawable)->viewable
+-#endif
+-	    )
++	if (pScreen->GetWindowPixmap)
+ 	    pPixmap = (*pScreen->GetWindowPixmap) ((WindowPtr)pDrawable);
+ 
+ 	if (!pPixmap)
+-- 
+1.5.6.6
+

Deleted: trunk/dports/x11/xorg-server-devel/files/0002-XQuartz-Make-application-switching-work-better-for.patch
===================================================================
--- trunk/dports/x11/xorg-server-devel/files/0002-XQuartz-Make-application-switching-work-better-for.patch	2010-08-20 22:32:45 UTC (rev 70780)
+++ trunk/dports/x11/xorg-server-devel/files/0002-XQuartz-Make-application-switching-work-better-for.patch	2010-08-21 06:35:57 UTC (rev 70781)
@@ -1,133 +0,0 @@
-From 4fc4cab98d454afbfd0d2f48548b5b481e8e7c82 Mon Sep 17 00:00:00 2001
-From: Jeremy Huddleston <jeremyhu at apple.com>
-Date: Thu, 29 Jul 2010 14:49:10 -0700
-Subject: [PATCH] XQuartz: Make application switching work better for the no-spaces case
-
-We still have the issue with not raising the frontmost window for the case
-when spaces is enabled, and the AppleSpacesSwitchOnActivate preference is
-disabled.
-
-Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
----
- hw/xquartz/X11Application.m     |   28 +++++++++++++++++++++-------
- hw/xquartz/xpr/xprEvent.c       |    2 +-
- miext/rootless/rootless.h       |    4 ++--
- miext/rootless/rootlessWindow.c |   12 +++++++++---
- 4 files changed, 33 insertions(+), 13 deletions(-)
-
-diff --git xorg-server-1.8.99.906/hw/xquartz/X11Application.m xorg-server-1.8.99.906/hw/xquartz/X11Application.m
-index 805ed99..36c39e5 100644
---- xorg-server-1.8.99.906/hw/xquartz/X11Application.m
-+++ xorg-server-1.8.99.906/hw/xquartz/X11Application.m
-@@ -337,7 +337,7 @@ static void message_kit_thread (SEL selector, NSObject *arg) {
-                 case NSApplicationActivatedEventType:
-                     for_x = NO;
-                     if ([self modalWindow] == nil) {
--                        BOOL switch_on_activate, ok;
-+                        BOOL order_all_windows = YES, workspaces, ok;
-                         for_appkit = NO;
-                         
-                         /* FIXME: hack to avoid having to pass the event to appkit,
-@@ -347,13 +347,27 @@ static void message_kit_thread (SEL selector, NSObject *arg) {
-                         [self activateX:YES];
-                         
-                         /* Get the Spaces preference for SwitchOnActivate */
--                        (void)CFPreferencesAppSynchronize(CFSTR(".GlobalPreferences"));
--                        switch_on_activate = CFPreferencesGetAppBooleanValue(CFSTR("AppleSpacesSwitchOnActivate"), CFSTR(".GlobalPreferences"), &ok);
--                        if(!ok)
--                            switch_on_activate = YES;
-+                        (void)CFPreferencesAppSynchronize(CFSTR("com.apple.dock"));
-+                        workspaces = CFPreferencesGetAppBooleanValue(CFSTR("workspaces"), CFSTR("com.apple.dock"), &ok);
-+                        if (!ok)
-+                            workspaces = NO;
-+
-+                        if (workspaces) {
-+                            (void)CFPreferencesAppSynchronize(CFSTR(".GlobalPreferences"));
-+                            order_all_windows = CFPreferencesGetAppBooleanValue(CFSTR("AppleSpacesSwitchOnActivate"), CFSTR(".GlobalPreferences"), &ok);
-+                            if (!ok)
-+                                order_all_windows = YES;
-+                        }
-                         
--                        if ([e data2] & 0x10 && switch_on_activate) // 0x10 is set when we use cmd-tab or the dock icon
--                            DarwinSendDDXEvent(kXquartzBringAllToFront, 0);
-+                        /* TODO: In the workspaces && !AppleSpacesSwitchOnActivate case, the windows are ordered
-+                         *       correctly, but we need to activate the top window on this space if there is
-+                         *       none active.
-+                         *
-+                         *       If there are no active windows, and there are minimized windows, we should
-+                         *       be restoring one of them.
-+                         */
-+                        if ([e data2] & 0x10) // 0x10 is set when we use cmd-tab or the dock icon
-+                            DarwinSendDDXEvent(kXquartzBringAllToFront, 1, order_all_windows);
-                     }
-                     break;
-                     
-diff --git xorg-server-1.8.99.906/hw/xquartz/xpr/xprEvent.c xorg-server-1.8.99.906/hw/xquartz/xpr/xprEvent.c
-index 6245cce..342b54c 100644
---- xorg-server-1.8.99.906/hw/xquartz/xpr/xprEvent.c
-+++ xorg-server-1.8.99.906/hw/xquartz/xpr/xprEvent.c
-@@ -73,7 +73,7 @@ Bool QuartzModeEventHandler(int screenNum, XQuartzEvent *e, DeviceIntPtr dev) {
-             
-         case kXquartzBringAllToFront:
-             DEBUG_LOG("kXquartzBringAllToFront\n");
--            RootlessOrderAllWindows();
-+            RootlessOrderAllWindows(e->data[0]);
-             return TRUE;
-         default:
-             return FALSE;
-diff --git xorg-server-1.8.99.906/miext/rootless/rootless.h xorg-server-1.8.99.906/miext/rootless/rootless.h
-index 00eac4e..dc4213f 100644
---- xorg-server-1.8.99.906/miext/rootless/rootless.h
-+++ xorg-server-1.8.99.906/miext/rootless/rootless.h
-@@ -444,7 +444,7 @@ void RootlessUpdateScreenPixmap(ScreenPtr pScreen);
- void RootlessRepositionWindows(ScreenPtr pScreen);
- 
- /*
-- * Bring all windows to the front of the Aqua stack
-+ * Bring all windows to the front of the native stack
-  */
--void RootlessOrderAllWindows (void);
-+void RootlessOrderAllWindows (Bool include_unhitable);
- #endif /* _ROOTLESS_H */
-diff --git xorg-server-1.8.99.906/miext/rootless/rootlessWindow.c xorg-server-1.8.99.906/miext/rootless/rootlessWindow.c
-index bef8a2f..c1c6bdb 100644
---- xorg-server-1.8.99.906/miext/rootless/rootlessWindow.c
-+++ xorg-server-1.8.99.906/miext/rootless/rootlessWindow.c
-@@ -581,10 +581,15 @@ RootlessReorderWindow(WindowPtr pWin)
- 
-         RootlessStopDrawing(pWin, FALSE);
- 
--        /* Find the next window above this one that has a mapped frame. */
-+        /* Find the next window above this one that has a mapped frame. 
-+         * Only include cases where the windows are in the same category of
-+         * hittability to ensure offscreen windows dont get restacked
-+         * relative to onscreen ones (but that the offscreen ones maintain
-+         * their stacking order if they are explicitly asked to Reorder
-+         */
- 
-         newPrevW = pWin->prevSib;
--        while (newPrevW && (WINREC(newPrevW) == NULL || !newPrevW->realized))
-+        while (newPrevW && (WINREC(newPrevW) == NULL || !newPrevW->realized || newPrevW->rootlessUnhittable != pWin->rootlessUnhittable))
-             newPrevW = newPrevW->prevSib;
- 
-         newPrev = newPrevW != NULL ? WINREC(newPrevW) : NULL;
-@@ -1502,7 +1507,7 @@ RootlessChangeBorderWidth(WindowPtr pWin, unsigned int width)
-  * (i.e in front of Aqua windows) -- called when X11.app is given focus
-  */
- void
--RootlessOrderAllWindows (void)
-+RootlessOrderAllWindows (Bool include_unhitable)
- {
-     int i;
-     WindowPtr pWin;
-@@ -1519,6 +1524,7 @@ RootlessOrderAllWindows (void)
-       for (pWin = pWin->firstChild; pWin != NULL; pWin = pWin->nextSib) {
- 	if (!pWin->realized) continue;
- 	if (RootlessEnsureFrame(pWin) == NULL) continue;
-+        if (!include_unhitable && pWin->rootlessUnhittable) continue;
- 	RootlessReorderWindow (pWin);
-       }
-     }
--- 
-1.5.6.6
-

Added: trunk/dports/x11/xorg-server-devel/files/0002-XQuartz-RandR-Implement-basic-RandR-functionality.patch
===================================================================
--- trunk/dports/x11/xorg-server-devel/files/0002-XQuartz-RandR-Implement-basic-RandR-functionality.patch	                        (rev 0)
+++ trunk/dports/x11/xorg-server-devel/files/0002-XQuartz-RandR-Implement-basic-RandR-functionality.patch	2010-08-21 06:35:57 UTC (rev 70781)
@@ -0,0 +1,729 @@
+From 4bf1f56d775b46099169f5218c12114a46c8c136 Mon Sep 17 00:00:00 2001
+From: Jan Hauffa <hauffa at in.tum.de>
+Date: Fri, 16 Jul 2010 17:18:03 +0200
+Subject: [PATCH] XQuartz: RandR: Implement basic RandR functionality.
+
+Querying and changing of resolution and refresh rate is supported,
+rotation is not implemented yet.
+
+Signed-off-by: Jan Hauffa <hauffa at in.tum.de>
+Reviewed-by: Jeremy Huddleston <jeremyhu at apple.com>
+---
+ hw/xquartz/Makefile.am     |    2 +
+ hw/xquartz/quartz.c        |  104 +++---------
+ hw/xquartz/quartz.h        |    3 +-
+ hw/xquartz/quartzCommon.h  |    3 +
+ hw/xquartz/quartzRandR.c   |  394 ++++++++++++++++++++++++++++++++++++++++++++
+ hw/xquartz/quartzRandR.h   |   37 ++++
+ hw/xquartz/xpr/xprScreen.c |    6 +-
+ 7 files changed, 469 insertions(+), 80 deletions(-)
+ create mode 100644 hw/xquartz/quartzRandR.c
+ create mode 100644 hw/xquartz/quartzRandR.h
+
+diff --git xorg-server-1.9.0/hw/xquartz/Makefile.am xorg-server-1.9.0/hw/xquartz/Makefile.am
+index 96b139f..721d272 100644
+--- xorg-server-1.9.0/hw/xquartz/Makefile.am
++++ xorg-server-1.9.0/hw/xquartz/Makefile.am
+@@ -34,6 +34,7 @@ libXquartz_la_SOURCES = \
+ 	quartzCocoa.m \
+ 	quartzKeyboard.c \
+ 	quartzStartup.c \
++	quartzRandR.c \
+ 	threadSafety.c
+ 
+ EXTRA_DIST = \
+@@ -49,6 +50,7 @@ EXTRA_DIST = \
+ 	quartzAudio.h \
+ 	quartzCommon.h \
+ 	quartzKeyboard.h \
++	quartzRandR.h \
+ 	sanitizedCarbon.h \
+ 	sanitizedCocoa.h \
+ 	threadSafety.h
+diff --git xorg-server-1.9.0/hw/xquartz/quartz.c xorg-server-1.9.0/hw/xquartz/quartz.c
+index eee6151..a4d7474 100644
+--- xorg-server-1.9.0/hw/xquartz/quartz.c
++++ xorg-server-1.9.0/hw/xquartz/quartz.c
+@@ -35,6 +35,7 @@
+ #endif
+ 
+ #include "quartzCommon.h"
++#include "quartzRandR.h"
+ #include "inputstr.h"
+ #include "quartz.h"
+ #include "darwin.h"
+@@ -46,7 +47,6 @@
+ #include "X11Application.h"
+ 
+ #include <X11/extensions/applewmconst.h>
+-#include <X11/extensions/randr.h>
+ 
+ // X headers
+ #include "scrnintstr.h"
+@@ -56,6 +56,8 @@
+ #include "mi.h"
+ 
+ // System headers
++#include <stdlib.h>
++#include <string.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <fcntl.h>
+@@ -64,8 +66,6 @@
+ #include <rootlessCommon.h>
+ #include <Xplugin.h>
+ 
+-#define FAKE_RANDR 1
+-
+ // Shared global variables for Quartz modes
+ int                     quartzUseSysBeep = 0;
+ int                     quartzServerVisible = FALSE;
+@@ -76,30 +76,6 @@ const char             *quartzOpenGLBundle = NULL;
+ int                     quartzFullscreenDisableHotkeys = TRUE;
+ int                     quartzOptionSendsAlt = FALSE;
+ 
+-#if defined(RANDR) && !defined(FAKE_RANDR)
+-Bool QuartzRandRGetInfo (ScreenPtr pScreen, Rotation *rotations) {
+-  return FALSE;
+-}
+-
+-Bool QuartzRandRSetConfig (ScreenPtr           pScreen,
+-			       Rotation            randr,
+-			       int                 rate,
+-			       RRScreenSizePtr     pSize) {
+-  return FALSE;
+-}
+-
+-Bool QuartzRandRInit (ScreenPtr pScreen) {
+-  rrScrPrivPtr    pScrPriv;
+-    
+-  if (!RRScreenInit (pScreen)) return FALSE;
+-
+-  pScrPriv = rrGetScrPriv(pScreen);
+-  pScrPriv->rrGetInfo = QuartzRandRGetInfo;
+-  pScrPriv->rrSetConfig = QuartzRandRSetConfig;
+-  return TRUE;
+-}
+-#endif
+-
+ /*
+ ===========================================================================
+ 
+@@ -143,6 +119,13 @@ Bool QuartzSetupScreen(
+     if (! quartzProcs->InitCursor(pScreen))
+         return FALSE;
+ 
++#if defined(RANDR) && !defined(FAKE_RANDR)
++    if(!QuartzRandRInit(pScreen)) {
++        DEBUG_LOG("Failed to init RandR extension.\n");
++        return FALSE;
++    }
++#endif
++
+     return TRUE;
+ }
+ 
+@@ -165,11 +148,6 @@ void QuartzInitOutput(
+     if (!dixRegisterPrivateKey(&quartzScreenKeyRec, PRIVATE_SCREEN, 0))
+ 	FatalError("Failed to alloc quartz screen private.\n");
+ 
+-#if defined(RANDR) && !defined(FAKE_RANDR)
+-    if(!QuartzRandRInit(pScreen))
+-        FatalError("Failed to init RandR extension.\n");
+-#endif
+-
+     // Do display mode specific initialization
+     quartzProcs->DisplayInit();
+ }
+@@ -191,50 +169,6 @@ void QuartzInitInput(
+ }
+ 
+ 
+-#ifdef FAKE_RANDR
+-
+-static const int padlength[4] = {0, 3, 2, 1};
+-
+-static void
+-RREditConnectionInfo (ScreenPtr pScreen)
+-{
+-    xConnSetup	    *connSetup;
+-    char	    *vendor;
+-    xPixmapFormat   *formats;
+-    xWindowRoot	    *root;
+-    xDepth	    *depth;
+-    xVisualType	    *visual;
+-    int		    screen = 0;
+-    int		    d;
+-
+-    connSetup = (xConnSetup *) ConnectionInfo;
+-    vendor = (char *) connSetup + sizeof (xConnSetup);
+-    formats = (xPixmapFormat *) ((char *) vendor +
+-				 connSetup->nbytesVendor +
+-				 padlength[connSetup->nbytesVendor & 3]);
+-    root = (xWindowRoot *) ((char *) formats +
+-			    sizeof (xPixmapFormat) * screenInfo.numPixmapFormats);
+-    while (screen != pScreen->myNum)
+-    {
+-	depth = (xDepth *) ((char *) root + 
+-			    sizeof (xWindowRoot));
+-	for (d = 0; d < root->nDepths; d++)
+-	{
+-	    visual = (xVisualType *) ((char *) depth +
+-				      sizeof (xDepth));
+-	    depth = (xDepth *) ((char *) visual +
+-				depth->nVisuals * sizeof (xVisualType));
+-	}
+-	root = (xWindowRoot *) ((char *) depth);
+-	screen++;
+-    }
+-    root->pixWidth = pScreen->width;
+-    root->pixHeight = pScreen->height;
+-    root->mmWidth = pScreen->mmWidth;
+-    root->mmHeight = pScreen->mmHeight;
+-}
+-#endif
+-
+ void QuartzUpdateScreens(void) {
+     ScreenPtr pScreen;
+     WindowPtr pRoot;
+@@ -255,7 +189,7 @@ void QuartzUpdateScreens(void) {
+     pScreen = screenInfo.screens[0];
+     
+     PseudoramiXResetScreens();
+-    quartzProcs->AddPseudoramiXScreens(&x, &y, &width, &height);
++    quartzProcs->AddPseudoramiXScreens(&x, &y, &width, &height, pScreen);
+     
+     pScreen->x = x;
+     pScreen->y = y;
+@@ -446,3 +380,19 @@ 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);
+ }
++
++/*
++ * QuartzCopyDisplayIDs
++ *  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) {
++    QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
++    int size = displayCount * sizeof(CGDirectDisplayID);
++
++    free(pQuartzScreen->displayIDs);
++    pQuartzScreen->displayIDs = malloc(size);
++    memcpy(pQuartzScreen->displayIDs, displayIDs, size);
++    pQuartzScreen->displayCount = displayCount;
++}
+diff --git xorg-server-1.9.0/hw/xquartz/quartz.h xorg-server-1.9.0/hw/xquartz/quartz.h
+index b1a3f31..1b924e7 100644
+--- xorg-server-1.9.0/hw/xquartz/quartz.h
++++ xorg-server-1.9.0/hw/xquartz/quartz.h
+@@ -62,7 +62,8 @@ typedef void (*ResumeScreenProc)(ScreenPtr pScreen);
+ /*
+  * Screen state change support
+  */
+-typedef void (*AddPseudoramiXScreensProc)(int *x, int *y, int *width, int *height);
++typedef void (*AddPseudoramiXScreensProc)
++    (int *x, int *y, int *width, int *height, ScreenPtr pScreen);
+ typedef void (*UpdateScreenProc)(ScreenPtr pScreen);
+ 
+ /*
+diff --git xorg-server-1.9.0/hw/xquartz/quartzCommon.h xorg-server-1.9.0/hw/xquartz/quartzCommon.h
+index eb761ed..d0d358b 100644
+--- xorg-server-1.9.0/hw/xquartz/quartzCommon.h
++++ xorg-server-1.9.0/hw/xquartz/quartzCommon.h
+@@ -51,6 +51,9 @@ typedef struct {
+ #define QUARTZ_PRIV(pScreen) \
+     ((QuartzScreenPtr)dixLookupPrivate(&pScreen->devPrivates, quartzScreenKey))
+ 
++void QuartzCopyDisplayIDs(ScreenPtr pScreen,
++                          int displayCount, CGDirectDisplayID *displayIDs);
++
+ // User preferences used by Quartz modes
+ extern int              quartzUseSysBeep;
+ extern int              quartzFullscreenDisableHotkeys;
+diff --git xorg-server-1.9.0/hw/xquartz/quartzRandR.c xorg-server-1.9.0/hw/xquartz/quartzRandR.c
+new file mode 100644
+index 0000000..6747752
+--- /dev/null
++++ xorg-server-1.9.0/hw/xquartz/quartzRandR.c
+@@ -0,0 +1,394 @@
++/*
++ *
++ * Quartz-specific support for the XRandR extension
++ *
++ * Copyright (c) 2001-2004 Greg Parker and Torrey T. Lyons,
++ *               2010      Jan Hauffa.
++ *                 All Rights Reserved.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
++ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++ * DEALINGS IN THE SOFTWARE.
++ *
++ * Except as contained in this notice, the name(s) of the above copyright
++ * holders shall not be used in advertising or otherwise to promote the sale,
++ * use or other dealings in this Software without prior written authorization.
++ */
++
++#include "sanitizedCarbon.h"
++
++#ifdef HAVE_DIX_CONFIG_H
++#include <dix-config.h>
++#endif
++
++#include "quartzCommon.h"
++#include "quartzRandR.h"
++
++#if defined(FAKE_RANDR)
++#include "scrnintstr.h"
++#include "windowstr.h"
++#else
++#include <X11/extensions/randr.h>
++#include <randrstr.h>
++#include <IOKit/graphics/IOGraphicsTypes.h>
++#endif
++
++
++#if defined(FAKE_RANDR)
++
++static const int padlength[4] = {0, 3, 2, 1};
++
++void
++RREditConnectionInfo (ScreenPtr pScreen)
++{
++    xConnSetup	    *connSetup;
++    char	    *vendor;
++    xPixmapFormat   *formats;
++    xWindowRoot	    *root;
++    xDepth	    *depth;
++    xVisualType	    *visual;
++    int		    screen = 0;
++    int		    d;
++
++    connSetup = (xConnSetup *) ConnectionInfo;
++    vendor = (char *) connSetup + sizeof (xConnSetup);
++    formats = (xPixmapFormat *) ((char *) vendor +
++				 connSetup->nbytesVendor +
++				 padlength[connSetup->nbytesVendor & 3]);
++    root = (xWindowRoot *) ((char *) formats +
++			    sizeof (xPixmapFormat) * screenInfo.numPixmapFormats);
++    while (screen != pScreen->myNum)
++    {
++	depth = (xDepth *) ((char *) root + 
++			    sizeof (xWindowRoot));
++	for (d = 0; d < root->nDepths; d++)
++	{
++	    visual = (xVisualType *) ((char *) depth +
++				      sizeof (xDepth));
++	    depth = (xDepth *) ((char *) visual +
++				depth->nVisuals * sizeof (xVisualType));
++	}
++	root = (xWindowRoot *) ((char *) depth);
++	screen++;
++    }
++    root->pixWidth = pScreen->width;
++    root->pixHeight = pScreen->height;
++    root->mmWidth = pScreen->mmWidth;
++    root->mmHeight = pScreen->mmHeight;
++}
++
++#else  /* defined(FAKE_RANDR) */
++
++#define DEFAULT_REFRESH  60
++#define kDisplayModeUsableFlags  (kDisplayModeValidFlag | kDisplayModeSafeFlag)
++
++typedef struct {
++    size_t width, height;
++    int refresh;
++    const void *ref;
++} QuartzModeInfo, *QuartzModeInfoPtr;
++
++typedef Bool (*QuartzModeCallback)
++    (ScreenPtr, CGDirectDisplayID, QuartzModeInfoPtr, void *);
++
++
++#if defined(USE_DEPRECATED_CG_API)
++
++static long getDictLong (CFDictionaryRef dictRef, CFStringRef key) {
++    long value;
++
++    CFNumberRef numRef = (CFNumberRef) CFDictionaryGetValue(dictRef, key);
++    if (!numRef)
++        return 0;
++
++    if (!CFNumberGetValue(numRef, kCFNumberLongType, &value))
++        return 0;
++    return value;
++}
++
++static double getDictDouble (CFDictionaryRef dictRef, CFStringRef key) {
++    double value;
++
++    CFNumberRef numRef = (CFNumberRef) CFDictionaryGetValue(dictRef, key);
++    if (!numRef)
++        return 0.0;
++
++    if (!CFNumberGetValue(numRef, kCFNumberDoubleType, &value))
++        return 0.0;
++    return value;
++}
++
++static void QuartzRandRGetModeInfo (CFDictionaryRef modeRef,
++                                    QuartzModeInfoPtr pMode) {
++    pMode->width = (size_t) getDictLong(modeRef, kCGDisplayWidth);
++    pMode->height = (size_t) getDictLong(modeRef, kCGDisplayHeight);
++    pMode->refresh = (int)(getDictDouble(modeRef, kCGDisplayRefreshRate) + 0.5);
++    if (pMode->refresh == 0)
++        pMode->refresh = DEFAULT_REFRESH;
++    pMode->ref = NULL;
++}
++
++static Bool QuartzRandRGetCurrentModeInfo (CGDirectDisplayID screenId,
++                                           QuartzModeInfoPtr pMode) {
++    CFDictionaryRef curModeRef = CGDisplayCurrentMode(screenId);
++    if (!curModeRef)
++        return FALSE;
++
++    QuartzRandRGetModeInfo(curModeRef, pMode);
++    return TRUE;
++}
++
++static Bool QuartzRandRSetMode (CGDirectDisplayID screenId,
++                                QuartzModeInfoPtr pMode) {
++    CFDictionaryRef modeRef = (CFDictionaryRef) pMode->ref;
++    return (CGDisplaySwitchToMode(screenId, modeRef) != kCGErrorSuccess);
++}
++
++static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
++                                       CGDirectDisplayID screenId,
++                                       QuartzModeCallback callback,
++                                       void *data) {
++    CFDictionaryRef curModeRef, modeRef;
++    long curBpp;
++    CFArrayRef modes;
++    QuartzModeInfo modeInfo;
++    int i;
++
++    curModeRef = CGDisplayCurrentMode(screenId);
++    if (!curModeRef)
++        return FALSE;
++    curBpp = getDictLong(curModeRef, kCGDisplayBitsPerPixel);
++
++    modes = CGDisplayAvailableModes(screenId);
++    if (!modes)
++        return FALSE;
++    for (i = 0; i < CFArrayGetCount(modes); i++) {
++        modeRef = (CFDictionaryRef) CFArrayGetValueAtIndex(modes, i);
++
++        /* Skip modes that are not usable on the current display or have a
++           different pixel encoding than the current mode. */
++        if (((unsigned long) getDictLong(modeRef, kCGDisplayIOFlags) &
++             kDisplayModeUsableFlags) != kDisplayModeUsableFlags)
++            continue;
++        if (getDictLong(modeRef, kCGDisplayBitsPerPixel) != curBpp)
++            continue;
++
++        QuartzRandRGetModeInfo(modeRef, &modeInfo);
++        modeInfo.ref = modeRef;
++        if (!callback(pScreen, screenId, &modeInfo, data))
++            break;
++    }
++    return TRUE;
++}
++
++#else  /* defined(USE_DEPRECATED_CG_API) */
++
++static void QuartzRandRGetModeInfo (CGDisplayModeRef modeRef,
++                                    QuartzModeInfoPtr pMode) {
++    pMode->width = CGDisplayModeGetWidth(modeRef);
++    pMode->height = CGDisplayModeGetHeight(modeRef);
++    pMode->refresh = (int) (CGDisplayModeGetRefreshRate(modeRef) + 0.5);
++    if (pMode->refresh == 0)
++        pMode->refresh = DEFAULT_REFRESH;
++    pMode->ref = NULL;
++}
++
++static Bool QuartzRandRGetCurrentModeInfo (CGDirectDisplayID screenId,
++                                           QuartzModeInfoPtr pMode) {
++    CGDisplayModeRef curModeRef = CGDisplayCopyDisplayMode(screenId);
++    if (!curModeRef)
++        return FALSE;
++
++    QuartzRandRGetModeInfo(curModeRef, pMode);
++    CGDisplayModeRelease(curModeRef);
++    return TRUE;
++}
++
++static Bool QuartzRandRSetMode (CGDirectDisplayID screenId,
++                                QuartzModeInfoPtr pMode) {
++    CGDisplayModeRef modeRef = (CGDisplayModeRef) pMode->ref;
++    if (!modeRef)
++        return FALSE;
++
++    return (CGDisplaySetDisplayMode(screenId, modeRef, NULL) !=
++            kCGErrorSuccess);
++}
++
++static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
++                                       CGDirectDisplayID screenId,
++                                       QuartzModeCallback callback,
++                                       void *data) {
++    CGDisplayModeRef curModeRef, modeRef;
++    CFStringRef curPixelEnc, pixelEnc;
++    CFComparisonResult pixelEncEqual;
++    CFArrayRef modes;
++    QuartzModeInfo modeInfo;
++    int i;
++
++    curModeRef = CGDisplayCopyDisplayMode(screenId);
++    if (!curModeRef)
++        return FALSE;
++    curPixelEnc = CGDisplayModeCopyPixelEncoding(curModeRef);
++    CGDisplayModeRelease(curModeRef);
++
++    modes = CGDisplayCopyAllDisplayModes(screenId, NULL);
++    if (!modes) {
++        CFRelease(curPixelEnc);
++        return FALSE;
++    }
++    for (i = 0; i < CFArrayGetCount(modes); i++) {
++        modeRef = (CGDisplayModeRef) CFArrayGetValueAtIndex(modes, i);
++
++        /* Skip modes that are not usable on the current display or have a
++           different pixel encoding than the current mode. */
++        if ((CGDisplayModeGetIOFlags(modeRef) & kDisplayModeUsableFlags) !=
++            kDisplayModeUsableFlags)
++            continue;
++        pixelEnc = CGDisplayModeCopyPixelEncoding(modeRef);
++        pixelEncEqual = CFStringCompare(pixelEnc, curPixelEnc, 0);
++        CFRelease(pixelEnc);
++        if (pixelEncEqual != kCFCompareEqualTo)
++            continue;
++
++        QuartzRandRGetModeInfo(modeRef, &modeInfo);
++        modeInfo.ref = modeRef;
++        if (!callback(pScreen, screenId, &modeInfo, data))
++            break;
++    }
++    CFRelease(modes);
++
++    CFRelease(curPixelEnc);
++    return TRUE;
++}
++
++#endif  /* defined(USE_DEPRECATED_CG_API) */
++
++
++static Bool QuartzRandRModesEqual (QuartzModeInfoPtr pMode1,
++                                   QuartzModeInfoPtr pMode2) {
++    if (pMode1->width != pMode2->width)
++        return FALSE;
++    if (pMode1->height != pMode2->height)
++        return FALSE;
++    if (pMode1->refresh != pMode2->refresh)
++        return FALSE;
++    return TRUE;
++}
++
++static Bool QuartzRandRGetModeCallback (ScreenPtr pScreen,
++                                        CGDirectDisplayID screenId,
++                                        QuartzModeInfoPtr pMode,
++                                        void *data) {
++    QuartzModeInfoPtr pCurMode = (QuartzModeInfoPtr) data;
++
++    RRScreenSizePtr pSize = RRRegisterSize(pScreen,
++        pMode->width, pMode->height, pScreen->mmWidth, pScreen->mmHeight);
++    if (pSize) {
++        RRRegisterRate(pScreen, pSize, pMode->refresh);
++
++        if (QuartzRandRModesEqual(pMode, pCurMode))
++            RRSetCurrentConfig(pScreen, RR_Rotate_0, pMode->refresh, pSize);
++    }
++    return TRUE;
++}
++
++static Bool QuartzRandRSetModeCallback (ScreenPtr pScreen,
++                                        CGDirectDisplayID screenId,
++                                        QuartzModeInfoPtr pMode,
++                                        void *data) {
++    QuartzModeInfoPtr pReqMode = (QuartzModeInfoPtr) data;
++
++    if (!QuartzRandRModesEqual(pMode, pReqMode))
++        return TRUE;  /* continue enumeration */
++
++    return QuartzRandRSetMode(screenId, pMode);
++}
++
++static Bool QuartzRandRGetInfo (ScreenPtr pScreen, Rotation *rotations) {
++    QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
++    CGDirectDisplayID screenId;
++    QuartzModeInfo curMode;
++
++    *rotations = RR_Rotate_0;  /* TODO: support rotation */
++
++    if (pQuartzScreen->displayCount == 0)
++        return FALSE;
++    if (pQuartzScreen->displayCount > 1) {
++        /* RandR operations are not well-defined for an X11 screen spanning
++           multiple CG displays. Create a single entry for the current virtual
++           resolution. */
++        RRScreenSizePtr pSize = RRRegisterSize(pScreen, pScreen->width,
++            pScreen->height, pScreen->mmWidth, pScreen->mmHeight);
++        if (pSize) {
++            RRRegisterRate(pScreen, pSize, DEFAULT_REFRESH);
++            RRSetCurrentConfig(pScreen, RR_Rotate_0, DEFAULT_REFRESH, pSize);
++        }
++        return TRUE;
++    }
++    screenId = pQuartzScreen->displayIDs[0];
++
++    if (!QuartzRandRGetCurrentModeInfo(screenId, &curMode))
++        return FALSE;
++    return QuartzRandREnumerateModes(pScreen, screenId,
++        QuartzRandRGetModeCallback, &curMode);
++}
++
++static Bool QuartzRandRSetConfig (ScreenPtr           pScreen,
++			          Rotation            randr,
++			          int                 rate,
++			          RRScreenSizePtr     pSize) {
++    QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
++    CGDirectDisplayID screenId;
++    QuartzModeInfo reqMode, curMode;
++
++    if (pQuartzScreen->displayCount == 0)
++        return FALSE;
++    if (pQuartzScreen->displayCount > 1) {
++        /* RandR operations are not well-defined for an X11 screen spanning
++           multiple CG displays. Do not accept any configuations that differ
++           from the current configuration. */
++        return ((pSize->width == pScreen->width) &&
++                (pSize->height == pScreen->height));
++    }
++    screenId = pQuartzScreen->displayIDs[0];
++
++    reqMode.width = pSize->width;
++    reqMode.height = pSize->height;
++    reqMode.refresh = rate;
++
++    /* Do not switch modes if requested mode is equal to current mode. */
++    if (!QuartzRandRGetCurrentModeInfo(screenId, &curMode))
++        return FALSE;
++    if (QuartzRandRModesEqual(&reqMode, &curMode))
++        return TRUE;
++
++    return QuartzRandREnumerateModes(pScreen, screenId,
++        QuartzRandRSetModeCallback, &reqMode);
++}
++
++Bool QuartzRandRInit (ScreenPtr pScreen) {
++    rrScrPrivPtr    pScrPriv;
++    
++    if (!RRScreenInit (pScreen)) return FALSE;
++
++    pScrPriv = rrGetScrPriv(pScreen);
++    pScrPriv->rrGetInfo = QuartzRandRGetInfo;
++    pScrPriv->rrSetConfig = QuartzRandRSetConfig;
++    return TRUE;
++}
++
++#endif  /* defined(FAKE_RANDR) */
+diff --git xorg-server-1.9.0/hw/xquartz/quartzRandR.h xorg-server-1.9.0/hw/xquartz/quartzRandR.h
+new file mode 100644
+index 0000000..a190205
+--- /dev/null
++++ xorg-server-1.9.0/hw/xquartz/quartzRandR.h
+@@ -0,0 +1,37 @@
++/*
++ * quartzRandR.h
++ *
++ * Copyright (c) 2010 Jan Hauffa.
++ *                 All Rights Reserved.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
++ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++ * DEALINGS IN THE SOFTWARE.
++ *
++ * Except as contained in this notice, the name(s) of the above copyright
++ * holders shall not be used in advertising or otherwise to promote the sale,
++ * use or other dealings in this Software without prior written authorization.
++ */
++
++/*define FAKE_RANDR 1*/
++#define USE_DEPRECATED_CG_API 1
++
++#if defined(FAKE_RANDR)
++void RREditConnectionInfo (ScreenPtr pScreen);
++#else
++Bool QuartzRandRInit (ScreenPtr pScreen);
++#endif
+diff --git xorg-server-1.9.0/hw/xquartz/xpr/xprScreen.c xorg-server-1.9.0/hw/xquartz/xpr/xprScreen.c
+index 87e97d4..0e36ee1 100644
+--- xorg-server-1.9.0/hw/xquartz/xpr/xprScreen.c
++++ xorg-server-1.9.0/hw/xquartz/xpr/xprScreen.c
+@@ -176,7 +176,7 @@ displayScreenBounds(CGDirectDisplayID id)
+  *  with PseudoramiX.
+  */
+ static void
+-xprAddPseudoramiXScreens(int *x, int *y, int *width, int *height)
++xprAddPseudoramiXScreens(int *x, int *y, int *width, int *height, ScreenPtr pScreen)
+ {
+     CGDisplayCount i, displayCount;
+     CGDirectDisplayID *displayList = NULL;
+@@ -199,6 +199,7 @@ xprAddPseudoramiXScreens(int *x, int *y, int *width, int *height)
+     if(!displayList)
+         FatalError("Unable to allocate memory for list of displays.\n");
+     CGGetActiveDisplayList(displayCount, displayList, &displayCount);
++    QuartzCopyDisplayIDs(pScreen, displayCount, displayList);
+ 
+     /* Get the union of all screens */
+     for (i = 0; i < displayCount; i++) {
+@@ -336,6 +337,7 @@ xprAddScreen(int index, ScreenPtr pScreen)
+         ErrorF("Warning: noPseudoramiXExtension!\n");
+         
+         dpy = displayAtIndex(index);
++        QuartzCopyDisplayIDs(pScreen, 1, &dpy);
+ 
+         frame = displayScreenBounds(dpy);
+ 
+@@ -346,7 +348,7 @@ xprAddScreen(int index, ScreenPtr pScreen)
+     }
+     else
+     {
+-        xprAddPseudoramiXScreens(&dfb->x, &dfb->y, &dfb->width, &dfb->height);
++        xprAddPseudoramiXScreens(&dfb->x, &dfb->y, &dfb->width, &dfb->height, pScreen);
+     }
+ 
+     /* Passing zero width (pitch) makes miCreateScreenResources set the
+-- 
+1.5.6.6
+

Added: trunk/dports/x11/xorg-server-devel/files/0003-XQuartz-RandR-Toggle-rootless-mode-on-XRandR-mode.patch
===================================================================
--- trunk/dports/x11/xorg-server-devel/files/0003-XQuartz-RandR-Toggle-rootless-mode-on-XRandR-mode.patch	                        (rev 0)
+++ trunk/dports/x11/xorg-server-devel/files/0003-XQuartz-RandR-Toggle-rootless-mode-on-XRandR-mode.patch	2010-08-21 06:35:57 UTC (rev 70781)
@@ -0,0 +1,209 @@
+From 6137fbd27c0afe950cd87cc205d5a0d8a47e361b Mon Sep 17 00:00:00 2001
+From: Jan Hauffa <hauffa at in.tum.de>
+Date: Fri, 16 Jul 2010 17:54:55 +0200
+Subject: [PATCH] XQuartz: RandR: Toggle rootless mode on XRandR mode switch.
+
+Report a fake screen mode that corresponds to the screen mode at startup of the
+server excluding the height of the menu bar. If a client requests this mode,
+rootless mode is enabled. In all other modes, the root window is shown.
+
+Signed-off-by: Jan Hauffa <hauffa at in.tum.de>
+Reviewed-by: Jeremy Huddleston <jeremyhu at apple.com>
+---
+ hw/xquartz/quartzCommon.h |    7 +++
+ hw/xquartz/quartzRandR.c  |   93 +++++++++++++++++++++++++++++++-------------
+ 2 files changed, 72 insertions(+), 28 deletions(-)
+
+diff --git xorg-server-1.9.0/hw/xquartz/quartzCommon.h xorg-server-1.9.0/hw/xquartz/quartzCommon.h
+index d0d358b..851e74c 100644
+--- xorg-server-1.9.0/hw/xquartz/quartzCommon.h
++++ xorg-server-1.9.0/hw/xquartz/quartzCommon.h
+@@ -38,6 +38,12 @@
+ #include <X11/Xdefs.h>
+ #include "privates.h"
+ 
++typedef struct {
++    size_t width, height;
++    int refresh;
++    const void *ref;
++} QuartzModeInfo, *QuartzModeInfoPtr;
++
+ // Quartz specific per screen storage structure
+ typedef struct {
+     // List of CoreGraphics displays that this X11 screen covers.
+@@ -46,6 +52,7 @@ typedef struct {
+     // No CG display will be covered by more than one X11 screen.
+     int displayCount;
+     CGDirectDisplayID *displayIDs;
++    QuartzModeInfo originalMode, fakeMode;
+ } QuartzScreenRec, *QuartzScreenPtr;
+ 
+ #define QUARTZ_PRIV(pScreen) \
+diff --git xorg-server-1.9.0/hw/xquartz/quartzRandR.c xorg-server-1.9.0/hw/xquartz/quartzRandR.c
+index 6747752..f61ff93 100644
+--- xorg-server-1.9.0/hw/xquartz/quartzRandR.c
++++ xorg-server-1.9.0/hw/xquartz/quartzRandR.c
+@@ -37,6 +37,7 @@
+ 
+ #include "quartzCommon.h"
+ #include "quartzRandR.h"
++#include "quartz.h"
+ 
+ #if defined(FAKE_RANDR)
+ #include "scrnintstr.h"
+@@ -96,12 +97,6 @@ RREditConnectionInfo (ScreenPtr pScreen)
+ #define DEFAULT_REFRESH  60
+ #define kDisplayModeUsableFlags  (kDisplayModeValidFlag | kDisplayModeSafeFlag)
+ 
+-typedef struct {
+-    size_t width, height;
+-    int refresh;
+-    const void *ref;
+-} QuartzModeInfo, *QuartzModeInfoPtr;
+-
+ typedef Bool (*QuartzModeCallback)
+     (ScreenPtr, CGDirectDisplayID, QuartzModeInfoPtr, void *);
+ 
+@@ -289,21 +284,30 @@ static Bool QuartzRandRModesEqual (QuartzModeInfoPtr pMode1,
+     return TRUE;
+ }
+ 
+-static Bool QuartzRandRGetModeCallback (ScreenPtr pScreen,
+-                                        CGDirectDisplayID screenId,
+-                                        QuartzModeInfoPtr pMode,
+-                                        void *data) {
+-    QuartzModeInfoPtr pCurMode = (QuartzModeInfoPtr) data;
+-
++static Bool QuartzRandRRegisterMode (ScreenPtr pScreen,
++                                     QuartzModeInfoPtr pMode,
++                                     Bool isCurrentMode) {
+     RRScreenSizePtr pSize = RRRegisterSize(pScreen,
+         pMode->width, pMode->height, pScreen->mmWidth, pScreen->mmHeight);
+     if (pSize) {
+         RRRegisterRate(pScreen, pSize, pMode->refresh);
+ 
+-        if (QuartzRandRModesEqual(pMode, pCurMode))
++        if (isCurrentMode)
+             RRSetCurrentConfig(pScreen, RR_Rotate_0, pMode->refresh, pSize);
++
++        return TRUE;
+     }
+-    return TRUE;
++    return FALSE;
++}
++
++static Bool QuartzRandRGetModeCallback (ScreenPtr pScreen,
++                                        CGDirectDisplayID screenId,
++                                        QuartzModeInfoPtr pMode,
++                                        void *data) {
++    QuartzModeInfoPtr pCurMode = (QuartzModeInfoPtr) data;
++
++    return QuartzRandRRegisterMode(pScreen, pMode,
++        QuartzRandRModesEqual(pMode, pCurMode));
+ }
+ 
+ static Bool QuartzRandRSetModeCallback (ScreenPtr pScreen,
+@@ -329,20 +333,29 @@ static Bool QuartzRandRGetInfo (ScreenPtr pScreen, Rotation *rotations) {
+         return FALSE;
+     if (pQuartzScreen->displayCount > 1) {
+         /* RandR operations are not well-defined for an X11 screen spanning
+-           multiple CG displays. Create a single entry for the current virtual
+-           resolution. */
+-        RRScreenSizePtr pSize = RRRegisterSize(pScreen, pScreen->width,
+-            pScreen->height, pScreen->mmWidth, pScreen->mmHeight);
+-        if (pSize) {
+-            RRRegisterRate(pScreen, pSize, DEFAULT_REFRESH);
+-            RRSetCurrentConfig(pScreen, RR_Rotate_0, DEFAULT_REFRESH, pSize);
+-        }
++           multiple CG displays. Create two entries for the current virtual
++           resolution including/excluding the menu bar. */
++        QuartzRandRRegisterMode(pScreen, &pQuartzScreen->fakeMode,
++            !quartzHasRoot);
++        QuartzRandRRegisterMode(pScreen, &pQuartzScreen->originalMode,
++            quartzHasRoot);
+         return TRUE;
+     }
+     screenId = pQuartzScreen->displayIDs[0];
+ 
+     if (!QuartzRandRGetCurrentModeInfo(screenId, &curMode))
+         return FALSE;
++
++    /* Add a fake mode corresponding to the original resolution excluding the
++       height of the menu bar. */
++    if (!quartzHasRoot &&
++        QuartzRandRModesEqual(&pQuartzScreen->originalMode, &curMode)) {
++        QuartzRandRRegisterMode(pScreen, &pQuartzScreen->fakeMode, TRUE);
++        curMode = pQuartzScreen->fakeMode;
++    }
++    else
++        QuartzRandRRegisterMode(pScreen, &pQuartzScreen->fakeMode, FALSE);
++
+     return QuartzRandREnumerateModes(pScreen, screenId,
+         QuartzRandRGetModeCallback, &curMode);
+ }
+@@ -354,6 +367,21 @@ static Bool QuartzRandRSetConfig (ScreenPtr           pScreen,
+     QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
+     CGDirectDisplayID screenId;
+     QuartzModeInfo reqMode, curMode;
++    Bool rootless = FALSE;
++
++    reqMode.width = pSize->width;
++    reqMode.height = pSize->height;
++    reqMode.refresh = rate;
++
++    /* If the client requested the fake screen mode, switch to rootless mode.
++       Switch to fullscreen mode (root window visible) if a real screen mode was
++       requested. */
++    if (QuartzRandRModesEqual(&reqMode, &pQuartzScreen->fakeMode)) {
++        rootless = TRUE;
++        reqMode = pQuartzScreen->originalMode;
++    }
++    QuartzSetFullscreen(!rootless);
++    QuartzSetRootless(rootless);
+ 
+     if (pQuartzScreen->displayCount == 0)
+         return FALSE;
+@@ -361,15 +389,10 @@ static Bool QuartzRandRSetConfig (ScreenPtr           pScreen,
+         /* RandR operations are not well-defined for an X11 screen spanning
+            multiple CG displays. Do not accept any configuations that differ
+            from the current configuration. */
+-        return ((pSize->width == pScreen->width) &&
+-                (pSize->height == pScreen->height));
++        return QuartzRandRModesEqual(&reqMode, &pQuartzScreen->originalMode);
+     }
+     screenId = pQuartzScreen->displayIDs[0];
+ 
+-    reqMode.width = pSize->width;
+-    reqMode.height = pSize->height;
+-    reqMode.refresh = rate;
+-
+     /* Do not switch modes if requested mode is equal to current mode. */
+     if (!QuartzRandRGetCurrentModeInfo(screenId, &curMode))
+         return FALSE;
+@@ -382,9 +405,23 @@ static Bool QuartzRandRSetConfig (ScreenPtr           pScreen,
+ 
+ Bool QuartzRandRInit (ScreenPtr pScreen) {
+     rrScrPrivPtr    pScrPriv;
++    QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
+     
+     if (!RRScreenInit (pScreen)) return FALSE;
+ 
++    if (pQuartzScreen->displayCount == 1) {
++        if (!QuartzRandRGetCurrentModeInfo(pQuartzScreen->displayIDs[0],
++                                           &pQuartzScreen->originalMode))
++            return FALSE;
++    }
++    else {
++        pQuartzScreen->originalMode.width = pScreen->width;
++        pQuartzScreen->originalMode.height = pScreen->height;
++        pQuartzScreen->originalMode.refresh = DEFAULT_REFRESH;
++    }
++    pQuartzScreen->fakeMode = pQuartzScreen->originalMode;
++    pQuartzScreen->fakeMode.height -= aquaMenuBarHeight;
++
+     pScrPriv = rrGetScrPriv(pScreen);
+     pScrPriv->rrGetInfo = QuartzRandRGetInfo;
+     pScrPriv->rrSetConfig = QuartzRandRSetConfig;
+-- 
+1.5.6.6
+

Deleted: trunk/dports/x11/xorg-server-devel/files/0003-XQuartz-UpdateScreen-at-the-end-of-SetRootless.patch
===================================================================
--- trunk/dports/x11/xorg-server-devel/files/0003-XQuartz-UpdateScreen-at-the-end-of-SetRootless.patch	2010-08-20 22:32:45 UTC (rev 70780)
+++ trunk/dports/x11/xorg-server-devel/files/0003-XQuartz-UpdateScreen-at-the-end-of-SetRootless.patch	2010-08-21 06:35:57 UTC (rev 70781)
@@ -1,44 +0,0 @@
-From ee7fd8fc58d9fadfbb92302ddea224537f068538 Mon Sep 17 00:00:00 2001
-From: Jeremy Huddleston <jeremyhu at apple.com>
-Date: Sun, 1 Aug 2010 11:39:14 -0700
-Subject: [PATCH] XQuartz: UpdateScreen at the end of SetRootless
-
-This will ensure that pRoot is unlocked after the miPaintWindow
-
-Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
----
- hw/xquartz/quartz.c |    4 +++-
- 1 files changed, 3 insertions(+), 1 deletions(-)
-
-diff --git xorg-server-1.8.99.906/hw/xquartz/quartz.c xorg-server-1.8.99.906/hw/xquartz/quartz.c
-index bdaa262..eee6151 100644
---- xorg-server-1.8.99.906/hw/xquartz/quartz.c
-+++ xorg-server-1.8.99.906/hw/xquartz/quartz.c
-@@ -265,7 +265,6 @@ void QuartzUpdateScreens(void) {
-     pScreen->height = height;
-     
-     DarwinAdjustScreenOrigins(&screenInfo);
--    quartzProcs->UpdateScreen(pScreen);
-     
-     /* DarwinAdjustScreenOrigins or UpdateScreen may change pScreen->x/y,
-      * so use it rather than x/y
-@@ -277,6 +276,7 @@ void QuartzUpdateScreens(void) {
-     pRoot = pScreen->root;
-     AppleWMSetScreenOrigin(pRoot);
-     pScreen->ResizeWindow(pRoot, x - sx, y - sy, width, height, NULL);
-+
-     miPaintWindow(pRoot, &pRoot->borderClip,  PW_BACKGROUND);
- 
-     /* <rdar://problem/7770779> pointer events are clipped to old display region after display reconfiguration
-@@ -303,6 +303,8 @@ void QuartzUpdateScreens(void) {
-     e.u.configureNotify.borderWidth = wBorderWidth(pRoot);
-     e.u.configureNotify.override = pRoot->overrideRedirect;
-     DeliverEvents(pRoot, &e, 1, NullWindow);
-+
-+    quartzProcs->UpdateScreen(pScreen);
-     
- #ifdef FAKE_RANDR
-     RREditConnectionInfo(pScreen);
--- 
-1.5.6.6
-

Added: trunk/dports/x11/xorg-server-devel/files/0004-XQuartz-RandR-Remove-FAKE_RANDR-code.patch
===================================================================
--- trunk/dports/x11/xorg-server-devel/files/0004-XQuartz-RandR-Remove-FAKE_RANDR-code.patch	                        (rev 0)
+++ trunk/dports/x11/xorg-server-devel/files/0004-XQuartz-RandR-Remove-FAKE_RANDR-code.patch	2010-08-21 06:35:57 UTC (rev 70781)
@@ -0,0 +1,127 @@
+From c1b8fe806f5f011d5e6be04a793f1de3d920bfc1 Mon Sep 17 00:00:00 2001
+From: Jan Hauffa <hauffa at in.tum.de>
+Date: Fri, 16 Jul 2010 17:56:44 +0200
+Subject: [PATCH] XQuartz: RandR: Remove FAKE_RANDR code.
+
+Signed-off-by: Jan Hauffa <hauffa at in.tum.de>
+Reviewed-by: Jeremy Huddleston <jeremyhu at apple.com>
+---
+ hw/xquartz/quartz.c      |    6 +----
+ hw/xquartz/quartzRandR.c |   52 ----------------------------------------------
+ hw/xquartz/quartzRandR.h |    5 ----
+ 3 files changed, 1 insertions(+), 62 deletions(-)
+
+diff --git xorg-server-1.9.0/hw/xquartz/quartz.c xorg-server-1.9.0/hw/xquartz/quartz.c
+index a4d7474..a52cac9 100644
+--- xorg-server-1.9.0/hw/xquartz/quartz.c
++++ xorg-server-1.9.0/hw/xquartz/quartz.c
+@@ -119,7 +119,7 @@ Bool QuartzSetupScreen(
+     if (! quartzProcs->InitCursor(pScreen))
+         return FALSE;
+ 
+-#if defined(RANDR) && !defined(FAKE_RANDR)
++#if defined(RANDR)
+     if(!QuartzRandRInit(pScreen)) {
+         DEBUG_LOG("Failed to init RandR extension.\n");
+         return FALSE;
+@@ -239,10 +239,6 @@ void QuartzUpdateScreens(void) {
+     DeliverEvents(pRoot, &e, 1, NullWindow);
+ 
+     quartzProcs->UpdateScreen(pScreen);
+-    
+-#ifdef FAKE_RANDR
+-    RREditConnectionInfo(pScreen);
+-#endif    
+ }
+ 
+ void QuartzSetFullscreen(Bool state) {
+diff --git xorg-server-1.9.0/hw/xquartz/quartzRandR.c xorg-server-1.9.0/hw/xquartz/quartzRandR.c
+index f61ff93..b3b315c 100644
+--- xorg-server-1.9.0/hw/xquartz/quartzRandR.c
++++ xorg-server-1.9.0/hw/xquartz/quartzRandR.c
+@@ -39,60 +39,10 @@
+ #include "quartzRandR.h"
+ #include "quartz.h"
+ 
+-#if defined(FAKE_RANDR)
+-#include "scrnintstr.h"
+-#include "windowstr.h"
+-#else
+ #include <X11/extensions/randr.h>
+ #include <randrstr.h>
+ #include <IOKit/graphics/IOGraphicsTypes.h>
+-#endif
+-
+-
+-#if defined(FAKE_RANDR)
+-
+-static const int padlength[4] = {0, 3, 2, 1};
+-
+-void
+-RREditConnectionInfo (ScreenPtr pScreen)
+-{
+-    xConnSetup	    *connSetup;
+-    char	    *vendor;
+-    xPixmapFormat   *formats;
+-    xWindowRoot	    *root;
+-    xDepth	    *depth;
+-    xVisualType	    *visual;
+-    int		    screen = 0;
+-    int		    d;
+-
+-    connSetup = (xConnSetup *) ConnectionInfo;
+-    vendor = (char *) connSetup + sizeof (xConnSetup);
+-    formats = (xPixmapFormat *) ((char *) vendor +
+-				 connSetup->nbytesVendor +
+-				 padlength[connSetup->nbytesVendor & 3]);
+-    root = (xWindowRoot *) ((char *) formats +
+-			    sizeof (xPixmapFormat) * screenInfo.numPixmapFormats);
+-    while (screen != pScreen->myNum)
+-    {
+-	depth = (xDepth *) ((char *) root + 
+-			    sizeof (xWindowRoot));
+-	for (d = 0; d < root->nDepths; d++)
+-	{
+-	    visual = (xVisualType *) ((char *) depth +
+-				      sizeof (xDepth));
+-	    depth = (xDepth *) ((char *) visual +
+-				depth->nVisuals * sizeof (xVisualType));
+-	}
+-	root = (xWindowRoot *) ((char *) depth);
+-	screen++;
+-    }
+-    root->pixWidth = pScreen->width;
+-    root->pixHeight = pScreen->height;
+-    root->mmWidth = pScreen->mmWidth;
+-    root->mmHeight = pScreen->mmHeight;
+-}
+ 
+-#else  /* defined(FAKE_RANDR) */
+ 
+ #define DEFAULT_REFRESH  60
+ #define kDisplayModeUsableFlags  (kDisplayModeValidFlag | kDisplayModeSafeFlag)
+@@ -427,5 +377,3 @@ Bool QuartzRandRInit (ScreenPtr pScreen) {
+     pScrPriv->rrSetConfig = QuartzRandRSetConfig;
+     return TRUE;
+ }
+-
+-#endif  /* defined(FAKE_RANDR) */
+diff --git xorg-server-1.9.0/hw/xquartz/quartzRandR.h xorg-server-1.9.0/hw/xquartz/quartzRandR.h
+index a190205..711c3f3 100644
+--- xorg-server-1.9.0/hw/xquartz/quartzRandR.h
++++ xorg-server-1.9.0/hw/xquartz/quartzRandR.h
+@@ -27,11 +27,6 @@
+  * use or other dealings in this Software without prior written authorization.
+  */
+ 
+-/*define FAKE_RANDR 1*/
+ #define USE_DEPRECATED_CG_API 1
+ 
+-#if defined(FAKE_RANDR)
+-void RREditConnectionInfo (ScreenPtr pScreen);
+-#else
+ Bool QuartzRandRInit (ScreenPtr pScreen);
+-#endif
+-- 
+1.5.6.6
+

Deleted: trunk/dports/x11/xorg-server-devel/files/0004-XQuartz-xpr-Bail-on-errors-during-unlock-and-destr.patch
===================================================================
--- trunk/dports/x11/xorg-server-devel/files/0004-XQuartz-xpr-Bail-on-errors-during-unlock-and-destr.patch	2010-08-20 22:32:45 UTC (rev 70780)
+++ trunk/dports/x11/xorg-server-devel/files/0004-XQuartz-xpr-Bail-on-errors-during-unlock-and-destr.patch	2010-08-21 06:35:57 UTC (rev 70781)
@@ -1,49 +0,0 @@
-From 5d1d9d9ae39fab2ee2ac085f9776f82768828dc8 Mon Sep 17 00:00:00 2001
-From: Jeremy Huddleston <jeremyhu at apple.com>
-Date: Sun, 1 Aug 2010 11:41:58 -0700
-Subject: [PATCH] XQuartz: xpr: Bail on errors during unlock and destroy
-
-Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
----
- hw/xquartz/xpr/xprFrame.c |   10 ++++++++--
- 1 files changed, 8 insertions(+), 2 deletions(-)
-
-diff --git xorg-server-1.8.99.906/hw/xquartz/xpr/xprFrame.c xorg-server-1.8.99.906/hw/xquartz/xpr/xprFrame.c
-index 9f5d8a6..42f06ef 100644
---- xorg-server-1.8.99.906/hw/xquartz/xpr/xprFrame.c
-+++ xorg-server-1.8.99.906/hw/xquartz/xpr/xprFrame.c
-@@ -206,13 +206,16 @@ xprCreateFrame(RootlessWindowPtr pFrame, ScreenPtr pScreen,
- static void
- xprDestroyFrame(RootlessFrameID wid)
- {
-+    xp_error err;
-     TA_SERVER();
-     
-     pthread_mutex_lock(&window_hash_mutex);
-     x_hash_table_remove(window_hash, wid);
-     pthread_mutex_unlock(&window_hash_mutex);
- 
--    xp_destroy_window(x_cvt_vptr_to_uint(wid));
-+    err = xp_destroy_window(x_cvt_vptr_to_uint(wid));
-+    if (err != Success)
-+        FatalError("Could not destroy window %i.", (int)x_cvt_vptr_to_uint(wid));
- }
- 
- 
-@@ -366,9 +369,12 @@ xprStartDrawing(RootlessFrameID wid, char **pixelData, int *bytesPerRow)
- static void
- xprStopDrawing(RootlessFrameID wid, Bool flush)
- {
-+    xp_error err;
-     TA_SERVER();
-     
--    xp_unlock_window(x_cvt_vptr_to_uint(wid), flush);
-+    err = xp_unlock_window(x_cvt_vptr_to_uint(wid), flush);
-+    if(err != Success)
-+        FatalError("Could not unlock window %i after drawing.", (int)x_cvt_vptr_to_uint(wid));
- }
- 
- 
--- 
-1.5.6.6
-

Deleted: trunk/dports/x11/xorg-server-devel/files/0005-XQuartz-RandR-Implement-basic-RandR-functionality.patch
===================================================================
--- trunk/dports/x11/xorg-server-devel/files/0005-XQuartz-RandR-Implement-basic-RandR-functionality.patch	2010-08-20 22:32:45 UTC (rev 70780)
+++ trunk/dports/x11/xorg-server-devel/files/0005-XQuartz-RandR-Implement-basic-RandR-functionality.patch	2010-08-21 06:35:57 UTC (rev 70781)
@@ -1,729 +0,0 @@
-From ecac2d4b47d6230cdd1f34d595ca1939a9e3b9c9 Mon Sep 17 00:00:00 2001
-From: Jan Hauffa <hauffa at in.tum.de>
-Date: Fri, 16 Jul 2010 17:18:03 +0200
-Subject: [PATCH] XQuartz: RandR: Implement basic RandR functionality.
-
-Querying and changing of resolution and refresh rate is supported,
-rotation is not implemented yet.
-
-Signed-off-by: Jan Hauffa <hauffa at in.tum.de>
-Reviewed-by: Jeremy Huddleston <jeremyhu at apple.com>
----
- hw/xquartz/Makefile.am     |    2 +
- hw/xquartz/quartz.c        |  104 +++---------
- hw/xquartz/quartz.h        |    3 +-
- hw/xquartz/quartzCommon.h  |    3 +
- hw/xquartz/quartzRandR.c   |  394 ++++++++++++++++++++++++++++++++++++++++++++
- hw/xquartz/quartzRandR.h   |   37 ++++
- hw/xquartz/xpr/xprScreen.c |    6 +-
- 7 files changed, 469 insertions(+), 80 deletions(-)
- create mode 100644 hw/xquartz/quartzRandR.c
- create mode 100644 hw/xquartz/quartzRandR.h
-
-diff --git xorg-server-1.8.99.906/hw/xquartz/Makefile.am xorg-server-1.8.99.906/hw/xquartz/Makefile.am
-index 96b139f..721d272 100644
---- xorg-server-1.8.99.906/hw/xquartz/Makefile.am
-+++ xorg-server-1.8.99.906/hw/xquartz/Makefile.am
-@@ -34,6 +34,7 @@ libXquartz_la_SOURCES = \
- 	quartzCocoa.m \
- 	quartzKeyboard.c \
- 	quartzStartup.c \
-+	quartzRandR.c \
- 	threadSafety.c
- 
- EXTRA_DIST = \
-@@ -49,6 +50,7 @@ EXTRA_DIST = \
- 	quartzAudio.h \
- 	quartzCommon.h \
- 	quartzKeyboard.h \
-+	quartzRandR.h \
- 	sanitizedCarbon.h \
- 	sanitizedCocoa.h \
- 	threadSafety.h
-diff --git xorg-server-1.8.99.906/hw/xquartz/quartz.c xorg-server-1.8.99.906/hw/xquartz/quartz.c
-index eee6151..a4d7474 100644
---- xorg-server-1.8.99.906/hw/xquartz/quartz.c
-+++ xorg-server-1.8.99.906/hw/xquartz/quartz.c
-@@ -35,6 +35,7 @@
- #endif
- 
- #include "quartzCommon.h"
-+#include "quartzRandR.h"
- #include "inputstr.h"
- #include "quartz.h"
- #include "darwin.h"
-@@ -46,7 +47,6 @@
- #include "X11Application.h"
- 
- #include <X11/extensions/applewmconst.h>
--#include <X11/extensions/randr.h>
- 
- // X headers
- #include "scrnintstr.h"
-@@ -56,6 +56,8 @@
- #include "mi.h"
- 
- // System headers
-+#include <stdlib.h>
-+#include <string.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
-@@ -64,8 +66,6 @@
- #include <rootlessCommon.h>
- #include <Xplugin.h>
- 
--#define FAKE_RANDR 1
--
- // Shared global variables for Quartz modes
- int                     quartzUseSysBeep = 0;
- int                     quartzServerVisible = FALSE;
-@@ -76,30 +76,6 @@ const char             *quartzOpenGLBundle = NULL;
- int                     quartzFullscreenDisableHotkeys = TRUE;
- int                     quartzOptionSendsAlt = FALSE;
- 
--#if defined(RANDR) && !defined(FAKE_RANDR)
--Bool QuartzRandRGetInfo (ScreenPtr pScreen, Rotation *rotations) {
--  return FALSE;
--}
--
--Bool QuartzRandRSetConfig (ScreenPtr           pScreen,
--			       Rotation            randr,
--			       int                 rate,
--			       RRScreenSizePtr     pSize) {
--  return FALSE;
--}
--
--Bool QuartzRandRInit (ScreenPtr pScreen) {
--  rrScrPrivPtr    pScrPriv;
--    
--  if (!RRScreenInit (pScreen)) return FALSE;
--
--  pScrPriv = rrGetScrPriv(pScreen);
--  pScrPriv->rrGetInfo = QuartzRandRGetInfo;
--  pScrPriv->rrSetConfig = QuartzRandRSetConfig;
--  return TRUE;
--}
--#endif
--
- /*
- ===========================================================================
- 
-@@ -143,6 +119,13 @@ Bool QuartzSetupScreen(
-     if (! quartzProcs->InitCursor(pScreen))
-         return FALSE;
- 
-+#if defined(RANDR) && !defined(FAKE_RANDR)
-+    if(!QuartzRandRInit(pScreen)) {
-+        DEBUG_LOG("Failed to init RandR extension.\n");
-+        return FALSE;
-+    }
-+#endif
-+
-     return TRUE;
- }
- 
-@@ -165,11 +148,6 @@ void QuartzInitOutput(
-     if (!dixRegisterPrivateKey(&quartzScreenKeyRec, PRIVATE_SCREEN, 0))
- 	FatalError("Failed to alloc quartz screen private.\n");
- 
--#if defined(RANDR) && !defined(FAKE_RANDR)
--    if(!QuartzRandRInit(pScreen))
--        FatalError("Failed to init RandR extension.\n");
--#endif
--
-     // Do display mode specific initialization
-     quartzProcs->DisplayInit();
- }
-@@ -191,50 +169,6 @@ void QuartzInitInput(
- }
- 
- 
--#ifdef FAKE_RANDR
--
--static const int padlength[4] = {0, 3, 2, 1};
--
--static void
--RREditConnectionInfo (ScreenPtr pScreen)
--{
--    xConnSetup	    *connSetup;
--    char	    *vendor;
--    xPixmapFormat   *formats;
--    xWindowRoot	    *root;
--    xDepth	    *depth;
--    xVisualType	    *visual;
--    int		    screen = 0;
--    int		    d;
--
--    connSetup = (xConnSetup *) ConnectionInfo;
--    vendor = (char *) connSetup + sizeof (xConnSetup);
--    formats = (xPixmapFormat *) ((char *) vendor +
--				 connSetup->nbytesVendor +
--				 padlength[connSetup->nbytesVendor & 3]);
--    root = (xWindowRoot *) ((char *) formats +
--			    sizeof (xPixmapFormat) * screenInfo.numPixmapFormats);
--    while (screen != pScreen->myNum)
--    {
--	depth = (xDepth *) ((char *) root + 
--			    sizeof (xWindowRoot));
--	for (d = 0; d < root->nDepths; d++)
--	{
--	    visual = (xVisualType *) ((char *) depth +
--				      sizeof (xDepth));
--	    depth = (xDepth *) ((char *) visual +
--				depth->nVisuals * sizeof (xVisualType));
--	}
--	root = (xWindowRoot *) ((char *) depth);
--	screen++;
--    }
--    root->pixWidth = pScreen->width;
--    root->pixHeight = pScreen->height;
--    root->mmWidth = pScreen->mmWidth;
--    root->mmHeight = pScreen->mmHeight;
--}
--#endif
--
- void QuartzUpdateScreens(void) {
-     ScreenPtr pScreen;
-     WindowPtr pRoot;
-@@ -255,7 +189,7 @@ void QuartzUpdateScreens(void) {
-     pScreen = screenInfo.screens[0];
-     
-     PseudoramiXResetScreens();
--    quartzProcs->AddPseudoramiXScreens(&x, &y, &width, &height);
-+    quartzProcs->AddPseudoramiXScreens(&x, &y, &width, &height, pScreen);
-     
-     pScreen->x = x;
-     pScreen->y = y;
-@@ -446,3 +380,19 @@ 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);
- }
-+
-+/*
-+ * QuartzCopyDisplayIDs
-+ *  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) {
-+    QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
-+    int size = displayCount * sizeof(CGDirectDisplayID);
-+
-+    free(pQuartzScreen->displayIDs);
-+    pQuartzScreen->displayIDs = malloc(size);
-+    memcpy(pQuartzScreen->displayIDs, displayIDs, size);
-+    pQuartzScreen->displayCount = displayCount;
-+}
-diff --git xorg-server-1.8.99.906/hw/xquartz/quartz.h xorg-server-1.8.99.906/hw/xquartz/quartz.h
-index b1a3f31..1b924e7 100644
---- xorg-server-1.8.99.906/hw/xquartz/quartz.h
-+++ xorg-server-1.8.99.906/hw/xquartz/quartz.h
-@@ -62,7 +62,8 @@ typedef void (*ResumeScreenProc)(ScreenPtr pScreen);
- /*
-  * Screen state change support
-  */
--typedef void (*AddPseudoramiXScreensProc)(int *x, int *y, int *width, int *height);
-+typedef void (*AddPseudoramiXScreensProc)
-+    (int *x, int *y, int *width, int *height, ScreenPtr pScreen);
- typedef void (*UpdateScreenProc)(ScreenPtr pScreen);
- 
- /*
-diff --git xorg-server-1.8.99.906/hw/xquartz/quartzCommon.h xorg-server-1.8.99.906/hw/xquartz/quartzCommon.h
-index eb761ed..d0d358b 100644
---- xorg-server-1.8.99.906/hw/xquartz/quartzCommon.h
-+++ xorg-server-1.8.99.906/hw/xquartz/quartzCommon.h
-@@ -51,6 +51,9 @@ typedef struct {
- #define QUARTZ_PRIV(pScreen) \
-     ((QuartzScreenPtr)dixLookupPrivate(&pScreen->devPrivates, quartzScreenKey))
- 
-+void QuartzCopyDisplayIDs(ScreenPtr pScreen,
-+                          int displayCount, CGDirectDisplayID *displayIDs);
-+
- // User preferences used by Quartz modes
- extern int              quartzUseSysBeep;
- extern int              quartzFullscreenDisableHotkeys;
-diff --git xorg-server-1.8.99.906/hw/xquartz/quartzRandR.c xorg-server-1.8.99.906/hw/xquartz/quartzRandR.c
-new file mode 100644
-index 0000000..6747752
---- /dev/null
-+++ xorg-server-1.8.99.906/hw/xquartz/quartzRandR.c
-@@ -0,0 +1,394 @@
-+/*
-+ *
-+ * Quartz-specific support for the XRandR extension
-+ *
-+ * Copyright (c) 2001-2004 Greg Parker and Torrey T. Lyons,
-+ *               2010      Jan Hauffa.
-+ *                 All Rights Reserved.
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a
-+ * copy of this software and associated documentation files (the "Software"),
-+ * to deal in the Software without restriction, including without limitation
-+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-+ * and/or sell copies of the Software, and to permit persons to whom the
-+ * Software is furnished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice shall be included in
-+ * all copies or substantial portions of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+ * THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
-+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-+ * DEALINGS IN THE SOFTWARE.
-+ *
-+ * Except as contained in this notice, the name(s) of the above copyright
-+ * holders shall not be used in advertising or otherwise to promote the sale,
-+ * use or other dealings in this Software without prior written authorization.
-+ */
-+
-+#include "sanitizedCarbon.h"
-+
-+#ifdef HAVE_DIX_CONFIG_H
-+#include <dix-config.h>
-+#endif
-+
-+#include "quartzCommon.h"
-+#include "quartzRandR.h"
-+
-+#if defined(FAKE_RANDR)
-+#include "scrnintstr.h"
-+#include "windowstr.h"
-+#else
-+#include <X11/extensions/randr.h>
-+#include <randrstr.h>
-+#include <IOKit/graphics/IOGraphicsTypes.h>
-+#endif
-+
-+
-+#if defined(FAKE_RANDR)
-+
-+static const int padlength[4] = {0, 3, 2, 1};
-+
-+void
-+RREditConnectionInfo (ScreenPtr pScreen)
-+{
-+    xConnSetup	    *connSetup;
-+    char	    *vendor;
-+    xPixmapFormat   *formats;
-+    xWindowRoot	    *root;
-+    xDepth	    *depth;
-+    xVisualType	    *visual;
-+    int		    screen = 0;
-+    int		    d;
-+
-+    connSetup = (xConnSetup *) ConnectionInfo;
-+    vendor = (char *) connSetup + sizeof (xConnSetup);
-+    formats = (xPixmapFormat *) ((char *) vendor +
-+				 connSetup->nbytesVendor +
-+				 padlength[connSetup->nbytesVendor & 3]);
-+    root = (xWindowRoot *) ((char *) formats +
-+			    sizeof (xPixmapFormat) * screenInfo.numPixmapFormats);
-+    while (screen != pScreen->myNum)
-+    {
-+	depth = (xDepth *) ((char *) root + 
-+			    sizeof (xWindowRoot));
-+	for (d = 0; d < root->nDepths; d++)
-+	{
-+	    visual = (xVisualType *) ((char *) depth +
-+				      sizeof (xDepth));
-+	    depth = (xDepth *) ((char *) visual +
-+				depth->nVisuals * sizeof (xVisualType));
-+	}
-+	root = (xWindowRoot *) ((char *) depth);
-+	screen++;
-+    }
-+    root->pixWidth = pScreen->width;
-+    root->pixHeight = pScreen->height;
-+    root->mmWidth = pScreen->mmWidth;
-+    root->mmHeight = pScreen->mmHeight;
-+}
-+
-+#else  /* defined(FAKE_RANDR) */
-+
-+#define DEFAULT_REFRESH  60
-+#define kDisplayModeUsableFlags  (kDisplayModeValidFlag | kDisplayModeSafeFlag)
-+
-+typedef struct {
-+    size_t width, height;
-+    int refresh;
-+    const void *ref;
-+} QuartzModeInfo, *QuartzModeInfoPtr;
-+
-+typedef Bool (*QuartzModeCallback)
-+    (ScreenPtr, CGDirectDisplayID, QuartzModeInfoPtr, void *);
-+
-+
-+#if defined(USE_DEPRECATED_CG_API)
-+
-+static long getDictLong (CFDictionaryRef dictRef, CFStringRef key) {
-+    long value;
-+
-+    CFNumberRef numRef = (CFNumberRef) CFDictionaryGetValue(dictRef, key);
-+    if (!numRef)
-+        return 0;
-+
-+    if (!CFNumberGetValue(numRef, kCFNumberLongType, &value))
-+        return 0;
-+    return value;
-+}
-+
-+static double getDictDouble (CFDictionaryRef dictRef, CFStringRef key) {
-+    double value;
-+
-+    CFNumberRef numRef = (CFNumberRef) CFDictionaryGetValue(dictRef, key);
-+    if (!numRef)
-+        return 0.0;
-+
-+    if (!CFNumberGetValue(numRef, kCFNumberDoubleType, &value))
-+        return 0.0;
-+    return value;
-+}
-+
-+static void QuartzRandRGetModeInfo (CFDictionaryRef modeRef,
-+                                    QuartzModeInfoPtr pMode) {
-+    pMode->width = (size_t) getDictLong(modeRef, kCGDisplayWidth);
-+    pMode->height = (size_t) getDictLong(modeRef, kCGDisplayHeight);
-+    pMode->refresh = (int)(getDictDouble(modeRef, kCGDisplayRefreshRate) + 0.5);
-+    if (pMode->refresh == 0)
-+        pMode->refresh = DEFAULT_REFRESH;
-+    pMode->ref = NULL;
-+}
-+
-+static Bool QuartzRandRGetCurrentModeInfo (CGDirectDisplayID screenId,
-+                                           QuartzModeInfoPtr pMode) {
-+    CFDictionaryRef curModeRef = CGDisplayCurrentMode(screenId);
-+    if (!curModeRef)
-+        return FALSE;
-+
-+    QuartzRandRGetModeInfo(curModeRef, pMode);
-+    return TRUE;
-+}
-+
-+static Bool QuartzRandRSetMode (CGDirectDisplayID screenId,
-+                                QuartzModeInfoPtr pMode) {
-+    CFDictionaryRef modeRef = (CFDictionaryRef) pMode->ref;
-+    return (CGDisplaySwitchToMode(screenId, modeRef) != kCGErrorSuccess);
-+}
-+
-+static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
-+                                       CGDirectDisplayID screenId,
-+                                       QuartzModeCallback callback,
-+                                       void *data) {
-+    CFDictionaryRef curModeRef, modeRef;
-+    long curBpp;
-+    CFArrayRef modes;
-+    QuartzModeInfo modeInfo;
-+    int i;
-+
-+    curModeRef = CGDisplayCurrentMode(screenId);
-+    if (!curModeRef)
-+        return FALSE;
-+    curBpp = getDictLong(curModeRef, kCGDisplayBitsPerPixel);
-+
-+    modes = CGDisplayAvailableModes(screenId);
-+    if (!modes)
-+        return FALSE;
-+    for (i = 0; i < CFArrayGetCount(modes); i++) {
-+        modeRef = (CFDictionaryRef) CFArrayGetValueAtIndex(modes, i);
-+
-+        /* Skip modes that are not usable on the current display or have a
-+           different pixel encoding than the current mode. */
-+        if (((unsigned long) getDictLong(modeRef, kCGDisplayIOFlags) &
-+             kDisplayModeUsableFlags) != kDisplayModeUsableFlags)
-+            continue;
-+        if (getDictLong(modeRef, kCGDisplayBitsPerPixel) != curBpp)
-+            continue;
-+
-+        QuartzRandRGetModeInfo(modeRef, &modeInfo);
-+        modeInfo.ref = modeRef;
-+        if (!callback(pScreen, screenId, &modeInfo, data))
-+            break;
-+    }
-+    return TRUE;
-+}
-+
-+#else  /* defined(USE_DEPRECATED_CG_API) */
-+
-+static void QuartzRandRGetModeInfo (CGDisplayModeRef modeRef,
-+                                    QuartzModeInfoPtr pMode) {
-+    pMode->width = CGDisplayModeGetWidth(modeRef);
-+    pMode->height = CGDisplayModeGetHeight(modeRef);
-+    pMode->refresh = (int) (CGDisplayModeGetRefreshRate(modeRef) + 0.5);
-+    if (pMode->refresh == 0)
-+        pMode->refresh = DEFAULT_REFRESH;
-+    pMode->ref = NULL;
-+}
-+
-+static Bool QuartzRandRGetCurrentModeInfo (CGDirectDisplayID screenId,
-+                                           QuartzModeInfoPtr pMode) {
-+    CGDisplayModeRef curModeRef = CGDisplayCopyDisplayMode(screenId);
-+    if (!curModeRef)
-+        return FALSE;
-+
-+    QuartzRandRGetModeInfo(curModeRef, pMode);
-+    CGDisplayModeRelease(curModeRef);
-+    return TRUE;
-+}
-+
-+static Bool QuartzRandRSetMode (CGDirectDisplayID screenId,
-+                                QuartzModeInfoPtr pMode) {
-+    CGDisplayModeRef modeRef = (CGDisplayModeRef) pMode->ref;
-+    if (!modeRef)
-+        return FALSE;
-+
-+    return (CGDisplaySetDisplayMode(screenId, modeRef, NULL) !=
-+            kCGErrorSuccess);
-+}
-+
-+static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
-+                                       CGDirectDisplayID screenId,
-+                                       QuartzModeCallback callback,
-+                                       void *data) {
-+    CGDisplayModeRef curModeRef, modeRef;
-+    CFStringRef curPixelEnc, pixelEnc;
-+    CFComparisonResult pixelEncEqual;
-+    CFArrayRef modes;
-+    QuartzModeInfo modeInfo;
-+    int i;
-+
-+    curModeRef = CGDisplayCopyDisplayMode(screenId);
-+    if (!curModeRef)
-+        return FALSE;
-+    curPixelEnc = CGDisplayModeCopyPixelEncoding(curModeRef);
-+    CGDisplayModeRelease(curModeRef);
-+
-+    modes = CGDisplayCopyAllDisplayModes(screenId, NULL);
-+    if (!modes) {
-+        CFRelease(curPixelEnc);
-+        return FALSE;
-+    }
-+    for (i = 0; i < CFArrayGetCount(modes); i++) {
-+        modeRef = (CGDisplayModeRef) CFArrayGetValueAtIndex(modes, i);
-+
-+        /* Skip modes that are not usable on the current display or have a
-+           different pixel encoding than the current mode. */
-+        if ((CGDisplayModeGetIOFlags(modeRef) & kDisplayModeUsableFlags) !=
-+            kDisplayModeUsableFlags)
-+            continue;
-+        pixelEnc = CGDisplayModeCopyPixelEncoding(modeRef);
-+        pixelEncEqual = CFStringCompare(pixelEnc, curPixelEnc, 0);
-+        CFRelease(pixelEnc);
-+        if (pixelEncEqual != kCFCompareEqualTo)
-+            continue;
-+
-+        QuartzRandRGetModeInfo(modeRef, &modeInfo);
-+        modeInfo.ref = modeRef;
-+        if (!callback(pScreen, screenId, &modeInfo, data))
-+            break;
-+    }
-+    CFRelease(modes);
-+
-+    CFRelease(curPixelEnc);
-+    return TRUE;
-+}
-+
-+#endif  /* defined(USE_DEPRECATED_CG_API) */
-+
-+
-+static Bool QuartzRandRModesEqual (QuartzModeInfoPtr pMode1,
-+                                   QuartzModeInfoPtr pMode2) {
-+    if (pMode1->width != pMode2->width)
-+        return FALSE;
-+    if (pMode1->height != pMode2->height)
-+        return FALSE;
-+    if (pMode1->refresh != pMode2->refresh)
-+        return FALSE;
-+    return TRUE;
-+}
-+
-+static Bool QuartzRandRGetModeCallback (ScreenPtr pScreen,
-+                                        CGDirectDisplayID screenId,
-+                                        QuartzModeInfoPtr pMode,
-+                                        void *data) {
-+    QuartzModeInfoPtr pCurMode = (QuartzModeInfoPtr) data;
-+
-+    RRScreenSizePtr pSize = RRRegisterSize(pScreen,
-+        pMode->width, pMode->height, pScreen->mmWidth, pScreen->mmHeight);
-+    if (pSize) {
-+        RRRegisterRate(pScreen, pSize, pMode->refresh);
-+
-+        if (QuartzRandRModesEqual(pMode, pCurMode))
-+            RRSetCurrentConfig(pScreen, RR_Rotate_0, pMode->refresh, pSize);
-+    }
-+    return TRUE;
-+}
-+
-+static Bool QuartzRandRSetModeCallback (ScreenPtr pScreen,
-+                                        CGDirectDisplayID screenId,
-+                                        QuartzModeInfoPtr pMode,
-+                                        void *data) {
-+    QuartzModeInfoPtr pReqMode = (QuartzModeInfoPtr) data;
-+
-+    if (!QuartzRandRModesEqual(pMode, pReqMode))
-+        return TRUE;  /* continue enumeration */
-+
-+    return QuartzRandRSetMode(screenId, pMode);
-+}
-+
-+static Bool QuartzRandRGetInfo (ScreenPtr pScreen, Rotation *rotations) {
-+    QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
-+    CGDirectDisplayID screenId;
-+    QuartzModeInfo curMode;
-+
-+    *rotations = RR_Rotate_0;  /* TODO: support rotation */
-+
-+    if (pQuartzScreen->displayCount == 0)
-+        return FALSE;
-+    if (pQuartzScreen->displayCount > 1) {
-+        /* RandR operations are not well-defined for an X11 screen spanning
-+           multiple CG displays. Create a single entry for the current virtual
-+           resolution. */
-+        RRScreenSizePtr pSize = RRRegisterSize(pScreen, pScreen->width,
-+            pScreen->height, pScreen->mmWidth, pScreen->mmHeight);
-+        if (pSize) {
-+            RRRegisterRate(pScreen, pSize, DEFAULT_REFRESH);
-+            RRSetCurrentConfig(pScreen, RR_Rotate_0, DEFAULT_REFRESH, pSize);
-+        }
-+        return TRUE;
-+    }
-+    screenId = pQuartzScreen->displayIDs[0];
-+
-+    if (!QuartzRandRGetCurrentModeInfo(screenId, &curMode))
-+        return FALSE;
-+    return QuartzRandREnumerateModes(pScreen, screenId,
-+        QuartzRandRGetModeCallback, &curMode);
-+}
-+
-+static Bool QuartzRandRSetConfig (ScreenPtr           pScreen,
-+			          Rotation            randr,
-+			          int                 rate,
-+			          RRScreenSizePtr     pSize) {
-+    QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
-+    CGDirectDisplayID screenId;
-+    QuartzModeInfo reqMode, curMode;
-+
-+    if (pQuartzScreen->displayCount == 0)
-+        return FALSE;
-+    if (pQuartzScreen->displayCount > 1) {
-+        /* RandR operations are not well-defined for an X11 screen spanning
-+           multiple CG displays. Do not accept any configuations that differ
-+           from the current configuration. */
-+        return ((pSize->width == pScreen->width) &&
-+                (pSize->height == pScreen->height));
-+    }
-+    screenId = pQuartzScreen->displayIDs[0];
-+
-+    reqMode.width = pSize->width;
-+    reqMode.height = pSize->height;
-+    reqMode.refresh = rate;
-+
-+    /* Do not switch modes if requested mode is equal to current mode. */
-+    if (!QuartzRandRGetCurrentModeInfo(screenId, &curMode))
-+        return FALSE;
-+    if (QuartzRandRModesEqual(&reqMode, &curMode))
-+        return TRUE;
-+
-+    return QuartzRandREnumerateModes(pScreen, screenId,
-+        QuartzRandRSetModeCallback, &reqMode);
-+}
-+
-+Bool QuartzRandRInit (ScreenPtr pScreen) {
-+    rrScrPrivPtr    pScrPriv;
-+    
-+    if (!RRScreenInit (pScreen)) return FALSE;
-+
-+    pScrPriv = rrGetScrPriv(pScreen);
-+    pScrPriv->rrGetInfo = QuartzRandRGetInfo;
-+    pScrPriv->rrSetConfig = QuartzRandRSetConfig;
-+    return TRUE;
-+}
-+
-+#endif  /* defined(FAKE_RANDR) */
-diff --git xorg-server-1.8.99.906/hw/xquartz/quartzRandR.h xorg-server-1.8.99.906/hw/xquartz/quartzRandR.h
-new file mode 100644
-index 0000000..a190205
---- /dev/null
-+++ xorg-server-1.8.99.906/hw/xquartz/quartzRandR.h
-@@ -0,0 +1,37 @@
-+/*
-+ * quartzRandR.h
-+ *
-+ * Copyright (c) 2010 Jan Hauffa.
-+ *                 All Rights Reserved.
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a
-+ * copy of this software and associated documentation files (the "Software"),
-+ * to deal in the Software without restriction, including without limitation
-+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
-+ * and/or sell copies of the Software, and to permit persons to whom the
-+ * Software is furnished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice shall be included in
-+ * all copies or substantial portions of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+ * THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
-+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-+ * DEALINGS IN THE SOFTWARE.
-+ *
-+ * Except as contained in this notice, the name(s) of the above copyright
-+ * holders shall not be used in advertising or otherwise to promote the sale,
-+ * use or other dealings in this Software without prior written authorization.
-+ */
-+
-+/*define FAKE_RANDR 1*/
-+#define USE_DEPRECATED_CG_API 1
-+
-+#if defined(FAKE_RANDR)
-+void RREditConnectionInfo (ScreenPtr pScreen);
-+#else
-+Bool QuartzRandRInit (ScreenPtr pScreen);
-+#endif
-diff --git xorg-server-1.8.99.906/hw/xquartz/xpr/xprScreen.c xorg-server-1.8.99.906/hw/xquartz/xpr/xprScreen.c
-index 87e97d4..0e36ee1 100644
---- xorg-server-1.8.99.906/hw/xquartz/xpr/xprScreen.c
-+++ xorg-server-1.8.99.906/hw/xquartz/xpr/xprScreen.c
-@@ -176,7 +176,7 @@ displayScreenBounds(CGDirectDisplayID id)
-  *  with PseudoramiX.
-  */
- static void
--xprAddPseudoramiXScreens(int *x, int *y, int *width, int *height)
-+xprAddPseudoramiXScreens(int *x, int *y, int *width, int *height, ScreenPtr pScreen)
- {
-     CGDisplayCount i, displayCount;
-     CGDirectDisplayID *displayList = NULL;
-@@ -199,6 +199,7 @@ xprAddPseudoramiXScreens(int *x, int *y, int *width, int *height)
-     if(!displayList)
-         FatalError("Unable to allocate memory for list of displays.\n");
-     CGGetActiveDisplayList(displayCount, displayList, &displayCount);
-+    QuartzCopyDisplayIDs(pScreen, displayCount, displayList);
- 
-     /* Get the union of all screens */
-     for (i = 0; i < displayCount; i++) {
-@@ -336,6 +337,7 @@ xprAddScreen(int index, ScreenPtr pScreen)
-         ErrorF("Warning: noPseudoramiXExtension!\n");
-         
-         dpy = displayAtIndex(index);
-+        QuartzCopyDisplayIDs(pScreen, 1, &dpy);
- 
-         frame = displayScreenBounds(dpy);
- 
-@@ -346,7 +348,7 @@ xprAddScreen(int index, ScreenPtr pScreen)
-     }
-     else
-     {
--        xprAddPseudoramiXScreens(&dfb->x, &dfb->y, &dfb->width, &dfb->height);
-+        xprAddPseudoramiXScreens(&dfb->x, &dfb->y, &dfb->width, &dfb->height, pScreen);
-     }
- 
-     /* Passing zero width (pitch) makes miCreateScreenResources set the
--- 
-1.5.6.6
-

Added: trunk/dports/x11/xorg-server-devel/files/0005-XQuartz-RandR-Use-deprecated-CG-APIs-only-on-Leopa.patch
===================================================================
--- trunk/dports/x11/xorg-server-devel/files/0005-XQuartz-RandR-Use-deprecated-CG-APIs-only-on-Leopa.patch	                        (rev 0)
+++ trunk/dports/x11/xorg-server-devel/files/0005-XQuartz-RandR-Use-deprecated-CG-APIs-only-on-Leopa.patch	2010-08-21 06:35:57 UTC (rev 70781)
@@ -0,0 +1,88 @@
+From ecf109cb6b8971dae79d154bf7ad7c0e41087662 Mon Sep 17 00:00:00 2001
+From: Jeremy Huddleston <jeremyhu at apple.com>
+Date: Sun, 25 Jul 2010 22:25:49 -0700
+Subject: [PATCH] XQuartz: RandR: Use deprecated CG APIs only on Leopard and earlier
+
+Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
+---
+ hw/xquartz/quartzRandR.c |   10 ++++++----
+ hw/xquartz/quartzRandR.h |    6 +++++-
+ 2 files changed, 11 insertions(+), 5 deletions(-)
+
+diff --git xorg-server-1.9.0/hw/xquartz/quartzRandR.c xorg-server-1.9.0/hw/xquartz/quartzRandR.c
+index b3b315c..e46e904 100644
+--- xorg-server-1.9.0/hw/xquartz/quartzRandR.c
++++ xorg-server-1.9.0/hw/xquartz/quartzRandR.c
+@@ -1,9 +1,9 @@
+ /*
+- *
+  * Quartz-specific support for the XRandR extension
+  *
+  * Copyright (c) 2001-2004 Greg Parker and Torrey T. Lyons,
+  *               2010      Jan Hauffa.
++ *               2010      Apple Inc.
+  *                 All Rights Reserved.
+  *
+  * Permission is hereby granted, free of charge, to any person obtaining a
+@@ -39,6 +39,8 @@
+ #include "quartzRandR.h"
+ #include "quartz.h"
+ 
++#include <AvailabilityMacros.h>
++
+ #include <X11/extensions/randr.h>
+ #include <randrstr.h>
+ #include <IOKit/graphics/IOGraphicsTypes.h>
+@@ -51,7 +53,7 @@ typedef Bool (*QuartzModeCallback)
+     (ScreenPtr, CGDirectDisplayID, QuartzModeInfoPtr, void *);
+ 
+ 
+-#if defined(USE_DEPRECATED_CG_API)
++#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060
+ 
+ static long getDictLong (CFDictionaryRef dictRef, CFStringRef key) {
+     long value;
+@@ -140,7 +142,7 @@ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
+     return TRUE;
+ }
+ 
+-#else  /* defined(USE_DEPRECATED_CG_API) */
++#else /* we have the new CG APIs from Snow Leopard */
+ 
+ static void QuartzRandRGetModeInfo (CGDisplayModeRef modeRef,
+                                     QuartzModeInfoPtr pMode) {
+@@ -220,7 +222,7 @@ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
+     return TRUE;
+ }
+ 
+-#endif  /* defined(USE_DEPRECATED_CG_API) */
++#endif  /* Snow Leopard CoreGraphics APIs */
+ 
+ 
+ static Bool QuartzRandRModesEqual (QuartzModeInfoPtr pMode1,
+diff --git xorg-server-1.9.0/hw/xquartz/quartzRandR.h xorg-server-1.9.0/hw/xquartz/quartzRandR.h
+index 711c3f3..d57dc3b 100644
+--- xorg-server-1.9.0/hw/xquartz/quartzRandR.h
++++ xorg-server-1.9.0/hw/xquartz/quartzRandR.h
+@@ -2,6 +2,7 @@
+  * quartzRandR.h
+  *
+  * Copyright (c) 2010 Jan Hauffa.
++ *               2010 Apple Inc.
+  *                 All Rights Reserved.
+  *
+  * Permission is hereby granted, free of charge, to any person obtaining a
+@@ -27,6 +28,9 @@
+  * use or other dealings in this Software without prior written authorization.
+  */
+ 
+-#define USE_DEPRECATED_CG_API 1
++#ifndef _QUARTZRANDR_H_
++#define _QUARTZRANDR_H_
+ 
+ Bool QuartzRandRInit (ScreenPtr pScreen);
++
++#endif
+-- 
+1.5.6.6
+

Added: trunk/dports/x11/xorg-server-devel/files/0006-XQuartz-RandR-Respond-better-to-resolution-changes.patch
===================================================================
--- trunk/dports/x11/xorg-server-devel/files/0006-XQuartz-RandR-Respond-better-to-resolution-changes.patch	                        (rev 0)
+++ trunk/dports/x11/xorg-server-devel/files/0006-XQuartz-RandR-Respond-better-to-resolution-changes.patch	2010-08-21 06:35:57 UTC (rev 70781)
@@ -0,0 +1,401 @@
+From 275cd394f507afc0d4a1cde81dc89e2eb3979ece Mon Sep 17 00:00:00 2001
+From: Jeremy Huddleston <jeremyhu at apple.com>
+Date: Mon, 26 Jul 2010 01:17:12 -0700
+Subject: [PATCH] XQuartz: RandR: Respond better to resolution changes made outside X
+
+Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
+---
+ hw/xquartz/darwinEvents.c  |    6 ++
+ hw/xquartz/quartzCommon.h  |   23 ------
+ hw/xquartz/quartzRandR.c   |  174 ++++++++++++++++++++++++++------------------
+ hw/xquartz/quartzRandR.h   |   24 ++++++
+ hw/xquartz/xpr/xprScreen.c |    1 +
+ 5 files changed, 135 insertions(+), 93 deletions(-)
+
+diff --git xorg-server-1.9.0/hw/xquartz/darwinEvents.c xorg-server-1.9.0/hw/xquartz/darwinEvents.c
+index 7b34b8a..7367068 100644
+--- xorg-server-1.9.0/hw/xquartz/darwinEvents.c
++++ xorg-server-1.9.0/hw/xquartz/darwinEvents.c
+@@ -52,6 +52,7 @@ in this Software without prior written authorization from The Open Group.
+ #include "darwin.h"
+ #include "quartz.h"
+ #include "quartzKeyboard.h"
++#include "quartzRandR.h"
+ #include "darwinEvents.h"
+ 
+ #include <sys/types.h>
+@@ -276,7 +277,12 @@ static void DarwinEventHandler(int screenNum, InternalEvent *ie, DeviceIntPtr de
+             break;
+             
+         case kXquartzDisplayChanged:
++            DEBUG_LOG("kXquartzDisplayChanged\n");
+             QuartzUpdateScreens();
++#ifdef RANDR
++            /* Update our RandR info */
++            QuartzRandRUpdateFakeModes(TRUE);
++#endif
+             break;
+             
+         default:
+diff --git xorg-server-1.9.0/hw/xquartz/quartzCommon.h xorg-server-1.9.0/hw/xquartz/quartzCommon.h
+index 851e74c..718df4b 100644
+--- xorg-server-1.9.0/hw/xquartz/quartzCommon.h
++++ xorg-server-1.9.0/hw/xquartz/quartzCommon.h
+@@ -38,29 +38,6 @@
+ #include <X11/Xdefs.h>
+ #include "privates.h"
+ 
+-typedef struct {
+-    size_t width, height;
+-    int refresh;
+-    const void *ref;
+-} QuartzModeInfo, *QuartzModeInfoPtr;
+-
+-// Quartz specific per screen storage structure
+-typedef struct {
+-    // List of CoreGraphics displays that this X11 screen covers.
+-    // This is more than one CG display for video mirroring and
+-    // rootless PseudoramiX mode.
+-    // No CG display will be covered by more than one X11 screen.
+-    int displayCount;
+-    CGDirectDisplayID *displayIDs;
+-    QuartzModeInfo originalMode, fakeMode;
+-} QuartzScreenRec, *QuartzScreenPtr;
+-
+-#define QUARTZ_PRIV(pScreen) \
+-    ((QuartzScreenPtr)dixLookupPrivate(&pScreen->devPrivates, quartzScreenKey))
+-
+-void QuartzCopyDisplayIDs(ScreenPtr pScreen,
+-                          int displayCount, CGDirectDisplayID *displayIDs);
+-
+ // User preferences used by Quartz modes
+ extern int              quartzUseSysBeep;
+ extern int              quartzFullscreenDisableHotkeys;
+diff --git xorg-server-1.9.0/hw/xquartz/quartzRandR.c xorg-server-1.9.0/hw/xquartz/quartzRandR.c
+index e46e904..65dce22 100644
+--- xorg-server-1.9.0/hw/xquartz/quartzRandR.c
++++ xorg-server-1.9.0/hw/xquartz/quartzRandR.c
+@@ -38,6 +38,7 @@
+ #include "quartzCommon.h"
+ #include "quartzRandR.h"
+ #include "quartz.h"
++#include "darwin.h"
+ 
+ #include <AvailabilityMacros.h>
+ 
+@@ -45,6 +46,13 @@
+ #include <randrstr.h>
+ #include <IOKit/graphics/IOGraphicsTypes.h>
+ 
++/* TODO: UGLY, find a better way!
++ * We want to ignore kXquartzDisplayChanged which are generated by us
++ */
++static Bool ignore_next_fake_mode_update = FALSE;
++
++#define FAKE_REFRESH_ROOTLESS 1
++#define FAKE_REFRESH_FULLSCREEN 2
+ 
+ #define DEFAULT_REFRESH  60
+ #define kDisplayModeUsableFlags  (kDisplayModeValidFlag | kDisplayModeSafeFlag)
+@@ -171,8 +179,7 @@ static Bool QuartzRandRSetMode (CGDirectDisplayID screenId,
+     if (!modeRef)
+         return FALSE;
+ 
+-    return (CGDisplaySetDisplayMode(screenId, modeRef, NULL) !=
+-            kCGErrorSuccess);
++    return (CGDisplaySetDisplayMode(screenId, modeRef, NULL) != kCGErrorSuccess);
+ }
+ 
+ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
+@@ -227,18 +234,15 @@ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
+ 
+ static Bool QuartzRandRModesEqual (QuartzModeInfoPtr pMode1,
+                                    QuartzModeInfoPtr pMode2) {
+-    if (pMode1->width != pMode2->width)
+-        return FALSE;
+-    if (pMode1->height != pMode2->height)
+-        return FALSE;
+-    if (pMode1->refresh != pMode2->refresh)
+-        return FALSE;
+-    return TRUE;
++    return (pMode1->width == pMode2->width) &&
++           (pMode1->height == pMode2->height) &&
++           (pMode1->refresh == pMode2->refresh);
+ }
+ 
+ static Bool QuartzRandRRegisterMode (ScreenPtr pScreen,
+-                                     QuartzModeInfoPtr pMode,
+-                                     Bool isCurrentMode) {
++                                     QuartzModeInfoPtr pMode) {
++    QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
++    Bool isCurrentMode = QuartzRandRModesEqual(&pQuartzScreen->currentMode, pMode);
+     RRScreenSizePtr pSize = RRRegisterSize(pScreen,
+         pMode->width, pMode->height, pScreen->mmWidth, pScreen->mmHeight);
+     if (pSize) {
+@@ -252,14 +256,11 @@ static Bool QuartzRandRRegisterMode (ScreenPtr pScreen,
+     return FALSE;
+ }
+ 
+-static Bool QuartzRandRGetModeCallback (ScreenPtr pScreen,
++static Bool QuartzRandRRegisterModeCallback (ScreenPtr pScreen,
+                                         CGDirectDisplayID screenId,
+                                         QuartzModeInfoPtr pMode,
+-                                        void *data) {
+-    QuartzModeInfoPtr pCurMode = (QuartzModeInfoPtr) data;
+-
+-    return QuartzRandRRegisterMode(pScreen, pMode,
+-        QuartzRandRModesEqual(pMode, pCurMode));
++                                        void *data __unused) {
++    return QuartzRandRRegisterMode(pScreen, pMode);
+ }
+ 
+ static Bool QuartzRandRSetModeCallback (ScreenPtr pScreen,
+@@ -267,73 +268,64 @@ static Bool QuartzRandRSetModeCallback (ScreenPtr pScreen,
+                                         QuartzModeInfoPtr pMode,
+                                         void *data) {
+     QuartzModeInfoPtr pReqMode = (QuartzModeInfoPtr) data;
++    QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
+ 
+     if (!QuartzRandRModesEqual(pMode, pReqMode))
+         return TRUE;  /* continue enumeration */
+ 
+-    return QuartzRandRSetMode(screenId, pMode);
++    if (pReqMode->ref == pQuartzScreen->currentMode.ref) {
++        DEBUG_LOG("Requested RandR resolution matches current CG mode\n");
++        return FALSE; /* We don't need to do anything in CG */
++    }
++
++    if (QuartzRandRSetMode(screenId, pMode) == FALSE) {
++        ignore_next_fake_mode_update = TRUE;
++        return FALSE;
++    } else {
++        return TRUE;
++    };
+ }
+ 
+ static Bool QuartzRandRGetInfo (ScreenPtr pScreen, Rotation *rotations) {
+     QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
+     CGDirectDisplayID screenId;
+-    QuartzModeInfo curMode;
+ 
+     *rotations = RR_Rotate_0;  /* TODO: support rotation */
+ 
+     if (pQuartzScreen->displayCount == 0)
+         return FALSE;
++
++    QuartzRandRRegisterMode(pScreen, &pQuartzScreen->rootlessMode);
++    QuartzRandRRegisterMode(pScreen, &pQuartzScreen->fullScreenMode);
++
+     if (pQuartzScreen->displayCount > 1) {
+         /* RandR operations are not well-defined for an X11 screen spanning
+            multiple CG displays. Create two entries for the current virtual
+            resolution including/excluding the menu bar. */
+-        QuartzRandRRegisterMode(pScreen, &pQuartzScreen->fakeMode,
+-            !quartzHasRoot);
+-        QuartzRandRRegisterMode(pScreen, &pQuartzScreen->originalMode,
+-            quartzHasRoot);
+         return TRUE;
+     }
+     screenId = pQuartzScreen->displayIDs[0];
+ 
+-    if (!QuartzRandRGetCurrentModeInfo(screenId, &curMode))
+-        return FALSE;
+-
+-    /* Add a fake mode corresponding to the original resolution excluding the
+-       height of the menu bar. */
+-    if (!quartzHasRoot &&
+-        QuartzRandRModesEqual(&pQuartzScreen->originalMode, &curMode)) {
+-        QuartzRandRRegisterMode(pScreen, &pQuartzScreen->fakeMode, TRUE);
+-        curMode = pQuartzScreen->fakeMode;
+-    }
+-    else
+-        QuartzRandRRegisterMode(pScreen, &pQuartzScreen->fakeMode, FALSE);
+-
+-    return QuartzRandREnumerateModes(pScreen, screenId,
+-        QuartzRandRGetModeCallback, &curMode);
++    return QuartzRandREnumerateModes(pScreen, screenId, QuartzRandRRegisterModeCallback, NULL);
+ }
+ 
+ static Bool QuartzRandRSetConfig (ScreenPtr           pScreen,
+-			          Rotation            randr,
+-			          int                 rate,
+-			          RRScreenSizePtr     pSize) {
++                                  Rotation            randr,
++                                  int                 rate,
++                                  RRScreenSizePtr     pSize) {
+     QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
+     CGDirectDisplayID screenId;
+-    QuartzModeInfo reqMode, curMode;
+-    Bool rootless = FALSE;
++    QuartzModeInfo reqMode;
+ 
+     reqMode.width = pSize->width;
+     reqMode.height = pSize->height;
+     reqMode.refresh = rate;
+ 
+-    /* If the client requested the fake screen mode, switch to rootless mode.
+-       Switch to fullscreen mode (root window visible) if a real screen mode was
+-       requested. */
+-    if (QuartzRandRModesEqual(&reqMode, &pQuartzScreen->fakeMode)) {
+-        rootless = TRUE;
+-        reqMode = pQuartzScreen->originalMode;
+-    }
+-    QuartzSetFullscreen(!rootless);
+-    QuartzSetRootless(rootless);
++    /* If the client requested the fake rootless mode, switch to rootless.
++     * Otherwise, force fullscreen mode.
++     */
++    QuartzSetFullscreen(reqMode.refresh != FAKE_REFRESH_ROOTLESS);
++    QuartzSetRootless(reqMode.refresh == FAKE_REFRESH_ROOTLESS);
+ 
+     if (pQuartzScreen->displayCount == 0)
+         return FALSE;
+@@ -341,38 +333,80 @@ static Bool QuartzRandRSetConfig (ScreenPtr           pScreen,
+         /* RandR operations are not well-defined for an X11 screen spanning
+            multiple CG displays. Do not accept any configuations that differ
+            from the current configuration. */
+-        return QuartzRandRModesEqual(&reqMode, &pQuartzScreen->originalMode);
++        return TRUE;
+     }
+-    screenId = pQuartzScreen->displayIDs[0];
+ 
+     /* Do not switch modes if requested mode is equal to current mode. */
+-    if (!QuartzRandRGetCurrentModeInfo(screenId, &curMode))
+-        return FALSE;
+-    if (QuartzRandRModesEqual(&reqMode, &curMode))
++    if (QuartzRandRModesEqual(&reqMode, &pQuartzScreen->currentMode))
+         return TRUE;
++        
++    screenId = pQuartzScreen->displayIDs[0];
++    if (QuartzRandREnumerateModes(pScreen, screenId, QuartzRandRSetModeCallback, &reqMode)) {
++        pQuartzScreen->currentMode = reqMode;
++        return TRUE;
++    }
++    
++    DEBUG_LOG("Unable to find a matching config: %d x %d @ %d\n", (int)reqMode.width, (int)reqMode.height, (int)reqMode.refresh);
+ 
+-    return QuartzRandREnumerateModes(pScreen, screenId,
+-        QuartzRandRSetModeCallback, &reqMode);
++    return FALSE;
+ }
+ 
+-Bool QuartzRandRInit (ScreenPtr pScreen) {
+-    rrScrPrivPtr    pScrPriv;
++static Bool _QuartzRandRUpdateFakeModes (ScreenPtr pScreen) {
+     QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
+-    
+-    if (!RRScreenInit (pScreen)) return FALSE;
+ 
+     if (pQuartzScreen->displayCount == 1) {
+         if (!QuartzRandRGetCurrentModeInfo(pQuartzScreen->displayIDs[0],
+-                                           &pQuartzScreen->originalMode))
++                                           &pQuartzScreen->fullScreenMode))
+             return FALSE;
++    } else {
++        pQuartzScreen->fullScreenMode.width = pScreen->width;
++        pQuartzScreen->fullScreenMode.height = pScreen->height;
++        if(quartzEnableRootless)
++            pQuartzScreen->fullScreenMode.height += aquaMenuBarHeight;
+     }
+-    else {
+-        pQuartzScreen->originalMode.width = pScreen->width;
+-        pQuartzScreen->originalMode.height = pScreen->height;
+-        pQuartzScreen->originalMode.refresh = DEFAULT_REFRESH;
++
++    pQuartzScreen->fullScreenMode.refresh = FAKE_REFRESH_FULLSCREEN;
++
++    pQuartzScreen->rootlessMode = pQuartzScreen->fullScreenMode;
++    pQuartzScreen->rootlessMode.refresh = FAKE_REFRESH_ROOTLESS;
++    pQuartzScreen->rootlessMode.height -= aquaMenuBarHeight;
++
++    if(quartzEnableRootless) {
++        pQuartzScreen->currentMode = pQuartzScreen->rootlessMode;
++    } else {
++        pQuartzScreen->currentMode = pQuartzScreen->fullScreenMode;
+     }
+-    pQuartzScreen->fakeMode = pQuartzScreen->originalMode;
+-    pQuartzScreen->fakeMode.height -= aquaMenuBarHeight;
++    
++    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("currentMode: %d x %d\n", (int)pQuartzScreen->currentMode.width, (int)pQuartzScreen->currentMode.height);
++    
++    return TRUE;
++}
++
++Bool QuartzRandRUpdateFakeModes (BOOL force_update) {
++    ScreenPtr pScreen = screenInfo.screens[0];
++    
++    if(ignore_next_fake_mode_update) {
++        DEBUG_LOG("Ignoring update request caused by RandR resolution change.\n");
++        ignore_next_fake_mode_update = FALSE;
++        return TRUE;
++    }
++    
++    if(!_QuartzRandRUpdateFakeModes(pScreen))
++        return FALSE;
++    
++    if(force_update)
++        RRGetInfo(pScreen, TRUE);
++
++    return TRUE;
++}
++
++Bool QuartzRandRInit (ScreenPtr pScreen) {
++    rrScrPrivPtr    pScrPriv;
++    
++    if (!RRScreenInit (pScreen)) return FALSE;
++    if (!_QuartzRandRUpdateFakeModes (pScreen)) return FALSE;
+ 
+     pScrPriv = rrGetScrPriv(pScreen);
+     pScrPriv->rrGetInfo = QuartzRandRGetInfo;
+diff --git xorg-server-1.9.0/hw/xquartz/quartzRandR.h xorg-server-1.9.0/hw/xquartz/quartzRandR.h
+index d57dc3b..8ee2818 100644
+--- xorg-server-1.9.0/hw/xquartz/quartzRandR.h
++++ xorg-server-1.9.0/hw/xquartz/quartzRandR.h
+@@ -31,6 +31,30 @@
+ #ifndef _QUARTZRANDR_H_
+ #define _QUARTZRANDR_H_
+ 
++typedef struct {
++    size_t width, height;
++    int refresh;
++    const void *ref;
++} QuartzModeInfo, *QuartzModeInfoPtr;
++
++// Quartz specific per screen storage structure
++typedef struct {
++    // List of CoreGraphics displays that this X11 screen covers.
++    // This is more than one CG display for video mirroring and
++    // rootless PseudoramiX mode.
++    // No CG display will be covered by more than one X11 screen.
++    int displayCount;
++    CGDirectDisplayID *displayIDs;
++    QuartzModeInfo rootlessMode, fullScreenMode, currentMode;
++} QuartzScreenRec, *QuartzScreenPtr;
++
++#define QUARTZ_PRIV(pScreen) \
++    ((QuartzScreenPtr)dixLookupPrivate(&pScreen->devPrivates, quartzScreenKey))
++
++void QuartzCopyDisplayIDs(ScreenPtr pScreen,
++                          int displayCount, CGDirectDisplayID *displayIDs);
++
++Bool QuartzRandRUpdateFakeModes (BOOL force_update);
+ Bool QuartzRandRInit (ScreenPtr pScreen);
+ 
+ #endif
+diff --git xorg-server-1.9.0/hw/xquartz/xpr/xprScreen.c xorg-server-1.9.0/hw/xquartz/xpr/xprScreen.c
+index 0e36ee1..b3ac693 100644
+--- xorg-server-1.9.0/hw/xquartz/xpr/xprScreen.c
++++ xorg-server-1.9.0/hw/xquartz/xpr/xprScreen.c
+@@ -36,6 +36,7 @@
+ #include "quartzCommon.h"
+ #include "inputstr.h"
+ #include "quartz.h"
++#include "quartzRandR.h"
+ #include "xpr.h"
+ #include "xprEvent.h"
+ #include "pseudoramiX.h"
+-- 
+1.5.6.6
+

Deleted: trunk/dports/x11/xorg-server-devel/files/0006-XQuartz-RandR-Toggle-rootless-mode-on-XRandR-mode.patch
===================================================================
--- trunk/dports/x11/xorg-server-devel/files/0006-XQuartz-RandR-Toggle-rootless-mode-on-XRandR-mode.patch	2010-08-20 22:32:45 UTC (rev 70780)
+++ trunk/dports/x11/xorg-server-devel/files/0006-XQuartz-RandR-Toggle-rootless-mode-on-XRandR-mode.patch	2010-08-21 06:35:57 UTC (rev 70781)
@@ -1,209 +0,0 @@
-From b28e0b0b51801e3c7657f18db683da17256a956d Mon Sep 17 00:00:00 2001
-From: Jan Hauffa <hauffa at in.tum.de>
-Date: Fri, 16 Jul 2010 17:54:55 +0200
-Subject: [PATCH] XQuartz: RandR: Toggle rootless mode on XRandR mode switch.
-
-Report a fake screen mode that corresponds to the screen mode at startup of the
-server excluding the height of the menu bar. If a client requests this mode,
-rootless mode is enabled. In all other modes, the root window is shown.
-
-Signed-off-by: Jan Hauffa <hauffa at in.tum.de>
-Reviewed-by: Jeremy Huddleston <jeremyhu at apple.com>
----
- hw/xquartz/quartzCommon.h |    7 +++
- hw/xquartz/quartzRandR.c  |   93 +++++++++++++++++++++++++++++++-------------
- 2 files changed, 72 insertions(+), 28 deletions(-)
-
-diff --git xorg-server-1.8.99.906/hw/xquartz/quartzCommon.h xorg-server-1.8.99.906/hw/xquartz/quartzCommon.h
-index d0d358b..851e74c 100644
---- xorg-server-1.8.99.906/hw/xquartz/quartzCommon.h
-+++ xorg-server-1.8.99.906/hw/xquartz/quartzCommon.h
-@@ -38,6 +38,12 @@
- #include <X11/Xdefs.h>
- #include "privates.h"
- 
-+typedef struct {
-+    size_t width, height;
-+    int refresh;
-+    const void *ref;
-+} QuartzModeInfo, *QuartzModeInfoPtr;
-+
- // Quartz specific per screen storage structure
- typedef struct {
-     // List of CoreGraphics displays that this X11 screen covers.
-@@ -46,6 +52,7 @@ typedef struct {
-     // No CG display will be covered by more than one X11 screen.
-     int displayCount;
-     CGDirectDisplayID *displayIDs;
-+    QuartzModeInfo originalMode, fakeMode;
- } QuartzScreenRec, *QuartzScreenPtr;
- 
- #define QUARTZ_PRIV(pScreen) \
-diff --git xorg-server-1.8.99.906/hw/xquartz/quartzRandR.c xorg-server-1.8.99.906/hw/xquartz/quartzRandR.c
-index 6747752..f61ff93 100644
---- xorg-server-1.8.99.906/hw/xquartz/quartzRandR.c
-+++ xorg-server-1.8.99.906/hw/xquartz/quartzRandR.c
-@@ -37,6 +37,7 @@
- 
- #include "quartzCommon.h"
- #include "quartzRandR.h"
-+#include "quartz.h"
- 
- #if defined(FAKE_RANDR)
- #include "scrnintstr.h"
-@@ -96,12 +97,6 @@ RREditConnectionInfo (ScreenPtr pScreen)
- #define DEFAULT_REFRESH  60
- #define kDisplayModeUsableFlags  (kDisplayModeValidFlag | kDisplayModeSafeFlag)
- 
--typedef struct {
--    size_t width, height;
--    int refresh;
--    const void *ref;
--} QuartzModeInfo, *QuartzModeInfoPtr;
--
- typedef Bool (*QuartzModeCallback)
-     (ScreenPtr, CGDirectDisplayID, QuartzModeInfoPtr, void *);
- 
-@@ -289,21 +284,30 @@ static Bool QuartzRandRModesEqual (QuartzModeInfoPtr pMode1,
-     return TRUE;
- }
- 
--static Bool QuartzRandRGetModeCallback (ScreenPtr pScreen,
--                                        CGDirectDisplayID screenId,
--                                        QuartzModeInfoPtr pMode,
--                                        void *data) {
--    QuartzModeInfoPtr pCurMode = (QuartzModeInfoPtr) data;
--
-+static Bool QuartzRandRRegisterMode (ScreenPtr pScreen,
-+                                     QuartzModeInfoPtr pMode,
-+                                     Bool isCurrentMode) {
-     RRScreenSizePtr pSize = RRRegisterSize(pScreen,
-         pMode->width, pMode->height, pScreen->mmWidth, pScreen->mmHeight);
-     if (pSize) {
-         RRRegisterRate(pScreen, pSize, pMode->refresh);
- 
--        if (QuartzRandRModesEqual(pMode, pCurMode))
-+        if (isCurrentMode)
-             RRSetCurrentConfig(pScreen, RR_Rotate_0, pMode->refresh, pSize);
-+
-+        return TRUE;
-     }
--    return TRUE;
-+    return FALSE;
-+}
-+
-+static Bool QuartzRandRGetModeCallback (ScreenPtr pScreen,
-+                                        CGDirectDisplayID screenId,
-+                                        QuartzModeInfoPtr pMode,
-+                                        void *data) {
-+    QuartzModeInfoPtr pCurMode = (QuartzModeInfoPtr) data;
-+
-+    return QuartzRandRRegisterMode(pScreen, pMode,
-+        QuartzRandRModesEqual(pMode, pCurMode));
- }
- 
- static Bool QuartzRandRSetModeCallback (ScreenPtr pScreen,
-@@ -329,20 +333,29 @@ static Bool QuartzRandRGetInfo (ScreenPtr pScreen, Rotation *rotations) {
-         return FALSE;
-     if (pQuartzScreen->displayCount > 1) {
-         /* RandR operations are not well-defined for an X11 screen spanning
--           multiple CG displays. Create a single entry for the current virtual
--           resolution. */
--        RRScreenSizePtr pSize = RRRegisterSize(pScreen, pScreen->width,
--            pScreen->height, pScreen->mmWidth, pScreen->mmHeight);
--        if (pSize) {
--            RRRegisterRate(pScreen, pSize, DEFAULT_REFRESH);
--            RRSetCurrentConfig(pScreen, RR_Rotate_0, DEFAULT_REFRESH, pSize);
--        }
-+           multiple CG displays. Create two entries for the current virtual
-+           resolution including/excluding the menu bar. */
-+        QuartzRandRRegisterMode(pScreen, &pQuartzScreen->fakeMode,
-+            !quartzHasRoot);
-+        QuartzRandRRegisterMode(pScreen, &pQuartzScreen->originalMode,
-+            quartzHasRoot);
-         return TRUE;
-     }
-     screenId = pQuartzScreen->displayIDs[0];
- 
-     if (!QuartzRandRGetCurrentModeInfo(screenId, &curMode))
-         return FALSE;
-+
-+    /* Add a fake mode corresponding to the original resolution excluding the
-+       height of the menu bar. */
-+    if (!quartzHasRoot &&
-+        QuartzRandRModesEqual(&pQuartzScreen->originalMode, &curMode)) {
-+        QuartzRandRRegisterMode(pScreen, &pQuartzScreen->fakeMode, TRUE);
-+        curMode = pQuartzScreen->fakeMode;
-+    }
-+    else
-+        QuartzRandRRegisterMode(pScreen, &pQuartzScreen->fakeMode, FALSE);
-+
-     return QuartzRandREnumerateModes(pScreen, screenId,
-         QuartzRandRGetModeCallback, &curMode);
- }
-@@ -354,6 +367,21 @@ static Bool QuartzRandRSetConfig (ScreenPtr           pScreen,
-     QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
-     CGDirectDisplayID screenId;
-     QuartzModeInfo reqMode, curMode;
-+    Bool rootless = FALSE;
-+
-+    reqMode.width = pSize->width;
-+    reqMode.height = pSize->height;
-+    reqMode.refresh = rate;
-+
-+    /* If the client requested the fake screen mode, switch to rootless mode.
-+       Switch to fullscreen mode (root window visible) if a real screen mode was
-+       requested. */
-+    if (QuartzRandRModesEqual(&reqMode, &pQuartzScreen->fakeMode)) {
-+        rootless = TRUE;
-+        reqMode = pQuartzScreen->originalMode;
-+    }
-+    QuartzSetFullscreen(!rootless);
-+    QuartzSetRootless(rootless);
- 
-     if (pQuartzScreen->displayCount == 0)
-         return FALSE;
-@@ -361,15 +389,10 @@ static Bool QuartzRandRSetConfig (ScreenPtr           pScreen,
-         /* RandR operations are not well-defined for an X11 screen spanning
-            multiple CG displays. Do not accept any configuations that differ
-            from the current configuration. */
--        return ((pSize->width == pScreen->width) &&
--                (pSize->height == pScreen->height));
-+        return QuartzRandRModesEqual(&reqMode, &pQuartzScreen->originalMode);
-     }
-     screenId = pQuartzScreen->displayIDs[0];
- 
--    reqMode.width = pSize->width;
--    reqMode.height = pSize->height;
--    reqMode.refresh = rate;
--
-     /* Do not switch modes if requested mode is equal to current mode. */
-     if (!QuartzRandRGetCurrentModeInfo(screenId, &curMode))
-         return FALSE;
-@@ -382,9 +405,23 @@ static Bool QuartzRandRSetConfig (ScreenPtr           pScreen,
- 
- Bool QuartzRandRInit (ScreenPtr pScreen) {
-     rrScrPrivPtr    pScrPriv;
-+    QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
-     
-     if (!RRScreenInit (pScreen)) return FALSE;
- 
-+    if (pQuartzScreen->displayCount == 1) {
-+        if (!QuartzRandRGetCurrentModeInfo(pQuartzScreen->displayIDs[0],
-+                                           &pQuartzScreen->originalMode))
-+            return FALSE;
-+    }
-+    else {
-+        pQuartzScreen->originalMode.width = pScreen->width;
-+        pQuartzScreen->originalMode.height = pScreen->height;
-+        pQuartzScreen->originalMode.refresh = DEFAULT_REFRESH;
-+    }
-+    pQuartzScreen->fakeMode = pQuartzScreen->originalMode;
-+    pQuartzScreen->fakeMode.height -= aquaMenuBarHeight;
-+
-     pScrPriv = rrGetScrPriv(pScreen);
-     pScrPriv->rrGetInfo = QuartzRandRGetInfo;
-     pScrPriv->rrSetConfig = QuartzRandRSetConfig;
--- 
-1.5.6.6
-

Added: trunk/dports/x11/xorg-server-devel/files/0007-XQuartz-RandR-Better-handle-switching-betwen-RandR.patch
===================================================================
--- trunk/dports/x11/xorg-server-devel/files/0007-XQuartz-RandR-Better-handle-switching-betwen-RandR.patch	                        (rev 0)
+++ trunk/dports/x11/xorg-server-devel/files/0007-XQuartz-RandR-Better-handle-switching-betwen-RandR.patch	2010-08-21 06:35:57 UTC (rev 70781)
@@ -0,0 +1,352 @@
+From e2ea1fd96edb14dd89e4e03759c93907776d84fd Mon Sep 17 00:00:00 2001
+From: Jeremy Huddleston <jeremyhu at apple.com>
+Date: Mon, 26 Jul 2010 11:45:59 -0700
+Subject: [PATCH] XQuartz: RandR: Better handle switching betwen RandR modes that share CG modes
+
+Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
+---
+ hw/xquartz/quartzRandR.c |  156 +++++++++++++++++++++++++++++++++++----------
+ hw/xquartz/quartzRandR.h |    2 +-
+ 2 files changed, 122 insertions(+), 36 deletions(-)
+
+diff --git xorg-server-1.9.0/hw/xquartz/quartzRandR.c xorg-server-1.9.0/hw/xquartz/quartzRandR.c
+index 65dce22..9b84fa1 100644
+--- xorg-server-1.9.0/hw/xquartz/quartzRandR.c
++++ xorg-server-1.9.0/hw/xquartz/quartzRandR.c
+@@ -57,9 +57,12 @@ static Bool ignore_next_fake_mode_update = FALSE;
+ #define DEFAULT_REFRESH  60
+ #define kDisplayModeUsableFlags  (kDisplayModeValidFlag | kDisplayModeSafeFlag)
+ 
+-typedef Bool (*QuartzModeCallback)
+-    (ScreenPtr, CGDirectDisplayID, QuartzModeInfoPtr, void *);
++#define CALLBACK_SUCCESS 0
++#define CALLBACK_CONTINUE 1
++#define CALLBACK_ERROR -1
+ 
++typedef int (*QuartzModeCallback)
++    (ScreenPtr, CGDirectDisplayID, QuartzModeInfoPtr, void *);
+ 
+ #if MAC_OS_X_VERSION_MIN_REQUIRED < 1060
+ 
+@@ -97,20 +100,22 @@ static void QuartzRandRGetModeInfo (CFDictionaryRef modeRef,
+     pMode->ref = NULL;
+ }
+ 
+-static Bool QuartzRandRGetCurrentModeInfo (CGDirectDisplayID screenId,
++static Bool QuartzRandRCopyCurrentModeInfo (CGDirectDisplayID screenId,
+                                            QuartzModeInfoPtr pMode) {
+     CFDictionaryRef curModeRef = CGDisplayCurrentMode(screenId);
+     if (!curModeRef)
+         return FALSE;
+ 
+     QuartzRandRGetModeInfo(curModeRef, pMode);
++    pMode->ref = curModeRef;
++    CFRetain(pMode->ref);
+     return TRUE;
+ }
+ 
+ static Bool QuartzRandRSetMode (CGDirectDisplayID screenId,
+                                 QuartzModeInfoPtr pMode) {
+     CFDictionaryRef modeRef = (CFDictionaryRef) pMode->ref;
+-    return (CGDisplaySwitchToMode(screenId, modeRef) != kCGErrorSuccess);
++    return (CGDisplaySwitchToMode(screenId, modeRef) == kCGErrorSuccess);
+ }
+ 
+ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
+@@ -122,6 +127,28 @@ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
+     CFArrayRef modes;
+     QuartzModeInfo modeInfo;
+     int i;
++    BOOL retval = FALSE;
++    QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
++
++    switch(callback(pScreen, screenId, &pQuartzScreen->rootlessMode, data)) {
++        case CALLBACK_SUCCESS:
++            return TRUE;
++        case CALLBACK_ERROR:
++            return FALSE;
++        case CALLBACK_CONTINUE:
++        default:
++            break;
++    }
++
++    switch(callback(pScreen, screenId, &pQuartzScreen->fullScreenMode, data)) {
++        case CALLBACK_SUCCESS:
++            return TRUE;
++        case CALLBACK_ERROR:
++            return FALSE;
++        case CALLBACK_CONTINUE:
++        default:
++            break;
++    }
+ 
+     curModeRef = CGDisplayCurrentMode(screenId);
+     if (!curModeRef)
+@@ -132,6 +159,7 @@ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
+     if (!modes)
+         return FALSE;
+     for (i = 0; i < CFArrayGetCount(modes); i++) {
++        int cb;
+         modeRef = (CFDictionaryRef) CFArrayGetValueAtIndex(modes, i);
+ 
+         /* Skip modes that are not usable on the current display or have a
+@@ -144,10 +172,15 @@ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
+ 
+         QuartzRandRGetModeInfo(modeRef, &modeInfo);
+         modeInfo.ref = modeRef;
+-        if (!callback(pScreen, screenId, &modeInfo, data))
++        cb = callback(pScreen, screenId, &modeInfo, data);
++        if (cb == CALLBACK_SUCCESS)
++            break;
++        if (cb == CALLBACK_ERROR) {
++            retval = FALSE;
+             break;
++        }
+     }
+-    return TRUE;
++    return retval;
+ }
+ 
+ #else /* we have the new CG APIs from Snow Leopard */
+@@ -162,14 +195,14 @@ static void QuartzRandRGetModeInfo (CGDisplayModeRef modeRef,
+     pMode->ref = NULL;
+ }
+ 
+-static Bool QuartzRandRGetCurrentModeInfo (CGDirectDisplayID screenId,
+-                                           QuartzModeInfoPtr pMode) {
++static Bool QuartzRandRCopyCurrentModeInfo (CGDirectDisplayID screenId,
++                                            QuartzModeInfoPtr pMode) {
+     CGDisplayModeRef curModeRef = CGDisplayCopyDisplayMode(screenId);
+     if (!curModeRef)
+         return FALSE;
+ 
+     QuartzRandRGetModeInfo(curModeRef, pMode);
+-    CGDisplayModeRelease(curModeRef);
++    pMode->ref = curModeRef;
+     return TRUE;
+ }
+ 
+@@ -179,7 +212,7 @@ static Bool QuartzRandRSetMode (CGDirectDisplayID screenId,
+     if (!modeRef)
+         return FALSE;
+ 
+-    return (CGDisplaySetDisplayMode(screenId, modeRef, NULL) != kCGErrorSuccess);
++    return (CGDisplaySetDisplayMode(screenId, modeRef, NULL) == kCGErrorSuccess);
+ }
+ 
+ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
+@@ -192,6 +225,29 @@ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
+     CFArrayRef modes;
+     QuartzModeInfo modeInfo;
+     int i;
++    Bool retval = TRUE;
++
++    QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
++
++    switch(callback(pScreen, screenId, &pQuartzScreen->rootlessMode, data)) {
++        case CALLBACK_SUCCESS:
++            return TRUE;
++        case CALLBACK_ERROR:
++            return FALSE;
++        case CALLBACK_CONTINUE:
++        default:
++            break;
++    }
++
++    switch(callback(pScreen, screenId, &pQuartzScreen->fullScreenMode, data)) {
++        case CALLBACK_SUCCESS:
++            return TRUE;
++        case CALLBACK_ERROR:
++            return FALSE;
++        case CALLBACK_CONTINUE:
++        default:
++            break;
++    }
+ 
+     curModeRef = CGDisplayCopyDisplayMode(screenId);
+     if (!curModeRef)
+@@ -205,6 +261,7 @@ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
+         return FALSE;
+     }
+     for (i = 0; i < CFArrayGetCount(modes); i++) {
++        int cb;
+         modeRef = (CGDisplayModeRef) CFArrayGetValueAtIndex(modes, i);
+ 
+         /* Skip modes that are not usable on the current display or have a
+@@ -220,13 +277,19 @@ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
+ 
+         QuartzRandRGetModeInfo(modeRef, &modeInfo);
+         modeInfo.ref = modeRef;
+-        if (!callback(pScreen, screenId, &modeInfo, data))
++        cb = callback(pScreen, screenId, &modeInfo, data);
++        if (cb == CALLBACK_SUCCESS)
++            break;
++		if (cb == CALLBACK_ERROR) {
++			retval = FALSE;
+             break;
++		}
+     }
++		
+     CFRelease(modes);
+ 
+     CFRelease(curPixelEnc);
+-    return TRUE;
++    return retval;
+ }
+ 
+ #endif  /* Snow Leopard CoreGraphics APIs */
+@@ -246,6 +309,7 @@ static Bool QuartzRandRRegisterMode (ScreenPtr pScreen,
+     RRScreenSizePtr pSize = RRRegisterSize(pScreen,
+         pMode->width, pMode->height, pScreen->mmWidth, pScreen->mmHeight);
+     if (pSize) {
++        //DEBUG_LOG("registering: %d x %d @ %d %s\n", (int)pMode->width, (int)pMode->height, (int)pMode->refresh, isCurrentMode ? "*" : "");
+         RRRegisterRate(pScreen, pSize, pMode->refresh);
+ 
+         if (isCurrentMode)
+@@ -256,34 +320,46 @@ static Bool QuartzRandRRegisterMode (ScreenPtr pScreen,
+     return FALSE;
+ }
+ 
+-static Bool QuartzRandRRegisterModeCallback (ScreenPtr pScreen,
++static int QuartzRandRRegisterModeCallback (ScreenPtr pScreen,
+                                         CGDirectDisplayID screenId,
+                                         QuartzModeInfoPtr pMode,
+                                         void *data __unused) {
+-    return QuartzRandRRegisterMode(pScreen, pMode);
++    if(QuartzRandRRegisterMode(pScreen, pMode)) {
++        return CALLBACK_CONTINUE;
++    } else {
++        return CALLBACK_ERROR;
++    }
+ }
+ 
+-static Bool QuartzRandRSetModeCallback (ScreenPtr pScreen,
+-                                        CGDirectDisplayID screenId,
+-                                        QuartzModeInfoPtr pMode,
+-                                        void *data) {
++static int QuartzRandRSetModeCallback (ScreenPtr pScreen,
++                                       CGDirectDisplayID screenId,
++                                       QuartzModeInfoPtr pMode,
++                                       void *data) {
+     QuartzModeInfoPtr pReqMode = (QuartzModeInfoPtr) data;
+     QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
+-
++	
+     if (!QuartzRandRModesEqual(pMode, pReqMode))
+-        return TRUE;  /* continue enumeration */
++        return CALLBACK_CONTINUE;  /* continue enumeration */
++
++    DEBUG_LOG("Found a match for requested RandR resolution (%dx%d@%d).\n", (int)pMode->width, (int)pMode->height, (int)pMode->refresh);
+ 
+-    if (pReqMode->ref == pQuartzScreen->currentMode.ref) {
++    if (pQuartzScreen->currentMode.ref && CFEqual(pMode->ref, pQuartzScreen->currentMode.ref)) {
+         DEBUG_LOG("Requested RandR resolution matches current CG mode\n");
+-        return FALSE; /* We don't need to do anything in CG */
++        return CALLBACK_SUCCESS; /* We don't need to do anything in CG */
+     }
+ 
+-    if (QuartzRandRSetMode(screenId, pMode) == FALSE) {
++    if (QuartzRandRSetMode(screenId, pMode)) {
++        if(pQuartzScreen->currentMode.ref)
++            CFRelease(pQuartzScreen->currentMode.ref);
++        pQuartzScreen->currentMode = *pMode;
++        CFRetain(pQuartzScreen->currentMode.ref);
++
+         ignore_next_fake_mode_update = TRUE;
+-        return FALSE;
++        return CALLBACK_SUCCESS;
+     } else {
+-        return TRUE;
+-    };
++        DEBUG_LOG("Error while requesting CG resolution change.\n");
++        return CALLBACK_ERROR;
++    }
+ }
+ 
+ static Bool QuartzRandRGetInfo (ScreenPtr pScreen, Rotation *rotations) {
+@@ -295,17 +371,17 @@ static Bool QuartzRandRGetInfo (ScreenPtr pScreen, Rotation *rotations) {
+     if (pQuartzScreen->displayCount == 0)
+         return FALSE;
+ 
+-    QuartzRandRRegisterMode(pScreen, &pQuartzScreen->rootlessMode);
+-    QuartzRandRRegisterMode(pScreen, &pQuartzScreen->fullScreenMode);
+-
+     if (pQuartzScreen->displayCount > 1) {
+         /* RandR operations are not well-defined for an X11 screen spanning
+            multiple CG displays. Create two entries for the current virtual
+            resolution including/excluding the menu bar. */
++
++        QuartzRandRRegisterMode(pScreen, &pQuartzScreen->rootlessMode);
++        QuartzRandRRegisterMode(pScreen, &pQuartzScreen->fullScreenMode);
+         return TRUE;
+     }
+-    screenId = pQuartzScreen->displayIDs[0];
+ 
++    screenId = pQuartzScreen->displayIDs[0];
+     return QuartzRandREnumerateModes(pScreen, screenId, QuartzRandRRegisterModeCallback, NULL);
+ }
+ 
+@@ -323,9 +399,14 @@ static Bool QuartzRandRSetConfig (ScreenPtr           pScreen,
+ 
+     /* If the client requested the fake rootless mode, switch to rootless.
+      * Otherwise, force fullscreen mode.
++     * TODO: Refactor all this fullscreen/rootless crap as it is spaghetti
++     *       has redundancies.
+      */
+-    QuartzSetFullscreen(reqMode.refresh != FAKE_REFRESH_ROOTLESS);
+     QuartzSetRootless(reqMode.refresh == FAKE_REFRESH_ROOTLESS);
++    QuartzSetFullscreen(reqMode.refresh != FAKE_REFRESH_ROOTLESS);
++    if(reqMode.refresh != FAKE_REFRESH_ROOTLESS &&
++       reqMode.refresh != FAKE_REFRESH_FULLSCREEN)
++        QuartzShow();
+ 
+     if (pQuartzScreen->displayCount == 0)
+         return FALSE;
+@@ -342,12 +423,10 @@ static Bool QuartzRandRSetConfig (ScreenPtr           pScreen,
+         
+     screenId = pQuartzScreen->displayIDs[0];
+     if (QuartzRandREnumerateModes(pScreen, screenId, QuartzRandRSetModeCallback, &reqMode)) {
+-        pQuartzScreen->currentMode = reqMode;
+         return TRUE;
+     }
+     
+     DEBUG_LOG("Unable to find a matching config: %d x %d @ %d\n", (int)reqMode.width, (int)reqMode.height, (int)reqMode.refresh);
+-
+     return FALSE;
+ }
+ 
+@@ -355,9 +434,16 @@ static Bool _QuartzRandRUpdateFakeModes (ScreenPtr pScreen) {
+     QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
+ 
+     if (pQuartzScreen->displayCount == 1) {
+-        if (!QuartzRandRGetCurrentModeInfo(pQuartzScreen->displayIDs[0],
+-                                           &pQuartzScreen->fullScreenMode))
++        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;
++
++        CFRetain(pQuartzScreen->fullScreenMode.ref);  /* This extra retain is for currentMode's copy */
+     } else {
+         pQuartzScreen->fullScreenMode.width = pScreen->width;
+         pQuartzScreen->fullScreenMode.height = pScreen->height;
+diff --git xorg-server-1.9.0/hw/xquartz/quartzRandR.h xorg-server-1.9.0/hw/xquartz/quartzRandR.h
+index 8ee2818..4a7990e 100644
+--- xorg-server-1.9.0/hw/xquartz/quartzRandR.h
++++ xorg-server-1.9.0/hw/xquartz/quartzRandR.h
+@@ -34,7 +34,7 @@
+ typedef struct {
+     size_t width, height;
+     int refresh;
+-    const void *ref;
++    void *ref; /* CGDisplayModeRef or CFDictionaryRef */
+ } QuartzModeInfo, *QuartzModeInfoPtr;
+ 
+ // Quartz specific per screen storage structure
+-- 
+1.5.6.6
+

Deleted: trunk/dports/x11/xorg-server-devel/files/0007-XQuartz-RandR-Remove-FAKE_RANDR-code.patch
===================================================================
--- trunk/dports/x11/xorg-server-devel/files/0007-XQuartz-RandR-Remove-FAKE_RANDR-code.patch	2010-08-20 22:32:45 UTC (rev 70780)
+++ trunk/dports/x11/xorg-server-devel/files/0007-XQuartz-RandR-Remove-FAKE_RANDR-code.patch	2010-08-21 06:35:57 UTC (rev 70781)
@@ -1,127 +0,0 @@
-From 50c877be2bf55d90858d3ee5ff2bb297255d2c3c Mon Sep 17 00:00:00 2001
-From: Jan Hauffa <hauffa at in.tum.de>
-Date: Fri, 16 Jul 2010 17:56:44 +0200
-Subject: [PATCH] XQuartz: RandR: Remove FAKE_RANDR code.
-
-Signed-off-by: Jan Hauffa <hauffa at in.tum.de>
-Reviewed-by: Jeremy Huddleston <jeremyhu at apple.com>
----
- hw/xquartz/quartz.c      |    6 +----
- hw/xquartz/quartzRandR.c |   52 ----------------------------------------------
- hw/xquartz/quartzRandR.h |    5 ----
- 3 files changed, 1 insertions(+), 62 deletions(-)
-
-diff --git xorg-server-1.8.99.906/hw/xquartz/quartz.c xorg-server-1.8.99.906/hw/xquartz/quartz.c
-index a4d7474..a52cac9 100644
---- xorg-server-1.8.99.906/hw/xquartz/quartz.c
-+++ xorg-server-1.8.99.906/hw/xquartz/quartz.c
-@@ -119,7 +119,7 @@ Bool QuartzSetupScreen(
-     if (! quartzProcs->InitCursor(pScreen))
-         return FALSE;
- 
--#if defined(RANDR) && !defined(FAKE_RANDR)
-+#if defined(RANDR)
-     if(!QuartzRandRInit(pScreen)) {
-         DEBUG_LOG("Failed to init RandR extension.\n");
-         return FALSE;
-@@ -239,10 +239,6 @@ void QuartzUpdateScreens(void) {
-     DeliverEvents(pRoot, &e, 1, NullWindow);
- 
-     quartzProcs->UpdateScreen(pScreen);
--    
--#ifdef FAKE_RANDR
--    RREditConnectionInfo(pScreen);
--#endif    
- }
- 
- void QuartzSetFullscreen(Bool state) {
-diff --git xorg-server-1.8.99.906/hw/xquartz/quartzRandR.c xorg-server-1.8.99.906/hw/xquartz/quartzRandR.c
-index f61ff93..b3b315c 100644
---- xorg-server-1.8.99.906/hw/xquartz/quartzRandR.c
-+++ xorg-server-1.8.99.906/hw/xquartz/quartzRandR.c
-@@ -39,60 +39,10 @@
- #include "quartzRandR.h"
- #include "quartz.h"
- 
--#if defined(FAKE_RANDR)
--#include "scrnintstr.h"
--#include "windowstr.h"
--#else
- #include <X11/extensions/randr.h>
- #include <randrstr.h>
- #include <IOKit/graphics/IOGraphicsTypes.h>
--#endif
--
--
--#if defined(FAKE_RANDR)
--
--static const int padlength[4] = {0, 3, 2, 1};
--
--void
--RREditConnectionInfo (ScreenPtr pScreen)
--{
--    xConnSetup	    *connSetup;
--    char	    *vendor;
--    xPixmapFormat   *formats;
--    xWindowRoot	    *root;
--    xDepth	    *depth;
--    xVisualType	    *visual;
--    int		    screen = 0;
--    int		    d;
--
--    connSetup = (xConnSetup *) ConnectionInfo;
--    vendor = (char *) connSetup + sizeof (xConnSetup);
--    formats = (xPixmapFormat *) ((char *) vendor +
--				 connSetup->nbytesVendor +
--				 padlength[connSetup->nbytesVendor & 3]);
--    root = (xWindowRoot *) ((char *) formats +
--			    sizeof (xPixmapFormat) * screenInfo.numPixmapFormats);
--    while (screen != pScreen->myNum)
--    {
--	depth = (xDepth *) ((char *) root + 
--			    sizeof (xWindowRoot));
--	for (d = 0; d < root->nDepths; d++)
--	{
--	    visual = (xVisualType *) ((char *) depth +
--				      sizeof (xDepth));
--	    depth = (xDepth *) ((char *) visual +
--				depth->nVisuals * sizeof (xVisualType));
--	}
--	root = (xWindowRoot *) ((char *) depth);
--	screen++;
--    }
--    root->pixWidth = pScreen->width;
--    root->pixHeight = pScreen->height;
--    root->mmWidth = pScreen->mmWidth;
--    root->mmHeight = pScreen->mmHeight;
--}
- 
--#else  /* defined(FAKE_RANDR) */
- 
- #define DEFAULT_REFRESH  60
- #define kDisplayModeUsableFlags  (kDisplayModeValidFlag | kDisplayModeSafeFlag)
-@@ -427,5 +377,3 @@ Bool QuartzRandRInit (ScreenPtr pScreen) {
-     pScrPriv->rrSetConfig = QuartzRandRSetConfig;
-     return TRUE;
- }
--
--#endif  /* defined(FAKE_RANDR) */
-diff --git xorg-server-1.8.99.906/hw/xquartz/quartzRandR.h xorg-server-1.8.99.906/hw/xquartz/quartzRandR.h
-index a190205..711c3f3 100644
---- xorg-server-1.8.99.906/hw/xquartz/quartzRandR.h
-+++ xorg-server-1.8.99.906/hw/xquartz/quartzRandR.h
-@@ -27,11 +27,6 @@
-  * use or other dealings in this Software without prior written authorization.
-  */
- 
--/*define FAKE_RANDR 1*/
- #define USE_DEPRECATED_CG_API 1
- 
--#if defined(FAKE_RANDR)
--void RREditConnectionInfo (ScreenPtr pScreen);
--#else
- Bool QuartzRandRInit (ScreenPtr pScreen);
--#endif
--- 
-1.5.6.6
-

Added: trunk/dports/x11/xorg-server-devel/files/0008-XQuartz-RandR-Don-t-change-the-rootless-preference.patch
===================================================================
--- trunk/dports/x11/xorg-server-devel/files/0008-XQuartz-RandR-Don-t-change-the-rootless-preference.patch	                        (rev 0)
+++ trunk/dports/x11/xorg-server-devel/files/0008-XQuartz-RandR-Don-t-change-the-rootless-preference.patch	2010-08-21 06:35:57 UTC (rev 70781)
@@ -0,0 +1,742 @@
+From d51bce565e9b789694176c2150ec698b9528e194 Mon Sep 17 00:00:00 2001
+From: Jeremy Huddleston <jeremyhu at apple.com>
+Date: Mon, 26 Jul 2010 23:34:49 -0700
+Subject: [PATCH] XQuartz: RandR: Don't change the rootless preference when changing RandR mode
+
+Also renames a bunch of other variables for better consistency.
+
+Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
+---
+ hw/xquartz/X11Application.h |    3 --
+ hw/xquartz/X11Application.m |   44 +++++++++++++++----------------
+ hw/xquartz/X11Controller.m  |   42 +++++++++++++++---------------
+ hw/xquartz/darwinEvents.c   |    6 ++--
+ hw/xquartz/quartz.c         |   59 +++++++++++++++++++++++-------------------
+ hw/xquartz/quartz.h         |   18 +++++++++++-
+ hw/xquartz/quartzAudio.c    |    4 +-
+ hw/xquartz/quartzCommon.h   |    6 ----
+ hw/xquartz/quartzKeyboard.c |    6 ++--
+ hw/xquartz/quartzRandR.c    |   32 +++++++++++-----------
+ hw/xquartz/quartzRandR.h    |    2 +-
+ hw/xquartz/xpr/xprAppleWM.c |    2 +-
+ hw/xquartz/xpr/xprCursor.c  |    6 ++--
+ hw/xquartz/xpr/xprFrame.c   |    4 +-
+ hw/xquartz/xpr/xprScreen.c  |    5 ++-
+ 15 files changed, 124 insertions(+), 115 deletions(-)
+
+diff --git xorg-server-1.9.0/hw/xquartz/X11Application.h xorg-server-1.9.0/hw/xquartz/X11Application.h
+index ce19e03..4621284 100644
+--- xorg-server-1.9.0/hw/xquartz/X11Application.h
++++ xorg-server-1.9.0/hw/xquartz/X11Application.h
+@@ -75,9 +75,6 @@ void X11ApplicationLaunchClient (const char *cmd);
+ 
+ void X11ApplicationMain(int argc, char **argv, char **envp);
+ 
+-extern int X11EnableKeyEquivalents;
+-extern int quartzHasRoot, quartzEnableRootless, quartzFullscreenMenu;
+-
+ #define PREFS_APPSMENU              "apps_menu"
+ #define PREFS_FAKEBUTTONS           "enable_fake_buttons"
+ #define PREFS_SYSBEEP               "enable_system_beep"
+diff --git xorg-server-1.9.0/hw/xquartz/X11Application.m xorg-server-1.9.0/hw/xquartz/X11Application.m
+index 36c39e5..781dccc 100644
+--- xorg-server-1.9.0/hw/xquartz/X11Application.m
++++ xorg-server-1.9.0/hw/xquartz/X11Application.m
+@@ -38,6 +38,7 @@
+ #import "X11Application.h"
+ 
+ #include "darwin.h"
++#include "quartz.h"
+ #include "darwinEvents.h"
+ #include "quartzKeyboard.h"
+ #include "quartz.h"
+@@ -63,9 +64,6 @@ extern int xpbproxy_run (void);
+ /* Stuck modifier / button state... force release when we context switch */
+ static NSEventType keyState[NUM_KEYCODES];
+ 
+-int X11EnableKeyEquivalents = TRUE, quartzFullscreenMenu = FALSE;
+-int quartzHasRoot = FALSE, quartzEnableRootless = TRUE;
+-
+ extern Bool noTestExtensions;
+ 
+ #if MAC_OS_X_VERSION_MIN_REQUIRED >= 1050
+@@ -287,23 +285,23 @@ static void message_kit_thread (SEL selector, NSObject *arg) {
+                         do_swallow = YES;
+                         for_x = NO;
+ #if XPLUGIN_VERSION >= 1
+-                    } else if(X11EnableKeyEquivalents &&
++                    } else if(XQuartzEnableKeyEquivalents &&
+                              xp_is_symbolic_hotkey_event([e eventRef])) {
+                         swallow_keycode = [e keyCode];
+                         do_swallow = YES;
+                         for_x = NO;
+ #endif
+-                    } else if(X11EnableKeyEquivalents &&
++                    } else if(XQuartzEnableKeyEquivalents &&
+                               [[self mainMenu] performKeyEquivalent:e]) {
+                         swallow_keycode = [e keyCode];
+                         do_swallow = YES;
+                         for_appkit = NO;
+                         for_x = NO;
+-                    } else if(!quartzEnableRootless
++                    } else if(!XQuartzIsRootless
+                               && ([e modifierFlags] & ALL_KEY_MASKS) == (NSCommandKeyMask | NSAlternateKeyMask)
+                               && ([e keyCode] == 0 /*a*/ || [e keyCode] == 53 /*Esc*/)) {
+                         /* We have this here to force processing fullscreen 
+-                         * toggle even if X11EnableKeyEquivalents is disabled */
++                         * toggle even if XQuartzEnableKeyEquivalents is disabled */
+                         swallow_keycode = [e keyCode];
+                         do_swallow = YES;
+                         for_x = NO;
+@@ -372,7 +370,7 @@ static void message_kit_thread (SEL selector, NSObject *arg) {
+                     break;
+                     
+                 case 18: /* ApplicationDidReactivate */
+-                    if (quartzHasRoot) for_appkit = NO;
++                    if (XQuartzHasRoot) for_appkit = NO;
+                     break;
+                     
+                 case NSApplicationDeactivatedEventType:
+@@ -422,7 +420,7 @@ static void message_kit_thread (SEL selector, NSObject *arg) {
+     if ([state boolValue])
+         SetSystemUIMode(kUIModeNormal, 0); 
+     else
+-        SetSystemUIMode(kUIModeAllHidden, quartzFullscreenMenu ? kUIOptionAutoShowMenuBar : 0); // kUIModeAllSuppressed or kUIOptionAutoShowMenuBar can be used to allow "mouse-activation"
++        SetSystemUIMode(kUIModeAllHidden, XQuartzFullscreenMenu ? kUIOptionAutoShowMenuBar : 0); // kUIModeAllSuppressed or kUIOptionAutoShowMenuBar can be used to allow "mouse-activation"
+ }
+ 
+ - (void) launch_client:(NSString *)cmd {
+@@ -720,18 +718,18 @@ static NSMutableArray * cfarray_to_nsarray (CFArrayRef in) {
+     NSString *nsstr;
+     const char *tem;
+ 	
+-    quartzUseSysBeep = [self prefs_get_boolean:@PREFS_SYSBEEP
+-                                       default:quartzUseSysBeep];
+-    quartzEnableRootless = [self prefs_get_boolean:@PREFS_ROOTLESS
+-                                           default:quartzEnableRootless];
+-    quartzFullscreenMenu = [self prefs_get_boolean:@PREFS_FULLSCREEN_MENU
+-                                           default:quartzFullscreenMenu];
+-    quartzFullscreenDisableHotkeys = ![self prefs_get_boolean:@PREFS_FULLSCREEN_HOTKEYS
+-                                                      default:!quartzFullscreenDisableHotkeys];
++    XQuartzUseSysBeep = [self prefs_get_boolean:@PREFS_SYSBEEP
++                                       default:XQuartzUseSysBeep];
++    XQuartzRootlessDefault = [self prefs_get_boolean:@PREFS_ROOTLESS
++                                           default:XQuartzRootlessDefault];
++    XQuartzFullscreenMenu = [self prefs_get_boolean:@PREFS_FULLSCREEN_MENU
++                                           default:XQuartzFullscreenMenu];
++    XQuartzFullscreenDisableHotkeys = ![self prefs_get_boolean:@PREFS_FULLSCREEN_HOTKEYS
++                                                      default:!XQuartzFullscreenDisableHotkeys];
+     darwinFakeButtons = [self prefs_get_boolean:@PREFS_FAKEBUTTONS
+                                         default:darwinFakeButtons];
+-    quartzOptionSendsAlt = [self prefs_get_boolean:@PREFS_OPTION_SENDS_ALT
+-                                           default:quartzOptionSendsAlt];
++    XQuartzOptionSendsAlt = [self prefs_get_boolean:@PREFS_OPTION_SENDS_ALT
++                                           default:XQuartzOptionSendsAlt];
+ 
+     if (darwinFakeButtons) {
+         const char *fake2, *fake3;
+@@ -759,8 +757,8 @@ static NSMutableArray * cfarray_to_nsarray (CFArrayRef in) {
+         }
+     }
+ 
+-    X11EnableKeyEquivalents = [self prefs_get_boolean:@PREFS_KEYEQUIVS
+-                                              default:X11EnableKeyEquivalents];
++    XQuartzEnableKeyEquivalents = [self prefs_get_boolean:@PREFS_KEYEQUIVS
++                                              default:XQuartzEnableKeyEquivalents];
+ 	
+     darwinSyncKeymap = [self prefs_get_boolean:@PREFS_SYNC_KEYMAP
+                                        default:darwinSyncKeymap];
+@@ -1158,7 +1156,7 @@ static inline int ensure_flag(int flags, int device_independent, int device_depe
+                 pDev = darwinTabletCurrent;
+             }
+ 
+-            if(!quartzServerVisible && noTestExtensions) {
++            if(!XQuartzServerVisible && noTestExtensions) {
+ #if defined(XPLUGIN_VERSION) && XPLUGIN_VERSION > 0
+ /* Older libXplugin (Tiger/"Stock" Leopard) aren't thread safe, so we can't call xp_find_window from the Appkit thread */
+                 xp_window_id wid = 0;
+@@ -1218,7 +1216,7 @@ static inline int ensure_flag(int flags, int device_independent, int device_depe
+             /* If we're in the background, we need to send a MotionNotify event
+              * first, since we aren't getting them on background mouse motion
+              */
+-            if(!quartzServerVisible && noTestExtensions) {
++            if(!XQuartzServerVisible && noTestExtensions) {
+                 bgMouseLocationUpdated = FALSE;
+                 DarwinSendPointerEvents(darwinPointer, MotionNotify, 0, location.x,
+                                         location.y, pressure, tilt.x, tilt.y);
+diff --git xorg-server-1.9.0/hw/xquartz/X11Controller.m xorg-server-1.9.0/hw/xquartz/X11Controller.m
+index d66d039..13b6366 100644
+--- xorg-server-1.9.0/hw/xquartz/X11Controller.m
++++ xorg-server-1.9.0/hw/xquartz/X11Controller.m
+@@ -609,13 +609,13 @@ objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
+ }
+ 
+ - (IBAction) enable_fullscreen_changed:sender {
+-    int value = ![enable_fullscreen intValue];
++    XQuartzRootlessDefault = ![enable_fullscreen intValue];
+ 
+-    [enable_fullscreen_menu setEnabled:!value];
++    [enable_fullscreen_menu setEnabled:!XQuartzRootlessDefault];
+ 
+-    DarwinSendDDXEvent(kXquartzSetRootless, 1, value);
++    DarwinSendDDXEvent(kXquartzSetRootless, 1, XQuartzRootlessDefault);
+ 
+-    [NSApp prefs_set_boolean:@PREFS_ROOTLESS value:value];
++    [NSApp prefs_set_boolean:@PREFS_ROOTLESS value:XQuartzRootlessDefault];
+     [NSApp prefs_synchronize];
+ }
+ 
+@@ -638,24 +638,24 @@ objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
+         darwinFakeButtons = [fake_buttons intValue];
+         [NSApp prefs_set_boolean:@PREFS_FAKEBUTTONS value:darwinFakeButtons];
+     } else if(sender == use_sysbeep) {
+-        quartzUseSysBeep = [use_sysbeep intValue];
+-        [NSApp prefs_set_boolean:@PREFS_SYSBEEP value:quartzUseSysBeep];
++        XQuartzUseSysBeep = [use_sysbeep intValue];
++        [NSApp prefs_set_boolean:@PREFS_SYSBEEP value:XQuartzUseSysBeep];
+     } else if(sender == enable_keyequivs) {
+-        X11EnableKeyEquivalents =  [enable_keyequivs intValue];
+-        [NSApp prefs_set_boolean:@PREFS_KEYEQUIVS value:X11EnableKeyEquivalents];
++        XQuartzEnableKeyEquivalents =  [enable_keyequivs intValue];
++        [NSApp prefs_set_boolean:@PREFS_KEYEQUIVS value:XQuartzEnableKeyEquivalents];
+     } else if(sender == sync_keymap) {
+         darwinSyncKeymap = [sync_keymap intValue];
+         [NSApp prefs_set_boolean:@PREFS_SYNC_KEYMAP value:darwinSyncKeymap];
+     } else if(sender == enable_fullscreen_menu) {
+-        quartzFullscreenMenu = [enable_fullscreen_menu intValue];
+-        [NSApp prefs_set_boolean:@PREFS_FULLSCREEN_MENU value:quartzFullscreenMenu];
++        XQuartzFullscreenMenu = [enable_fullscreen_menu intValue];
++        [NSApp prefs_set_boolean:@PREFS_FULLSCREEN_MENU value:XQuartzFullscreenMenu];
+     } else if(sender == option_sends_alt) {
+-        BOOL prev_opt_sends_alt = quartzOptionSendsAlt;
++        BOOL prev_opt_sends_alt = XQuartzOptionSendsAlt;
+         
+-        quartzOptionSendsAlt = [option_sends_alt intValue];
+-        [NSApp prefs_set_boolean:@PREFS_OPTION_SENDS_ALT value:quartzOptionSendsAlt];
++        XQuartzOptionSendsAlt = [option_sends_alt intValue];
++        [NSApp prefs_set_boolean:@PREFS_OPTION_SENDS_ALT value:XQuartzOptionSendsAlt];
+ 
+-        if(prev_opt_sends_alt != quartzOptionSendsAlt)
++        if(prev_opt_sends_alt != XQuartzOptionSendsAlt)
+             QuartsResyncKeymap(TRUE);
+     } else if(sender == click_through) {
+         [NSApp prefs_set_boolean:@PREFS_CLICK_THROUGH value:[click_through intValue]];
+@@ -701,10 +701,10 @@ objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
+     BOOL pbproxy_active = [NSApp prefs_get_boolean:@PREFS_SYNC_PB default:YES];
+     
+     [fake_buttons setIntValue:darwinFakeButtons];
+-    [use_sysbeep setIntValue:quartzUseSysBeep];
+-    [enable_keyequivs setIntValue:X11EnableKeyEquivalents];
++    [use_sysbeep setIntValue:XQuartzUseSysBeep];
++    [enable_keyequivs setIntValue:XQuartzEnableKeyEquivalents];
+     [sync_keymap setIntValue:darwinSyncKeymap];
+-    [option_sends_alt setIntValue:quartzOptionSendsAlt];
++    [option_sends_alt setIntValue:XQuartzOptionSendsAlt];
+     [click_through setIntValue:[NSApp prefs_get_boolean:@PREFS_CLICK_THROUGH default:NO]];
+     [focus_follows_mouse setIntValue:[NSApp prefs_get_boolean:@PREFS_FFM default:NO]];
+     [focus_on_new_window setIntValue:[NSApp prefs_get_boolean:@PREFS_FOCUS_ON_NEW_WINDOW default:YES]];
+@@ -729,9 +729,9 @@ objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
+     [sync_text1 setTextColor:pbproxy_active ? [NSColor controlTextColor] : [NSColor disabledControlTextColor]];
+     [sync_text2 setTextColor:pbproxy_active ? [NSColor controlTextColor] : [NSColor disabledControlTextColor]];
+ 	
+-    [enable_fullscreen setIntValue:!quartzEnableRootless];
+-    [enable_fullscreen_menu setEnabled:!quartzEnableRootless];
+-    [enable_fullscreen_menu setIntValue:quartzFullscreenMenu];
++    [enable_fullscreen setIntValue:!XQuartzRootlessDefault];
++    [enable_fullscreen_menu setEnabled:!XQuartzRootlessDefault];
++    [enable_fullscreen_menu setIntValue:XQuartzFullscreenMenu];
+     
+     [prefs_panel makeKeyAndOrderFront:sender];
+ }
+@@ -752,7 +752,7 @@ objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
+   NSMenu *menu = [item menu];
+     
+   if (item == toggle_fullscreen_item)
+-    return !quartzEnableRootless;
++    return !XQuartzIsRootless;
+   else if (menu == [X11App windowsMenu] || menu == dock_menu
+ 	   || (menu == [x11_about_item menu] && [item tag] == 42))
+     return (AppleWMSelectedEvents () & AppleWMControllerNotifyMask) != 0;
+diff --git xorg-server-1.9.0/hw/xquartz/darwinEvents.c xorg-server-1.9.0/hw/xquartz/darwinEvents.c
+index 7367068..4332202 100644
+--- xorg-server-1.9.0/hw/xquartz/darwinEvents.c
++++ xorg-server-1.9.0/hw/xquartz/darwinEvents.c
+@@ -239,9 +239,9 @@ static void DarwinEventHandler(int screenNum, InternalEvent *ie, DeviceIntPtr de
+             
+         case kXquartzToggleFullscreen:
+             DEBUG_LOG("kXquartzToggleFullscreen\n");
+-            if(quartzEnableRootless) 
++            if(XQuartzIsRootless)
+                 ErrorF("Ignoring kXquartzToggleFullscreen because of rootless mode.");
+-            else if (quartzHasRoot)
++            else if (XQuartzHasRoot)
+                 QuartzHide();
+             else
+                 QuartzShow();
+@@ -250,7 +250,7 @@ static void DarwinEventHandler(int screenNum, InternalEvent *ie, DeviceIntPtr de
+         case kXquartzSetRootless:
+             DEBUG_LOG("kXquartzSetRootless\n");
+             QuartzSetRootless(e->data[0]);
+-            if (!quartzEnableRootless && !quartzHasRoot)
++            if (!XQuartzIsRootless && !XQuartzHasRoot)
+                 QuartzHide();
+             break;
+             
+diff --git xorg-server-1.9.0/hw/xquartz/quartz.c xorg-server-1.9.0/hw/xquartz/quartz.c
+index a52cac9..cd90457 100644
+--- xorg-server-1.9.0/hw/xquartz/quartz.c
++++ xorg-server-1.9.0/hw/xquartz/quartz.c
+@@ -66,15 +66,20 @@
+ #include <rootlessCommon.h>
+ #include <Xplugin.h>
+ 
+-// Shared global variables for Quartz modes
+-int                     quartzUseSysBeep = 0;
+-int                     quartzServerVisible = FALSE;
+ DevPrivateKeyRec        quartzScreenKeyRec;
+ int                     aquaMenuBarHeight = 0;
+ QuartzModeProcsPtr      quartzProcs = NULL;
+ const char             *quartzOpenGLBundle = NULL;
+-int                     quartzFullscreenDisableHotkeys = TRUE;
+-int                     quartzOptionSendsAlt = FALSE;
++
++Bool XQuartzFullscreenDisableHotkeys = TRUE;
++Bool XQuartzOptionSendsAlt = FALSE;
++Bool XQuartzEnableKeyEquivalents = TRUE;
++Bool XQuartzHasRoot = FALSE;
++Bool XQuartzRootlessDefault = TRUE;
++Bool XQuartzIsRootless = TRUE;
++Bool XQuartzServerVisible = FALSE;
++Bool XQuartzFullscreenMenu = FALSE;
++Bool XQuartzUseSysBeep = FALSE;
+ 
+ /*
+ ===========================================================================
+@@ -245,61 +250,61 @@ void QuartzSetFullscreen(Bool state) {
+     
+     DEBUG_LOG("QuartzSetFullscreen: state=%d\n", state);
+     
+-    if(quartzHasRoot == state)
++    if(XQuartzHasRoot == state)
+         return;
+     
+-    quartzHasRoot = state;
++    XQuartzHasRoot = state;
+     
+     xp_disable_update ();
+     
+-    if (!quartzHasRoot && !quartzEnableRootless)
++    if (!XQuartzHasRoot && !XQuartzIsRootless)
+         RootlessHideAllWindows();
+     
+-    RootlessUpdateRooted(quartzHasRoot);
++    RootlessUpdateRooted(XQuartzHasRoot);
+     
+-    if (quartzHasRoot && !quartzEnableRootless)
++    if (XQuartzHasRoot && !XQuartzIsRootless)
+         RootlessShowAllWindows ();
+     
+-    if (quartzHasRoot || quartzEnableRootless) {
++    if (XQuartzHasRoot || XQuartzIsRootless) {
+         RootlessRepositionWindows(screenInfo.screens[0]);
+     }
+ 
+     /* Somehow the menubar manages to interfere with our event stream
+      * in fullscreen mode, even though it's not visible. 
+      */
+-    X11ApplicationShowHideMenubar(!quartzHasRoot);
++    X11ApplicationShowHideMenubar(!XQuartzHasRoot);
+     
+     xp_reenable_update ();
+     
+-    if (quartzFullscreenDisableHotkeys)
+-        xp_disable_hot_keys(quartzHasRoot);
++    if (XQuartzFullscreenDisableHotkeys)
++        xp_disable_hot_keys(XQuartzHasRoot);
+ }
+ 
+ void QuartzSetRootless(Bool state) {
+-    if(quartzEnableRootless == state)
++    if(XQuartzIsRootless == state)
+         return;
+     
+-    quartzEnableRootless = state;
++    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 */    
+     QuartzUpdateScreens();
+ 
+-    if(!quartzHasRoot) {
+-        if(!quartzEnableRootless) {
++    if(!XQuartzHasRoot) {
++        if(!XQuartzIsRootless) {
+             RootlessHideAllWindows();
+         } else {
+             RootlessShowAllWindows();
+         }
+     }
+ 
+-    X11ApplicationShowHideMenubar(!quartzHasRoot);
++    X11ApplicationShowHideMenubar(!XQuartzHasRoot);
+ 
+     xp_reenable_update();
+ 
+-    if (!quartzEnableRootless && quartzFullscreenDisableHotkeys)
+-        xp_disable_hot_keys(quartzHasRoot);
++    if (!XQuartzIsRootless && XQuartzFullscreenDisableHotkeys)
++        xp_disable_hot_keys(XQuartzHasRoot);
+ }
+ 
+ /*
+@@ -311,17 +316,17 @@ void QuartzSetRootless(Bool state) {
+ void QuartzShow(void) {
+     int i;
+ 
+-    if (quartzServerVisible)
++    if (XQuartzServerVisible)
+         return;
+     
+-    quartzServerVisible = TRUE;
++    XQuartzServerVisible = TRUE;
+     for (i = 0; i < screenInfo.numScreens; i++) {
+         if (screenInfo.screens[i]) {
+             quartzProcs->ResumeScreen(screenInfo.screens[i]);
+         }
+     }
+     
+-    if (!quartzEnableRootless)
++    if (!XQuartzIsRootless)
+         QuartzSetFullscreen(TRUE);
+ }
+ 
+@@ -336,7 +341,7 @@ void QuartzHide(void)
+ {
+     int i;
+ 
+-    if (quartzServerVisible) {
++    if (XQuartzServerVisible) {
+         for (i = 0; i < screenInfo.numScreens; i++) {
+             if (screenInfo.screens[i]) {
+                 quartzProcs->SuspendScreen(screenInfo.screens[i]);
+@@ -345,7 +350,7 @@ void QuartzHide(void)
+     }
+     
+     QuartzSetFullscreen(FALSE);
+-    quartzServerVisible = FALSE;
++    XQuartzServerVisible = FALSE;
+ }
+ 
+ 
+@@ -358,7 +363,7 @@ void QuartzSetRootClip(
+ {
+     int i;
+ 
+-    if (!quartzServerVisible)
++    if (!XQuartzServerVisible)
+         return;
+ 
+     for (i = 0; i < screenInfo.numScreens; i++) {
+diff --git xorg-server-1.9.0/hw/xquartz/quartz.h xorg-server-1.9.0/hw/xquartz/quartz.h
+index 1b924e7..a0a17cb 100644
+--- xorg-server-1.9.0/hw/xquartz/quartz.h
++++ xorg-server-1.9.0/hw/xquartz/quartz.h
+@@ -35,6 +35,7 @@
+ 
+ #include "screenint.h"
+ #include "window.h"
++#include "pixmap.h"
+ 
+ /*------------------------------------------
+    Quartz display mode function types
+@@ -113,7 +114,20 @@ typedef struct _QuartzModeProcs {
+ } QuartzModeProcsRec, *QuartzModeProcsPtr;
+ 
+ extern QuartzModeProcsPtr quartzProcs;
+-extern int quartzHasRoot, quartzEnableRootless;
++
++extern Bool XQuartzHasRoot;          /* TODO: These two booleans are very similar and */
++extern Bool XQuartzServerVisible;    /* the code that uses them needs to be refactored
++                                      * XQuartzHasRoot is essentially the "saved" XQuartzServerVisible
++                                      * value from when the server was not in rootless mode.
++                                      */
++
++extern Bool XQuartzEnableKeyEquivalents;
++extern Bool XQuartzRootlessDefault;  /* Is our default mode rootless? */
++extern Bool XQuartzIsRootless;       /* Is our current mode rootless (or FS)? */
++extern Bool XQuartzFullscreenMenu;   /* Show the menu bar (autohide) while in FS */
++extern Bool XQuartzFullscreenDisableHotkeys;
++extern Bool XQuartzOptionSendsAlt;   /* Alt or Mode_switch? */
++extern Bool XQuartzUseSysBeep;       /* Sys beep or our own? */
+ 
+ Bool QuartzAddScreen(int index, ScreenPtr pScreen);
+ Bool QuartzSetupScreen(int index, ScreenPtr pScreen);
+@@ -129,8 +143,8 @@ void QuartzHide(void);
+ void QuartzSetRootClip(BOOL enable);
+ void QuartzSpaceChanged(uint32_t space_id);
+ 
+-void QuartzSetFullscreen(Bool state);
+ void QuartzSetRootless(Bool state);
++void QuartzSetFullscreen(Bool state);
+ 
+ int server_main(int argc, char **argv, char **envp);
+ #endif
+diff --git xorg-server-1.9.0/hw/xquartz/quartzAudio.c xorg-server-1.9.0/hw/xquartz/quartzAudio.c
+index 708202b..d0f7c53 100644
+--- xorg-server-1.9.0/hw/xquartz/quartzAudio.c
++++ xorg-server-1.9.0/hw/xquartz/quartzAudio.c
+@@ -42,7 +42,7 @@
+ #include <dix-config.h>
+ #endif
+ 
+-#include "quartzCommon.h"
++#include "quartz.h"
+ #include "quartzAudio.h"
+ 
+ #include <CoreAudio/CoreAudio.h>
+@@ -220,7 +220,7 @@ void DDXRingBell(
+     int pitch,          // pitch is Hz
+     int duration )      // duration is milliseconds
+ {
+-    if (quartzUseSysBeep) {
++    if (XQuartzUseSysBeep) {
+         if (volume)
+             NSBeep();
+         return;
+diff --git xorg-server-1.9.0/hw/xquartz/quartzCommon.h xorg-server-1.9.0/hw/xquartz/quartzCommon.h
+index 718df4b..fbfe6f8 100644
+--- xorg-server-1.9.0/hw/xquartz/quartzCommon.h
++++ xorg-server-1.9.0/hw/xquartz/quartzCommon.h
+@@ -38,13 +38,7 @@
+ #include <X11/Xdefs.h>
+ #include "privates.h"
+ 
+-// User preferences used by Quartz modes
+-extern int              quartzUseSysBeep;
+-extern int              quartzFullscreenDisableHotkeys;
+-extern int              quartzOptionSendsAlt;
+-
+ // Other shared data
+-extern int              quartzServerVisible;
+ extern DevPrivateKeyRec quartzScreenKeyRec;
+ #define quartzScreenKey (&quartzScreenKeyRec)
+ extern int              aquaMenuBarHeight;
+diff --git xorg-server-1.9.0/hw/xquartz/quartzKeyboard.c xorg-server-1.9.0/hw/xquartz/quartzKeyboard.c
+index 75cf23f..f54c686 100644
+--- xorg-server-1.9.0/hw/xquartz/quartzKeyboard.c
++++ xorg-server-1.9.0/hw/xquartz/quartzKeyboard.c
+@@ -48,7 +48,7 @@
+ #include <sys/stat.h>
+ #include <AvailabilityMacros.h>
+ 
+-#include "quartzCommon.h"
++#include "quartz.h"
+ #include "darwin.h"
+ #include "darwinEvents.h"
+ 
+@@ -262,7 +262,7 @@ static void DarwinBuildModifierMaps(darwinKeyboardInfo *info) {
+             case XK_Alt_L:
+                 info->modifierKeycodes[NX_MODIFIERKEY_ALTERNATE][0] = i;
+                 info->modMap[MIN_KEYCODE + i] = Mod1Mask;
+-                if(!quartzOptionSendsAlt)
++                if(!XQuartzOptionSendsAlt)
+                     *k = XK_Mode_switch; // Yes, this is ugly.  This needs to be cleaned up when we integrate quartzKeyboard with this code and refactor.
+                 break;
+ 
+@@ -272,7 +272,7 @@ static void DarwinBuildModifierMaps(darwinKeyboardInfo *info) {
+ #else
+                 info->modifierKeycodes[NX_MODIFIERKEY_ALTERNATE][0] = i;
+ #endif
+-                if(!quartzOptionSendsAlt)
++                if(!XQuartzOptionSendsAlt)
+                     *k = XK_Mode_switch; // Yes, this is ugly.  This needs to be cleaned up when we integrate quartzKeyboard with this code and refactor.
+                 info->modMap[MIN_KEYCODE + i] = Mod1Mask;
+                 break;
+diff --git xorg-server-1.9.0/hw/xquartz/quartzRandR.c xorg-server-1.9.0/hw/xquartz/quartzRandR.c
+index 9b84fa1..7534267 100644
+--- xorg-server-1.9.0/hw/xquartz/quartzRandR.c
++++ xorg-server-1.9.0/hw/xquartz/quartzRandR.c
+@@ -140,7 +140,7 @@ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
+             break;
+     }
+ 
+-    switch(callback(pScreen, screenId, &pQuartzScreen->fullScreenMode, data)) {
++    switch(callback(pScreen, screenId, &pQuartzScreen->fullscreenMode, data)) {
+         case CALLBACK_SUCCESS:
+             return TRUE;
+         case CALLBACK_ERROR:
+@@ -239,7 +239,7 @@ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
+             break;
+     }
+ 
+-    switch(callback(pScreen, screenId, &pQuartzScreen->fullScreenMode, data)) {
++    switch(callback(pScreen, screenId, &pQuartzScreen->fullscreenMode, data)) {
+         case CALLBACK_SUCCESS:
+             return TRUE;
+         case CALLBACK_ERROR:
+@@ -377,7 +377,7 @@ static Bool QuartzRandRGetInfo (ScreenPtr pScreen, Rotation *rotations) {
+            resolution including/excluding the menu bar. */
+ 
+         QuartzRandRRegisterMode(pScreen, &pQuartzScreen->rootlessMode);
+-        QuartzRandRRegisterMode(pScreen, &pQuartzScreen->fullScreenMode);
++        QuartzRandRRegisterMode(pScreen, &pQuartzScreen->fullscreenMode);
+         return TRUE;
+     }
+ 
+@@ -434,37 +434,37 @@ static Bool _QuartzRandRUpdateFakeModes (ScreenPtr pScreen) {
+     QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
+ 
+     if (pQuartzScreen->displayCount == 1) {
+-        if(pQuartzScreen->fullScreenMode.ref)
+-            CFRelease(pQuartzScreen->fullScreenMode.ref);
++        if(pQuartzScreen->fullscreenMode.ref)
++            CFRelease(pQuartzScreen->fullscreenMode.ref);
+         if(pQuartzScreen->currentMode.ref)
+             CFRelease(pQuartzScreen->currentMode.ref);
+         
+         if (!QuartzRandRCopyCurrentModeInfo(pQuartzScreen->displayIDs[0],
+-                                            &pQuartzScreen->fullScreenMode))
++                                            &pQuartzScreen->fullscreenMode))
+             return FALSE;
+ 
+-        CFRetain(pQuartzScreen->fullScreenMode.ref);  /* This extra retain is for currentMode's copy */
++        CFRetain(pQuartzScreen->fullscreenMode.ref);  /* This extra retain is for currentMode's copy */
+     } else {
+-        pQuartzScreen->fullScreenMode.width = pScreen->width;
+-        pQuartzScreen->fullScreenMode.height = pScreen->height;
+-        if(quartzEnableRootless)
+-            pQuartzScreen->fullScreenMode.height += aquaMenuBarHeight;
++        pQuartzScreen->fullscreenMode.width = pScreen->width;
++        pQuartzScreen->fullscreenMode.height = pScreen->height;
++        if(XQuartzIsRootless)
++            pQuartzScreen->fullscreenMode.height += aquaMenuBarHeight;
+     }
+ 
+-    pQuartzScreen->fullScreenMode.refresh = FAKE_REFRESH_FULLSCREEN;
++    pQuartzScreen->fullscreenMode.refresh = FAKE_REFRESH_FULLSCREEN;
+ 
+-    pQuartzScreen->rootlessMode = pQuartzScreen->fullScreenMode;
++    pQuartzScreen->rootlessMode = pQuartzScreen->fullscreenMode;
+     pQuartzScreen->rootlessMode.refresh = FAKE_REFRESH_ROOTLESS;
+     pQuartzScreen->rootlessMode.height -= aquaMenuBarHeight;
+ 
+-    if(quartzEnableRootless) {
++    if(XQuartzIsRootless) {
+         pQuartzScreen->currentMode = pQuartzScreen->rootlessMode;
+     } else {
+-        pQuartzScreen->currentMode = pQuartzScreen->fullScreenMode;
++        pQuartzScreen->currentMode = pQuartzScreen->fullscreenMode;
+     }
+     
+     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);
+     DEBUG_LOG("currentMode: %d x %d\n", (int)pQuartzScreen->currentMode.width, (int)pQuartzScreen->currentMode.height);
+     
+     return TRUE;
+diff --git xorg-server-1.9.0/hw/xquartz/quartzRandR.h xorg-server-1.9.0/hw/xquartz/quartzRandR.h
+index 4a7990e..b2d4d09 100644
+--- xorg-server-1.9.0/hw/xquartz/quartzRandR.h
++++ xorg-server-1.9.0/hw/xquartz/quartzRandR.h
+@@ -45,7 +45,7 @@ typedef struct {
+     // No CG display will be covered by more than one X11 screen.
+     int displayCount;
+     CGDirectDisplayID *displayIDs;
+-    QuartzModeInfo rootlessMode, fullScreenMode, currentMode;
++    QuartzModeInfo rootlessMode, fullscreenMode, currentMode;
+ } QuartzScreenRec, *QuartzScreenPtr;
+ 
+ #define QUARTZ_PRIV(pScreen) \
+diff --git xorg-server-1.9.0/hw/xquartz/xpr/xprAppleWM.c xorg-server-1.9.0/hw/xquartz/xpr/xprAppleWM.c
+index 4b31e3a..1a3d427 100644
+--- xorg-server-1.9.0/hw/xquartz/xpr/xprAppleWM.c
++++ xorg-server-1.9.0/hw/xquartz/xpr/xprAppleWM.c
+@@ -67,7 +67,7 @@ static int xprSetWindowLevel(
+     if(!winRec)
+         return BadWindow;
+     
+-    if(quartzEnableRootless)
++    if(XQuartzIsRootless)
+         wc.window_level = normal_window_levels[level];
+     else
+         wc.window_level = rooted_window_levels[level];
+diff --git xorg-server-1.9.0/hw/xquartz/xpr/xprCursor.c xorg-server-1.9.0/hw/xquartz/xpr/xprCursor.c
+index a106e72..216678e 100644
+--- xorg-server-1.9.0/hw/xquartz/xpr/xprCursor.c
++++ xorg-server-1.9.0/hw/xquartz/xpr/xprCursor.c
+@@ -35,7 +35,7 @@
+ #include <dix-config.h>
+ #endif
+ 
+-#include "quartzCommon.h"
++#include "quartz.h"
+ #include "xpr.h"
+ #include "darwin.h"
+ #include "darwinEvents.h"
+@@ -226,7 +226,7 @@ QuartzSetCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor, int x,
+ {
+     QuartzCursorScreenPtr ScreenPriv = CURSOR_PRIV(pScreen);
+ 
+-    if (!quartzServerVisible)
++    if (!XQuartzServerVisible)
+         return;
+ 
+     if (pCursor == NULL)
+@@ -295,7 +295,7 @@ QuartzCrossScreen(ScreenPtr pScreen, Bool entering)
+ static void
+ QuartzWarpCursor(DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)
+ {
+-    if (quartzServerVisible)
++    if (XQuartzServerVisible)
+     {
+         int sx, sy;
+ 
+diff --git xorg-server-1.9.0/hw/xquartz/xpr/xprFrame.c xorg-server-1.9.0/hw/xquartz/xpr/xprFrame.c
+index 42f06ef..ede5af5 100644
+--- xorg-server-1.9.0/hw/xquartz/xpr/xprFrame.c
++++ xorg-server-1.9.0/hw/xquartz/xpr/xprFrame.c
+@@ -171,7 +171,7 @@ xprCreateFrame(RootlessWindowPtr pFrame, ScreenPtr pScreen,
+ 
+     pFrame->level = !IsRoot (pWin) ? AppleWMWindowLevelNormal : AppleWMNumWindowLevels;
+ 
+-    if(quartzEnableRootless)
++    if(XQuartzIsRootless)
+         wc.window_level = normal_window_levels[pFrame->level];
+     else
+         wc.window_level = rooted_window_levels[pFrame->level];
+@@ -285,7 +285,7 @@ static void xprRestackFrame(RootlessFrameID wid, RootlessFrameID nextWid) {
+         RootlessWindowRec *winRec = x_hash_table_lookup(window_hash, wid, NULL);
+ 
+         if(winRec) {
+-            if(quartzEnableRootless)
++            if(XQuartzIsRootless)
+                 wc.window_level = normal_window_levels[winRec->level];
+             else
+                 wc.window_level = rooted_window_levels[winRec->level];
+diff --git xorg-server-1.9.0/hw/xquartz/xpr/xprScreen.c xorg-server-1.9.0/hw/xquartz/xpr/xprScreen.c
+index b3ac693..599ef6f 100644
+--- xorg-server-1.9.0/hw/xquartz/xpr/xprScreen.c
++++ xorg-server-1.9.0/hw/xquartz/xpr/xprScreen.c
+@@ -158,7 +158,7 @@ displayScreenBounds(CGDirectDisplayID id)
+               (int)frame.origin.x, (int)frame.origin.y);
+     
+     /* Remove menubar to help standard X11 window managers. */
+-    if (quartzEnableRootless && 
++    if (XQuartzIsRootless && 
+         frame.origin.x == 0 && frame.origin.y == 0) {
+         frame.origin.y += aquaMenuBarHeight;
+         frame.size.height -= aquaMenuBarHeight;
+@@ -274,7 +274,8 @@ xprDisplayInit(void)
+     AppleDRIExtensionInit();
+     xprAppleWMInit();
+ 
+-    if (!quartzEnableRootless)
++    XQuartzIsRootless = XQuartzRootlessDefault;
++    if (!XQuartzIsRootless)
+         RootlessHideAllWindows();
+ }
+ 
+-- 
+1.5.6.6
+

Deleted: trunk/dports/x11/xorg-server-devel/files/0008-XQuartz-RandR-Use-deprecated-CG-APIs-only-on-Leopa.patch
===================================================================
--- trunk/dports/x11/xorg-server-devel/files/0008-XQuartz-RandR-Use-deprecated-CG-APIs-only-on-Leopa.patch	2010-08-20 22:32:45 UTC (rev 70780)
+++ trunk/dports/x11/xorg-server-devel/files/0008-XQuartz-RandR-Use-deprecated-CG-APIs-only-on-Leopa.patch	2010-08-21 06:35:57 UTC (rev 70781)
@@ -1,88 +0,0 @@
-From 16083d38acaea3e9835e1b46eb45e608cc831b32 Mon Sep 17 00:00:00 2001
-From: Jeremy Huddleston <jeremyhu at apple.com>
-Date: Sun, 25 Jul 2010 22:25:49 -0700
-Subject: [PATCH] XQuartz: RandR: Use deprecated CG APIs only on Leopard and earlier
-
-Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
----
- hw/xquartz/quartzRandR.c |   10 ++++++----
- hw/xquartz/quartzRandR.h |    6 +++++-
- 2 files changed, 11 insertions(+), 5 deletions(-)
-
-diff --git xorg-server-1.8.99.906/hw/xquartz/quartzRandR.c xorg-server-1.8.99.906/hw/xquartz/quartzRandR.c
-index b3b315c..e46e904 100644
---- xorg-server-1.8.99.906/hw/xquartz/quartzRandR.c
-+++ xorg-server-1.8.99.906/hw/xquartz/quartzRandR.c
-@@ -1,9 +1,9 @@
- /*
-- *
-  * Quartz-specific support for the XRandR extension
-  *
-  * Copyright (c) 2001-2004 Greg Parker and Torrey T. Lyons,
-  *               2010      Jan Hauffa.
-+ *               2010      Apple Inc.
-  *                 All Rights Reserved.
-  *
-  * Permission is hereby granted, free of charge, to any person obtaining a
-@@ -39,6 +39,8 @@
- #include "quartzRandR.h"
- #include "quartz.h"
- 
-+#include <AvailabilityMacros.h>
-+
- #include <X11/extensions/randr.h>
- #include <randrstr.h>
- #include <IOKit/graphics/IOGraphicsTypes.h>
-@@ -51,7 +53,7 @@ typedef Bool (*QuartzModeCallback)
-     (ScreenPtr, CGDirectDisplayID, QuartzModeInfoPtr, void *);
- 
- 
--#if defined(USE_DEPRECATED_CG_API)
-+#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060
- 
- static long getDictLong (CFDictionaryRef dictRef, CFStringRef key) {
-     long value;
-@@ -140,7 +142,7 @@ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
-     return TRUE;
- }
- 
--#else  /* defined(USE_DEPRECATED_CG_API) */
-+#else /* we have the new CG APIs from Snow Leopard */
- 
- static void QuartzRandRGetModeInfo (CGDisplayModeRef modeRef,
-                                     QuartzModeInfoPtr pMode) {
-@@ -220,7 +222,7 @@ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
-     return TRUE;
- }
- 
--#endif  /* defined(USE_DEPRECATED_CG_API) */
-+#endif  /* Snow Leopard CoreGraphics APIs */
- 
- 
- static Bool QuartzRandRModesEqual (QuartzModeInfoPtr pMode1,
-diff --git xorg-server-1.8.99.906/hw/xquartz/quartzRandR.h xorg-server-1.8.99.906/hw/xquartz/quartzRandR.h
-index 711c3f3..d57dc3b 100644
---- xorg-server-1.8.99.906/hw/xquartz/quartzRandR.h
-+++ xorg-server-1.8.99.906/hw/xquartz/quartzRandR.h
-@@ -2,6 +2,7 @@
-  * quartzRandR.h
-  *
-  * Copyright (c) 2010 Jan Hauffa.
-+ *               2010 Apple Inc.
-  *                 All Rights Reserved.
-  *
-  * Permission is hereby granted, free of charge, to any person obtaining a
-@@ -27,6 +28,9 @@
-  * use or other dealings in this Software without prior written authorization.
-  */
- 
--#define USE_DEPRECATED_CG_API 1
-+#ifndef _QUARTZRANDR_H_
-+#define _QUARTZRANDR_H_
- 
- Bool QuartzRandRInit (ScreenPtr pScreen);
-+
-+#endif
--- 
-1.5.6.6
-

Added: trunk/dports/x11/xorg-server-devel/files/0009-XQuartz-RandR-Refactor-legacy-mode-switching-to-be.patch
===================================================================
--- trunk/dports/x11/xorg-server-devel/files/0009-XQuartz-RandR-Refactor-legacy-mode-switching-to-be.patch	                        (rev 0)
+++ trunk/dports/x11/xorg-server-devel/files/0009-XQuartz-RandR-Refactor-legacy-mode-switching-to-be.patch	2010-08-21 06:35:57 UTC (rev 70781)
@@ -0,0 +1,598 @@
+From 895a7f9364d3a1c786cdfd6843fe913ff1d66579 Mon Sep 17 00:00:00 2001
+From: Jeremy Huddleston <jeremyhu at apple.com>
+Date: Tue, 3 Aug 2010 12:51:51 -0700
+Subject: [PATCH] XQuartz: RandR: Refactor legacy mode-switching to be better integrated with RandR
+
+Adds three new functions
+void QuartzRandRSetFakeRootless (void);
+void QuartzRandRSetFakeFullscreen (void);
+void QuartzRandRToggleFullscreen (void);
+
+The first two are identical to requesting the fake modes from a RandR client
+The third responds to cmd-alt-a to leave fullscreen or RandR.
+
+Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
+---
+ hw/xquartz/X11Application.m |    2 +-
+ hw/xquartz/darwinEvents.c   |   14 ++--
+ hw/xquartz/quartz.c         |   64 ++++++++++-------
+ hw/xquartz/quartz.h         |   10 +--
+ hw/xquartz/quartzRandR.c    |  163 ++++++++++++++++++++++++++++---------------
+ hw/xquartz/quartzRandR.h    |   20 +++++
+ 6 files changed, 175 insertions(+), 98 deletions(-)
+
+diff --git xorg-server-1.9.0/hw/xquartz/X11Application.m xorg-server-1.9.0/hw/xquartz/X11Application.m
+index 781dccc..8f4f23f 100644
+--- xorg-server-1.9.0/hw/xquartz/X11Application.m
++++ xorg-server-1.9.0/hw/xquartz/X11Application.m
+@@ -370,7 +370,7 @@ static void message_kit_thread (SEL selector, NSObject *arg) {
+                     break;
+                     
+                 case 18: /* ApplicationDidReactivate */
+-                    if (XQuartzHasRoot) for_appkit = NO;
++                    if (XQuartzFullscreenVisible) for_appkit = NO;
+                     break;
+                     
+                 case NSApplicationDeactivatedEventType:
+diff --git xorg-server-1.9.0/hw/xquartz/darwinEvents.c xorg-server-1.9.0/hw/xquartz/darwinEvents.c
+index 4332202..74fadf4 100644
+--- xorg-server-1.9.0/hw/xquartz/darwinEvents.c
++++ xorg-server-1.9.0/hw/xquartz/darwinEvents.c
+@@ -241,17 +241,17 @@ static void DarwinEventHandler(int screenNum, InternalEvent *ie, DeviceIntPtr de
+             DEBUG_LOG("kXquartzToggleFullscreen\n");
+             if(XQuartzIsRootless)
+                 ErrorF("Ignoring kXquartzToggleFullscreen because of rootless mode.");
+-            else if (XQuartzHasRoot)
+-                QuartzHide();
+-            else
+-                QuartzShow();
++            else 
++                QuartzRandRToggleFullscreen();
+             break;
+             
+         case kXquartzSetRootless:
+             DEBUG_LOG("kXquartzSetRootless\n");
+-            QuartzSetRootless(e->data[0]);
+-            if (!XQuartzIsRootless && !XQuartzHasRoot)
+-                QuartzHide();
++            if(e->data[0]) {
++                QuartzRandRSetFakeRootless();
++            } else {
++                QuartzRandRSetFakeFullscreen(FALSE);
++            }
+             break;
+             
+         case kXquartzSetRootClip:
+diff --git xorg-server-1.9.0/hw/xquartz/quartz.c xorg-server-1.9.0/hw/xquartz/quartz.c
+index cd90457..e21303c 100644
+--- xorg-server-1.9.0/hw/xquartz/quartz.c
++++ xorg-server-1.9.0/hw/xquartz/quartz.c
+@@ -74,7 +74,7 @@ const char             *quartzOpenGLBundle = NULL;
+ Bool XQuartzFullscreenDisableHotkeys = TRUE;
+ Bool XQuartzOptionSendsAlt = FALSE;
+ Bool XQuartzEnableKeyEquivalents = TRUE;
+-Bool XQuartzHasRoot = FALSE;
++Bool XQuartzFullscreenVisible = FALSE;
+ Bool XQuartzRootlessDefault = TRUE;
+ Bool XQuartzIsRootless = TRUE;
+ Bool XQuartzServerVisible = FALSE;
+@@ -246,44 +246,58 @@ void QuartzUpdateScreens(void) {
+     quartzProcs->UpdateScreen(pScreen);
+ }
+ 
+-void QuartzSetFullscreen(Bool state) {
++void QuartzShowFullscreen(int state) {
++    int i;
++    
++    DEBUG_LOG("QuartzShowFullscreen: state=%d\n", state);
+     
+-    DEBUG_LOG("QuartzSetFullscreen: state=%d\n", state);
++    if(XQuartzIsRootless) {
++        ErrorF("QuartzShowFullscreen called while in rootless mode.\n");
++        return;
++    }
+     
+-    if(XQuartzHasRoot == state)
++    if(XQuartzFullscreenVisible == state)
+         return;
+     
+-    XQuartzHasRoot = state;
++    XQuartzFullscreenVisible = state;
+     
+     xp_disable_update ();
+     
+-    if (!XQuartzHasRoot && !XQuartzIsRootless)
++    if (!XQuartzFullscreenVisible)
+         RootlessHideAllWindows();
+     
+-    RootlessUpdateRooted(XQuartzHasRoot);
++    RootlessUpdateRooted(XQuartzFullscreenVisible);
+     
+-    if (XQuartzHasRoot && !XQuartzIsRootless)
++    if (XQuartzFullscreenVisible) {
+         RootlessShowAllWindows ();
+-    
+-    if (XQuartzHasRoot || XQuartzIsRootless) {
+-        RootlessRepositionWindows(screenInfo.screens[0]);
++        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);
++        }
+     }
+ 
+     /* Somehow the menubar manages to interfere with our event stream
+      * in fullscreen mode, even though it's not visible. 
+      */
+-    X11ApplicationShowHideMenubar(!XQuartzHasRoot);
++    X11ApplicationShowHideMenubar(!XQuartzFullscreenVisible);
+     
+     xp_reenable_update ();
+     
+     if (XQuartzFullscreenDisableHotkeys)
+-        xp_disable_hot_keys(XQuartzHasRoot);
++        xp_disable_hot_keys(XQuartzFullscreenVisible);
+ }
+ 
+-void QuartzSetRootless(Bool state) {
++void QuartzSetRootless(Bool state) {    
++    DEBUG_LOG("QuartzSetRootless state=%d\n", state);
++    
+     if(XQuartzIsRootless == state)
+         return;
+     
++    if(state)
++        QuartzShowFullscreen(FALSE);
++    
+     XQuartzIsRootless = state;
+ 
+     xp_disable_update();
+@@ -291,20 +305,17 @@ void QuartzSetRootless(Bool state) {
+     /* When in rootless, the menubar is not part of the screen, so we need to update our screens on toggle */    
+     QuartzUpdateScreens();
+ 
+-    if(!XQuartzHasRoot) {
+-        if(!XQuartzIsRootless) {
+-            RootlessHideAllWindows();
+-        } else {
+-            RootlessShowAllWindows();
+-        }
++    if(XQuartzIsRootless) {
++        RootlessShowAllWindows();
++    } else {
++        RootlessHideAllWindows();
+     }
+ 
+-    X11ApplicationShowHideMenubar(!XQuartzHasRoot);
++    X11ApplicationShowHideMenubar(TRUE);
+ 
+     xp_reenable_update();
+ 
+-    if (!XQuartzIsRootless && XQuartzFullscreenDisableHotkeys)
+-        xp_disable_hot_keys(XQuartzHasRoot);
++    xp_disable_hot_keys(FALSE);
+ }
+ 
+ /*
+@@ -327,7 +338,7 @@ void QuartzShow(void) {
+     }
+     
+     if (!XQuartzIsRootless)
+-        QuartzSetFullscreen(TRUE);
++        QuartzShowFullscreen(TRUE);
+ }
+ 
+ 
+@@ -348,8 +359,9 @@ void QuartzHide(void)
+             }
+         }
+     }
+-    
+-    QuartzSetFullscreen(FALSE);
++
++    if(!XQuartzIsRootless)
++        QuartzShowFullscreen(FALSE);
+     XQuartzServerVisible = FALSE;
+ }
+ 
+diff --git xorg-server-1.9.0/hw/xquartz/quartz.h xorg-server-1.9.0/hw/xquartz/quartz.h
+index a0a17cb..7efb7e0 100644
+--- xorg-server-1.9.0/hw/xquartz/quartz.h
++++ xorg-server-1.9.0/hw/xquartz/quartz.h
+@@ -115,12 +115,8 @@ typedef struct _QuartzModeProcs {
+ 
+ extern QuartzModeProcsPtr quartzProcs;
+ 
+-extern Bool XQuartzHasRoot;          /* TODO: These two booleans are very similar and */
+-extern Bool XQuartzServerVisible;    /* the code that uses them needs to be refactored
+-                                      * XQuartzHasRoot is essentially the "saved" XQuartzServerVisible
+-                                      * value from when the server was not in rootless mode.
+-                                      */
+-
++extern Bool XQuartzFullscreenVisible; /* Are the windows visible (predicated on !rootless) */
++extern Bool XQuartzServerVisible;     /* Is the server visible ... TODO: Refactor to "active" */
+ extern Bool XQuartzEnableKeyEquivalents;
+ extern Bool XQuartzRootlessDefault;  /* Is our default mode rootless? */
+ extern Bool XQuartzIsRootless;       /* Is our current mode rootless (or FS)? */
+@@ -144,7 +140,7 @@ void QuartzSetRootClip(BOOL enable);
+ void QuartzSpaceChanged(uint32_t space_id);
+ 
+ void QuartzSetRootless(Bool state);
+-void QuartzSetFullscreen(Bool state);
++void QuartzShowFullscreen(Bool state);
+ 
+ int server_main(int argc, char **argv, char **envp);
+ #endif
+diff --git xorg-server-1.9.0/hw/xquartz/quartzRandR.c xorg-server-1.9.0/hw/xquartz/quartzRandR.c
+index 7534267..586d299 100644
+--- xorg-server-1.9.0/hw/xquartz/quartzRandR.c
++++ xorg-server-1.9.0/hw/xquartz/quartzRandR.c
+@@ -62,7 +62,7 @@ static Bool ignore_next_fake_mode_update = FALSE;
+ #define CALLBACK_ERROR -1
+ 
+ typedef int (*QuartzModeCallback)
+-    (ScreenPtr, CGDirectDisplayID, QuartzModeInfoPtr, void *);
++    (ScreenPtr, QuartzModeInfoPtr, void *);
+ 
+ #if MAC_OS_X_VERSION_MIN_REQUIRED < 1060
+ 
+@@ -98,6 +98,7 @@ static void QuartzRandRGetModeInfo (CFDictionaryRef modeRef,
+     if (pMode->refresh == 0)
+         pMode->refresh = DEFAULT_REFRESH;
+     pMode->ref = NULL;
++    pMode->pSize = NULL;
+ }
+ 
+ static Bool QuartzRandRCopyCurrentModeInfo (CGDirectDisplayID screenId,
+@@ -112,14 +113,13 @@ static Bool QuartzRandRCopyCurrentModeInfo (CGDirectDisplayID screenId,
+     return TRUE;
+ }
+ 
+-static Bool QuartzRandRSetMode (CGDirectDisplayID screenId,
++static Bool QuartzRandRSetCGMode (CGDirectDisplayID screenId,
+                                 QuartzModeInfoPtr pMode) {
+     CFDictionaryRef modeRef = (CFDictionaryRef) pMode->ref;
+     return (CGDisplaySwitchToMode(screenId, modeRef) == kCGErrorSuccess);
+ }
+ 
+ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
+-                                       CGDirectDisplayID screenId,
+                                        QuartzModeCallback callback,
+                                        void *data) {
+     CFDictionaryRef curModeRef, modeRef;
+@@ -129,8 +129,9 @@ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
+     int i;
+     BOOL retval = FALSE;
+     QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
++    CGDirectDisplayID screenId = pQuartzScreen->displayIDs[0];
+ 
+-    switch(callback(pScreen, screenId, &pQuartzScreen->rootlessMode, data)) {
++    switch(callback(pScreen, &pQuartzScreen->rootlessMode, data)) {
+         case CALLBACK_SUCCESS:
+             return TRUE;
+         case CALLBACK_ERROR:
+@@ -140,7 +141,7 @@ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
+             break;
+     }
+ 
+-    switch(callback(pScreen, screenId, &pQuartzScreen->fullscreenMode, data)) {
++    switch(callback(pScreen, &pQuartzScreen->fullscreenMode, data)) {
+         case CALLBACK_SUCCESS:
+             return TRUE;
+         case CALLBACK_ERROR:
+@@ -172,7 +173,7 @@ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
+ 
+         QuartzRandRGetModeInfo(modeRef, &modeInfo);
+         modeInfo.ref = modeRef;
+-        cb = callback(pScreen, screenId, &modeInfo, data);
++        cb = callback(pScreen, &modeInfo, data);
+         if (cb == CALLBACK_SUCCESS)
+             break;
+         if (cb == CALLBACK_ERROR) {
+@@ -193,6 +194,7 @@ static void QuartzRandRGetModeInfo (CGDisplayModeRef modeRef,
+     if (pMode->refresh == 0)
+         pMode->refresh = DEFAULT_REFRESH;
+     pMode->ref = NULL;
++    pMode->pSize = NULL;
+ }
+ 
+ static Bool QuartzRandRCopyCurrentModeInfo (CGDirectDisplayID screenId,
+@@ -206,7 +208,7 @@ static Bool QuartzRandRCopyCurrentModeInfo (CGDirectDisplayID screenId,
+     return TRUE;
+ }
+ 
+-static Bool QuartzRandRSetMode (CGDirectDisplayID screenId,
++static Bool QuartzRandRSetCGMode (CGDirectDisplayID screenId,
+                                 QuartzModeInfoPtr pMode) {
+     CGDisplayModeRef modeRef = (CGDisplayModeRef) pMode->ref;
+     if (!modeRef)
+@@ -216,7 +218,6 @@ static Bool QuartzRandRSetMode (CGDirectDisplayID screenId,
+ }
+ 
+ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
+-                                       CGDirectDisplayID screenId,
+                                        QuartzModeCallback callback,
+                                        void *data) {
+     CGDisplayModeRef curModeRef, modeRef;
+@@ -228,8 +229,9 @@ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
+     Bool retval = TRUE;
+ 
+     QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
++    CGDirectDisplayID screenId = pQuartzScreen->displayIDs[0];
+ 
+-    switch(callback(pScreen, screenId, &pQuartzScreen->rootlessMode, data)) {
++    switch(callback(pScreen, &pQuartzScreen->rootlessMode, data)) {
+         case CALLBACK_SUCCESS:
+             return TRUE;
+         case CALLBACK_ERROR:
+@@ -239,7 +241,7 @@ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
+             break;
+     }
+ 
+-    switch(callback(pScreen, screenId, &pQuartzScreen->fullscreenMode, data)) {
++    switch(callback(pScreen, &pQuartzScreen->fullscreenMode, data)) {
+         case CALLBACK_SUCCESS:
+             return TRUE;
+         case CALLBACK_ERROR:
+@@ -277,7 +279,7 @@ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
+ 
+         QuartzRandRGetModeInfo(modeRef, &modeInfo);
+         modeInfo.ref = modeRef;
+-        cb = callback(pScreen, screenId, &modeInfo, data);
++        cb = callback(pScreen, &modeInfo, data);
+         if (cb == CALLBACK_SUCCESS)
+             break;
+ 		if (cb == CALLBACK_ERROR) {
+@@ -306,14 +308,15 @@ static Bool QuartzRandRRegisterMode (ScreenPtr pScreen,
+                                      QuartzModeInfoPtr pMode) {
+     QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
+     Bool isCurrentMode = QuartzRandRModesEqual(&pQuartzScreen->currentMode, pMode);
+-    RRScreenSizePtr pSize = RRRegisterSize(pScreen,
+-        pMode->width, pMode->height, pScreen->mmWidth, pScreen->mmHeight);
+-    if (pSize) {
++
++    /* TODO: DPI */
++    pMode->pSize = RRRegisterSize(pScreen, pMode->width, pMode->height, pScreen->mmWidth, pScreen->mmHeight);
++    if (pMode->pSize) {
+         //DEBUG_LOG("registering: %d x %d @ %d %s\n", (int)pMode->width, (int)pMode->height, (int)pMode->refresh, isCurrentMode ? "*" : "");
+-        RRRegisterRate(pScreen, pSize, pMode->refresh);
++        RRRegisterRate(pScreen, pMode->pSize, pMode->refresh);
+ 
+         if (isCurrentMode)
+-            RRSetCurrentConfig(pScreen, RR_Rotate_0, pMode->refresh, pSize);
++            RRSetCurrentConfig(pScreen, RR_Rotate_0, pMode->refresh, pMode->pSize);
+ 
+         return TRUE;
+     }
+@@ -321,7 +324,6 @@ static Bool QuartzRandRRegisterMode (ScreenPtr pScreen,
+ }
+ 
+ static int QuartzRandRRegisterModeCallback (ScreenPtr pScreen,
+-                                        CGDirectDisplayID screenId,
+                                         QuartzModeInfoPtr pMode,
+                                         void *data __unused) {
+     if(QuartzRandRRegisterMode(pScreen, pMode)) {
+@@ -331,40 +333,53 @@ static int QuartzRandRRegisterModeCallback (ScreenPtr pScreen,
+     }
+ }
+ 
++static Bool QuartzRandRSetMode(ScreenPtr pScreen, QuartzModeInfoPtr pMode, BOOL doRegister) {
++    QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
++    CGDirectDisplayID screenId = pQuartzScreen->displayIDs[0];
++
++    if (pQuartzScreen->currentMode.ref && CFEqual(pMode->ref, pQuartzScreen->currentMode.ref)) {
++        DEBUG_LOG("Requested RandR resolution matches current CG mode\n");
++    } if (QuartzRandRSetCGMode(screenId, pMode)) {
++        ignore_next_fake_mode_update = TRUE;
++    } else {
++        DEBUG_LOG("Error while requesting CG resolution change.\n");
++        return FALSE;
++    }
++
++    /* If the client requested the fake rootless mode, switch to rootless.
++     * Otherwise, force fullscreen mode.
++     */
++    QuartzSetRootless(pMode->refresh == FAKE_REFRESH_ROOTLESS);
++    if (pMode->refresh != FAKE_REFRESH_ROOTLESS) {
++        QuartzShowFullscreen(TRUE);
++    }
++
++    if(pQuartzScreen->currentMode.ref)
++        CFRelease(pQuartzScreen->currentMode.ref);
++    pQuartzScreen->currentMode = *pMode;
++    CFRetain(pQuartzScreen->currentMode.ref);
++    
++    return TRUE;
++}
++
+ static int QuartzRandRSetModeCallback (ScreenPtr pScreen,
+-                                       CGDirectDisplayID screenId,
+                                        QuartzModeInfoPtr pMode,
+                                        void *data) {
+     QuartzModeInfoPtr pReqMode = (QuartzModeInfoPtr) data;
+-    QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
+ 	
+     if (!QuartzRandRModesEqual(pMode, pReqMode))
+         return CALLBACK_CONTINUE;  /* continue enumeration */
+ 
+     DEBUG_LOG("Found a match for requested RandR resolution (%dx%d@%d).\n", (int)pMode->width, (int)pMode->height, (int)pMode->refresh);
+ 
+-    if (pQuartzScreen->currentMode.ref && CFEqual(pMode->ref, pQuartzScreen->currentMode.ref)) {
+-        DEBUG_LOG("Requested RandR resolution matches current CG mode\n");
+-        return CALLBACK_SUCCESS; /* We don't need to do anything in CG */
+-    }
+-
+-    if (QuartzRandRSetMode(screenId, pMode)) {
+-        if(pQuartzScreen->currentMode.ref)
+-            CFRelease(pQuartzScreen->currentMode.ref);
+-        pQuartzScreen->currentMode = *pMode;
+-        CFRetain(pQuartzScreen->currentMode.ref);
+-
+-        ignore_next_fake_mode_update = TRUE;
++    if(QuartzRandRSetMode(pScreen, pMode, FALSE))
+         return CALLBACK_SUCCESS;
+-    } else {
+-        DEBUG_LOG("Error while requesting CG resolution change.\n");
++    else
+         return CALLBACK_ERROR;
+-    }
+ }
+ 
+ static Bool QuartzRandRGetInfo (ScreenPtr pScreen, Rotation *rotations) {
+     QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
+-    CGDirectDisplayID screenId;
+ 
+     *rotations = RR_Rotate_0;  /* TODO: support rotation */
+ 
+@@ -381,8 +396,7 @@ static Bool QuartzRandRGetInfo (ScreenPtr pScreen, Rotation *rotations) {
+         return TRUE;
+     }
+ 
+-    screenId = pQuartzScreen->displayIDs[0];
+-    return QuartzRandREnumerateModes(pScreen, screenId, QuartzRandRRegisterModeCallback, NULL);
++    return QuartzRandREnumerateModes(pScreen, QuartzRandRRegisterModeCallback, NULL);
+ }
+ 
+ static Bool QuartzRandRSetConfig (ScreenPtr           pScreen,
+@@ -390,39 +404,20 @@ static Bool QuartzRandRSetConfig (ScreenPtr           pScreen,
+                                   int                 rate,
+                                   RRScreenSizePtr     pSize) {
+     QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
+-    CGDirectDisplayID screenId;
+     QuartzModeInfo reqMode;
+ 
+     reqMode.width = pSize->width;
+     reqMode.height = pSize->height;
+     reqMode.refresh = rate;
+ 
+-    /* If the client requested the fake rootless mode, switch to rootless.
+-     * Otherwise, force fullscreen mode.
+-     * TODO: Refactor all this fullscreen/rootless crap as it is spaghetti
+-     *       has redundancies.
+-     */
+-    QuartzSetRootless(reqMode.refresh == FAKE_REFRESH_ROOTLESS);
+-    QuartzSetFullscreen(reqMode.refresh != FAKE_REFRESH_ROOTLESS);
+-    if(reqMode.refresh != FAKE_REFRESH_ROOTLESS &&
+-       reqMode.refresh != FAKE_REFRESH_FULLSCREEN)
+-        QuartzShow();
+-
+     if (pQuartzScreen->displayCount == 0)
+         return FALSE;
+-    if (pQuartzScreen->displayCount > 1) {
+-        /* RandR operations are not well-defined for an X11 screen spanning
+-           multiple CG displays. Do not accept any configuations that differ
+-           from the current configuration. */
+-        return TRUE;
+-    }
+ 
+     /* Do not switch modes if requested mode is equal to current mode. */
+     if (QuartzRandRModesEqual(&reqMode, &pQuartzScreen->currentMode))
+         return TRUE;
+         
+-    screenId = pQuartzScreen->displayIDs[0];
+-    if (QuartzRandREnumerateModes(pScreen, screenId, QuartzRandRSetModeCallback, &reqMode)) {
++    if (QuartzRandREnumerateModes(pScreen, QuartzRandRSetModeCallback, &reqMode)) {
+         return TRUE;
+     }
+     
+@@ -499,3 +494,57 @@ Bool QuartzRandRInit (ScreenPtr pScreen) {
+     pScrPriv->rrSetConfig = QuartzRandRSetConfig;
+     return TRUE;
+ }
++
++void QuartzRandRSetFakeRootless (void) {
++    int i;
++    
++    DEBUG_LOG("QuartzRandRSetFakeRootless called.\n");
++    
++    for (i=0; i < screenInfo.numScreens; i++) {
++        ScreenPtr pScreen = screenInfo.screens[i];
++        QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
++
++        QuartzRandRSetMode(pScreen, &pQuartzScreen->rootlessMode, TRUE);
++    }
++}
++
++void QuartzRandRSetFakeFullscreen (BOOL state) {
++    int i;
++
++    DEBUG_LOG("QuartzRandRSetFakeFullscreen called.\n");
++    
++    for (i=0; i < screenInfo.numScreens; i++) {
++        ScreenPtr pScreen = screenInfo.screens[i];
++        QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
++
++        QuartzRandRSetMode(pScreen, &pQuartzScreen->fullscreenMode, TRUE);
++    }
++    
++    QuartzShowFullscreen(state);
++}
++
++/* Toggle fullscreen mode.  If "fake" fullscreen is the current mode,
++ * this will just show/hide the X11 windows.  If we are in a RandR fullscreen
++ * mode, this will toggles us to the default fake mode and hide windows if
++ * it is fullscreen
++ */
++void QuartzRandRToggleFullscreen (void) {
++    ScreenPtr pScreen = screenInfo.screens[0];
++    QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
++
++    if (pQuartzScreen->currentMode.ref == NULL) {
++        ErrorF("Ignoring QuartzRandRToggleFullscreen because don't have a current mode set.\n");
++    } else if (pQuartzScreen->currentMode.refresh == FAKE_REFRESH_ROOTLESS) {
++        ErrorF("Ignoring QuartzRandRToggleFullscreen because we are in rootless mode.\n");
++    } else if (pQuartzScreen->currentMode.refresh == FAKE_REFRESH_FULLSCREEN) {
++        /* Legacy fullscreen mode.  Hide/Show */
++        QuartzShowFullscreen(!XQuartzFullscreenVisible);
++    } else {
++        /* RandR fullscreen mode.  Return to default mode and hide if it is fullscreen. */
++        if(XQuartzRootlessDefault) {
++            QuartzRandRSetFakeRootless();
++        } else {
++            QuartzRandRSetFakeFullscreen(FALSE);
++        }
++    }    
++}
+diff --git xorg-server-1.9.0/hw/xquartz/quartzRandR.h xorg-server-1.9.0/hw/xquartz/quartzRandR.h
+index b2d4d09..fb0ce0c 100644
+--- xorg-server-1.9.0/hw/xquartz/quartzRandR.h
++++ xorg-server-1.9.0/hw/xquartz/quartzRandR.h
+@@ -31,9 +31,12 @@
+ #ifndef _QUARTZRANDR_H_
+ #define _QUARTZRANDR_H_
+ 
++#include "randrstr.h"
++
+ typedef struct {
+     size_t width, height;
+     int refresh;
++    RRScreenSizePtr pSize;
+     void *ref; /* CGDisplayModeRef or CFDictionaryRef */
+ } QuartzModeInfo, *QuartzModeInfoPtr;
+ 
+@@ -57,4 +60,21 @@ void QuartzCopyDisplayIDs(ScreenPtr pScreen,
+ Bool QuartzRandRUpdateFakeModes (BOOL force_update);
+ Bool QuartzRandRInit (ScreenPtr pScreen);
+ 
++/* These two functions provide functionality expected by the legacy
++ * mode switching.  They are equivalent to a client requesting one
++ * of the modes corresponding to these "fake" modes.
++ * QuartzRandRSetFakeFullscreen takes an argument which is used to determine
++ * the visibility of the windows after the change.
++ */
++void QuartzRandRSetFakeRootless (void);
++void QuartzRandRSetFakeFullscreen (BOOL state);
++
++
++/* Toggle fullscreen mode.  If "fake" fullscreen is the current mode,
++ * this will just show/hide the X11 windows.  If we are in a RandR fullscreen
++ * mode, this will toggles us to the default fake mode and hide windows if
++ * it is fullscreen
++ */
++void QuartzRandRToggleFullscreen (void);
++
+ #endif
+-- 
+1.5.6.6
+

Deleted: trunk/dports/x11/xorg-server-devel/files/0009-XQuartz-RandR-Respond-better-to-resolution-changes.patch
===================================================================
--- trunk/dports/x11/xorg-server-devel/files/0009-XQuartz-RandR-Respond-better-to-resolution-changes.patch	2010-08-20 22:32:45 UTC (rev 70780)
+++ trunk/dports/x11/xorg-server-devel/files/0009-XQuartz-RandR-Respond-better-to-resolution-changes.patch	2010-08-21 06:35:57 UTC (rev 70781)
@@ -1,401 +0,0 @@
-From 42647a084bd4a1913c54521f992a00b59c0a5e68 Mon Sep 17 00:00:00 2001
-From: Jeremy Huddleston <jeremyhu at apple.com>
-Date: Mon, 26 Jul 2010 01:17:12 -0700
-Subject: [PATCH] XQuartz: RandR: Respond better to resolution changes made outside X
-
-Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
----
- hw/xquartz/darwinEvents.c  |    6 ++
- hw/xquartz/quartzCommon.h  |   23 ------
- hw/xquartz/quartzRandR.c   |  174 ++++++++++++++++++++++++++------------------
- hw/xquartz/quartzRandR.h   |   24 ++++++
- hw/xquartz/xpr/xprScreen.c |    1 +
- 5 files changed, 135 insertions(+), 93 deletions(-)
-
-diff --git xorg-server-1.8.99.906/hw/xquartz/darwinEvents.c xorg-server-1.8.99.906/hw/xquartz/darwinEvents.c
-index 7b34b8a..7367068 100644
---- xorg-server-1.8.99.906/hw/xquartz/darwinEvents.c
-+++ xorg-server-1.8.99.906/hw/xquartz/darwinEvents.c
-@@ -52,6 +52,7 @@ in this Software without prior written authorization from The Open Group.
- #include "darwin.h"
- #include "quartz.h"
- #include "quartzKeyboard.h"
-+#include "quartzRandR.h"
- #include "darwinEvents.h"
- 
- #include <sys/types.h>
-@@ -276,7 +277,12 @@ static void DarwinEventHandler(int screenNum, InternalEvent *ie, DeviceIntPtr de
-             break;
-             
-         case kXquartzDisplayChanged:
-+            DEBUG_LOG("kXquartzDisplayChanged\n");
-             QuartzUpdateScreens();
-+#ifdef RANDR
-+            /* Update our RandR info */
-+            QuartzRandRUpdateFakeModes(TRUE);
-+#endif
-             break;
-             
-         default:
-diff --git xorg-server-1.8.99.906/hw/xquartz/quartzCommon.h xorg-server-1.8.99.906/hw/xquartz/quartzCommon.h
-index 851e74c..718df4b 100644
---- xorg-server-1.8.99.906/hw/xquartz/quartzCommon.h
-+++ xorg-server-1.8.99.906/hw/xquartz/quartzCommon.h
-@@ -38,29 +38,6 @@
- #include <X11/Xdefs.h>
- #include "privates.h"
- 
--typedef struct {
--    size_t width, height;
--    int refresh;
--    const void *ref;
--} QuartzModeInfo, *QuartzModeInfoPtr;
--
--// Quartz specific per screen storage structure
--typedef struct {
--    // List of CoreGraphics displays that this X11 screen covers.
--    // This is more than one CG display for video mirroring and
--    // rootless PseudoramiX mode.
--    // No CG display will be covered by more than one X11 screen.
--    int displayCount;
--    CGDirectDisplayID *displayIDs;
--    QuartzModeInfo originalMode, fakeMode;
--} QuartzScreenRec, *QuartzScreenPtr;
--
--#define QUARTZ_PRIV(pScreen) \
--    ((QuartzScreenPtr)dixLookupPrivate(&pScreen->devPrivates, quartzScreenKey))
--
--void QuartzCopyDisplayIDs(ScreenPtr pScreen,
--                          int displayCount, CGDirectDisplayID *displayIDs);
--
- // User preferences used by Quartz modes
- extern int              quartzUseSysBeep;
- extern int              quartzFullscreenDisableHotkeys;
-diff --git xorg-server-1.8.99.906/hw/xquartz/quartzRandR.c xorg-server-1.8.99.906/hw/xquartz/quartzRandR.c
-index e46e904..65dce22 100644
---- xorg-server-1.8.99.906/hw/xquartz/quartzRandR.c
-+++ xorg-server-1.8.99.906/hw/xquartz/quartzRandR.c
-@@ -38,6 +38,7 @@
- #include "quartzCommon.h"
- #include "quartzRandR.h"
- #include "quartz.h"
-+#include "darwin.h"
- 
- #include <AvailabilityMacros.h>
- 
-@@ -45,6 +46,13 @@
- #include <randrstr.h>
- #include <IOKit/graphics/IOGraphicsTypes.h>
- 
-+/* TODO: UGLY, find a better way!
-+ * We want to ignore kXquartzDisplayChanged which are generated by us
-+ */
-+static Bool ignore_next_fake_mode_update = FALSE;
-+
-+#define FAKE_REFRESH_ROOTLESS 1
-+#define FAKE_REFRESH_FULLSCREEN 2
- 
- #define DEFAULT_REFRESH  60
- #define kDisplayModeUsableFlags  (kDisplayModeValidFlag | kDisplayModeSafeFlag)
-@@ -171,8 +179,7 @@ static Bool QuartzRandRSetMode (CGDirectDisplayID screenId,
-     if (!modeRef)
-         return FALSE;
- 
--    return (CGDisplaySetDisplayMode(screenId, modeRef, NULL) !=
--            kCGErrorSuccess);
-+    return (CGDisplaySetDisplayMode(screenId, modeRef, NULL) != kCGErrorSuccess);
- }
- 
- static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
-@@ -227,18 +234,15 @@ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
- 
- static Bool QuartzRandRModesEqual (QuartzModeInfoPtr pMode1,
-                                    QuartzModeInfoPtr pMode2) {
--    if (pMode1->width != pMode2->width)
--        return FALSE;
--    if (pMode1->height != pMode2->height)
--        return FALSE;
--    if (pMode1->refresh != pMode2->refresh)
--        return FALSE;
--    return TRUE;
-+    return (pMode1->width == pMode2->width) &&
-+           (pMode1->height == pMode2->height) &&
-+           (pMode1->refresh == pMode2->refresh);
- }
- 
- static Bool QuartzRandRRegisterMode (ScreenPtr pScreen,
--                                     QuartzModeInfoPtr pMode,
--                                     Bool isCurrentMode) {
-+                                     QuartzModeInfoPtr pMode) {
-+    QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
-+    Bool isCurrentMode = QuartzRandRModesEqual(&pQuartzScreen->currentMode, pMode);
-     RRScreenSizePtr pSize = RRRegisterSize(pScreen,
-         pMode->width, pMode->height, pScreen->mmWidth, pScreen->mmHeight);
-     if (pSize) {
-@@ -252,14 +256,11 @@ static Bool QuartzRandRRegisterMode (ScreenPtr pScreen,
-     return FALSE;
- }
- 
--static Bool QuartzRandRGetModeCallback (ScreenPtr pScreen,
-+static Bool QuartzRandRRegisterModeCallback (ScreenPtr pScreen,
-                                         CGDirectDisplayID screenId,
-                                         QuartzModeInfoPtr pMode,
--                                        void *data) {
--    QuartzModeInfoPtr pCurMode = (QuartzModeInfoPtr) data;
--
--    return QuartzRandRRegisterMode(pScreen, pMode,
--        QuartzRandRModesEqual(pMode, pCurMode));
-+                                        void *data __unused) {
-+    return QuartzRandRRegisterMode(pScreen, pMode);
- }
- 
- static Bool QuartzRandRSetModeCallback (ScreenPtr pScreen,
-@@ -267,73 +268,64 @@ static Bool QuartzRandRSetModeCallback (ScreenPtr pScreen,
-                                         QuartzModeInfoPtr pMode,
-                                         void *data) {
-     QuartzModeInfoPtr pReqMode = (QuartzModeInfoPtr) data;
-+    QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
- 
-     if (!QuartzRandRModesEqual(pMode, pReqMode))
-         return TRUE;  /* continue enumeration */
- 
--    return QuartzRandRSetMode(screenId, pMode);
-+    if (pReqMode->ref == pQuartzScreen->currentMode.ref) {
-+        DEBUG_LOG("Requested RandR resolution matches current CG mode\n");
-+        return FALSE; /* We don't need to do anything in CG */
-+    }
-+
-+    if (QuartzRandRSetMode(screenId, pMode) == FALSE) {
-+        ignore_next_fake_mode_update = TRUE;
-+        return FALSE;
-+    } else {
-+        return TRUE;
-+    };
- }
- 
- static Bool QuartzRandRGetInfo (ScreenPtr pScreen, Rotation *rotations) {
-     QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
-     CGDirectDisplayID screenId;
--    QuartzModeInfo curMode;
- 
-     *rotations = RR_Rotate_0;  /* TODO: support rotation */
- 
-     if (pQuartzScreen->displayCount == 0)
-         return FALSE;
-+
-+    QuartzRandRRegisterMode(pScreen, &pQuartzScreen->rootlessMode);
-+    QuartzRandRRegisterMode(pScreen, &pQuartzScreen->fullScreenMode);
-+
-     if (pQuartzScreen->displayCount > 1) {
-         /* RandR operations are not well-defined for an X11 screen spanning
-            multiple CG displays. Create two entries for the current virtual
-            resolution including/excluding the menu bar. */
--        QuartzRandRRegisterMode(pScreen, &pQuartzScreen->fakeMode,
--            !quartzHasRoot);
--        QuartzRandRRegisterMode(pScreen, &pQuartzScreen->originalMode,
--            quartzHasRoot);
-         return TRUE;
-     }
-     screenId = pQuartzScreen->displayIDs[0];
- 
--    if (!QuartzRandRGetCurrentModeInfo(screenId, &curMode))
--        return FALSE;
--
--    /* Add a fake mode corresponding to the original resolution excluding the
--       height of the menu bar. */
--    if (!quartzHasRoot &&
--        QuartzRandRModesEqual(&pQuartzScreen->originalMode, &curMode)) {
--        QuartzRandRRegisterMode(pScreen, &pQuartzScreen->fakeMode, TRUE);
--        curMode = pQuartzScreen->fakeMode;
--    }
--    else
--        QuartzRandRRegisterMode(pScreen, &pQuartzScreen->fakeMode, FALSE);
--
--    return QuartzRandREnumerateModes(pScreen, screenId,
--        QuartzRandRGetModeCallback, &curMode);
-+    return QuartzRandREnumerateModes(pScreen, screenId, QuartzRandRRegisterModeCallback, NULL);
- }
- 
- static Bool QuartzRandRSetConfig (ScreenPtr           pScreen,
--			          Rotation            randr,
--			          int                 rate,
--			          RRScreenSizePtr     pSize) {
-+                                  Rotation            randr,
-+                                  int                 rate,
-+                                  RRScreenSizePtr     pSize) {
-     QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
-     CGDirectDisplayID screenId;
--    QuartzModeInfo reqMode, curMode;
--    Bool rootless = FALSE;
-+    QuartzModeInfo reqMode;
- 
-     reqMode.width = pSize->width;
-     reqMode.height = pSize->height;
-     reqMode.refresh = rate;
- 
--    /* If the client requested the fake screen mode, switch to rootless mode.
--       Switch to fullscreen mode (root window visible) if a real screen mode was
--       requested. */
--    if (QuartzRandRModesEqual(&reqMode, &pQuartzScreen->fakeMode)) {
--        rootless = TRUE;
--        reqMode = pQuartzScreen->originalMode;
--    }
--    QuartzSetFullscreen(!rootless);
--    QuartzSetRootless(rootless);
-+    /* If the client requested the fake rootless mode, switch to rootless.
-+     * Otherwise, force fullscreen mode.
-+     */
-+    QuartzSetFullscreen(reqMode.refresh != FAKE_REFRESH_ROOTLESS);
-+    QuartzSetRootless(reqMode.refresh == FAKE_REFRESH_ROOTLESS);
- 
-     if (pQuartzScreen->displayCount == 0)
-         return FALSE;
-@@ -341,38 +333,80 @@ static Bool QuartzRandRSetConfig (ScreenPtr           pScreen,
-         /* RandR operations are not well-defined for an X11 screen spanning
-            multiple CG displays. Do not accept any configuations that differ
-            from the current configuration. */
--        return QuartzRandRModesEqual(&reqMode, &pQuartzScreen->originalMode);
-+        return TRUE;
-     }
--    screenId = pQuartzScreen->displayIDs[0];
- 
-     /* Do not switch modes if requested mode is equal to current mode. */
--    if (!QuartzRandRGetCurrentModeInfo(screenId, &curMode))
--        return FALSE;
--    if (QuartzRandRModesEqual(&reqMode, &curMode))
-+    if (QuartzRandRModesEqual(&reqMode, &pQuartzScreen->currentMode))
-         return TRUE;
-+        
-+    screenId = pQuartzScreen->displayIDs[0];
-+    if (QuartzRandREnumerateModes(pScreen, screenId, QuartzRandRSetModeCallback, &reqMode)) {
-+        pQuartzScreen->currentMode = reqMode;
-+        return TRUE;
-+    }
-+    
-+    DEBUG_LOG("Unable to find a matching config: %d x %d @ %d\n", (int)reqMode.width, (int)reqMode.height, (int)reqMode.refresh);
- 
--    return QuartzRandREnumerateModes(pScreen, screenId,
--        QuartzRandRSetModeCallback, &reqMode);
-+    return FALSE;
- }
- 
--Bool QuartzRandRInit (ScreenPtr pScreen) {
--    rrScrPrivPtr    pScrPriv;
-+static Bool _QuartzRandRUpdateFakeModes (ScreenPtr pScreen) {
-     QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
--    
--    if (!RRScreenInit (pScreen)) return FALSE;
- 
-     if (pQuartzScreen->displayCount == 1) {
-         if (!QuartzRandRGetCurrentModeInfo(pQuartzScreen->displayIDs[0],
--                                           &pQuartzScreen->originalMode))
-+                                           &pQuartzScreen->fullScreenMode))
-             return FALSE;
-+    } else {
-+        pQuartzScreen->fullScreenMode.width = pScreen->width;
-+        pQuartzScreen->fullScreenMode.height = pScreen->height;
-+        if(quartzEnableRootless)
-+            pQuartzScreen->fullScreenMode.height += aquaMenuBarHeight;
-     }
--    else {
--        pQuartzScreen->originalMode.width = pScreen->width;
--        pQuartzScreen->originalMode.height = pScreen->height;
--        pQuartzScreen->originalMode.refresh = DEFAULT_REFRESH;
-+
-+    pQuartzScreen->fullScreenMode.refresh = FAKE_REFRESH_FULLSCREEN;
-+
-+    pQuartzScreen->rootlessMode = pQuartzScreen->fullScreenMode;
-+    pQuartzScreen->rootlessMode.refresh = FAKE_REFRESH_ROOTLESS;
-+    pQuartzScreen->rootlessMode.height -= aquaMenuBarHeight;
-+
-+    if(quartzEnableRootless) {
-+        pQuartzScreen->currentMode = pQuartzScreen->rootlessMode;
-+    } else {
-+        pQuartzScreen->currentMode = pQuartzScreen->fullScreenMode;
-     }
--    pQuartzScreen->fakeMode = pQuartzScreen->originalMode;
--    pQuartzScreen->fakeMode.height -= aquaMenuBarHeight;
-+    
-+    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("currentMode: %d x %d\n", (int)pQuartzScreen->currentMode.width, (int)pQuartzScreen->currentMode.height);
-+    
-+    return TRUE;
-+}
-+
-+Bool QuartzRandRUpdateFakeModes (BOOL force_update) {
-+    ScreenPtr pScreen = screenInfo.screens[0];
-+    
-+    if(ignore_next_fake_mode_update) {
-+        DEBUG_LOG("Ignoring update request caused by RandR resolution change.\n");
-+        ignore_next_fake_mode_update = FALSE;
-+        return TRUE;
-+    }
-+    
-+    if(!_QuartzRandRUpdateFakeModes(pScreen))
-+        return FALSE;
-+    
-+    if(force_update)
-+        RRGetInfo(pScreen, TRUE);
-+
-+    return TRUE;
-+}
-+
-+Bool QuartzRandRInit (ScreenPtr pScreen) {
-+    rrScrPrivPtr    pScrPriv;
-+    
-+    if (!RRScreenInit (pScreen)) return FALSE;
-+    if (!_QuartzRandRUpdateFakeModes (pScreen)) return FALSE;
- 
-     pScrPriv = rrGetScrPriv(pScreen);
-     pScrPriv->rrGetInfo = QuartzRandRGetInfo;
-diff --git xorg-server-1.8.99.906/hw/xquartz/quartzRandR.h xorg-server-1.8.99.906/hw/xquartz/quartzRandR.h
-index d57dc3b..8ee2818 100644
---- xorg-server-1.8.99.906/hw/xquartz/quartzRandR.h
-+++ xorg-server-1.8.99.906/hw/xquartz/quartzRandR.h
-@@ -31,6 +31,30 @@
- #ifndef _QUARTZRANDR_H_
- #define _QUARTZRANDR_H_
- 
-+typedef struct {
-+    size_t width, height;
-+    int refresh;
-+    const void *ref;
-+} QuartzModeInfo, *QuartzModeInfoPtr;
-+
-+// Quartz specific per screen storage structure
-+typedef struct {
-+    // List of CoreGraphics displays that this X11 screen covers.
-+    // This is more than one CG display for video mirroring and
-+    // rootless PseudoramiX mode.
-+    // No CG display will be covered by more than one X11 screen.
-+    int displayCount;
-+    CGDirectDisplayID *displayIDs;
-+    QuartzModeInfo rootlessMode, fullScreenMode, currentMode;
-+} QuartzScreenRec, *QuartzScreenPtr;
-+
-+#define QUARTZ_PRIV(pScreen) \
-+    ((QuartzScreenPtr)dixLookupPrivate(&pScreen->devPrivates, quartzScreenKey))
-+
-+void QuartzCopyDisplayIDs(ScreenPtr pScreen,
-+                          int displayCount, CGDirectDisplayID *displayIDs);
-+
-+Bool QuartzRandRUpdateFakeModes (BOOL force_update);
- Bool QuartzRandRInit (ScreenPtr pScreen);
- 
- #endif
-diff --git xorg-server-1.8.99.906/hw/xquartz/xpr/xprScreen.c xorg-server-1.8.99.906/hw/xquartz/xpr/xprScreen.c
-index 0e36ee1..b3ac693 100644
---- xorg-server-1.8.99.906/hw/xquartz/xpr/xprScreen.c
-+++ xorg-server-1.8.99.906/hw/xquartz/xpr/xprScreen.c
-@@ -36,6 +36,7 @@
- #include "quartzCommon.h"
- #include "inputstr.h"
- #include "quartz.h"
-+#include "quartzRandR.h"
- #include "xpr.h"
- #include "xprEvent.h"
- #include "pseudoramiX.h"
--- 
-1.5.6.6
-

Added: trunk/dports/x11/xorg-server-devel/files/0010-Workaround-the-GC-clipping-problem-in-miPaintWindow.patch
===================================================================
--- trunk/dports/x11/xorg-server-devel/files/0010-Workaround-the-GC-clipping-problem-in-miPaintWindow.patch	                        (rev 0)
+++ trunk/dports/x11/xorg-server-devel/files/0010-Workaround-the-GC-clipping-problem-in-miPaintWindow.patch	2010-08-21 06:35:57 UTC (rev 70781)
@@ -0,0 +1,164 @@
+From d07081c5a6d32446f4ef86b25af5ac62683f7595 Mon Sep 17 00:00:00 2001
+From: Jeremy Huddleston <jeremyhu at apple.com>
+Date: Fri, 30 Apr 2010 13:08:25 -0700
+Subject: [PATCH] Workaround the GC clipping problem in miPaintWindow and add some debugging output.
+
+Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
+---
+ mi/miexpose.c |  105 +++++++++++++++++++++++++++++++++++++++++++++++++++------
+ 1 files changed, 94 insertions(+), 11 deletions(-)
+
+diff --git xorg-server-1.9.0/mi/miexpose.c xorg-server-1.9.0/mi/miexpose.c
+index 94258b8..4f25c23 100644
+--- xorg-server-1.9.0/mi/miexpose.c
++++ xorg-server-1.9.0/mi/miexpose.c
+@@ -521,6 +521,7 @@ void RootlessSetPixmapOfAncestors(WindowPtr pWin);
+ void RootlessStartDrawing(WindowPtr pWin);
+ void RootlessDamageRegion(WindowPtr pWin, RegionPtr prgn);
+ Bool IsFramedWindow(WindowPtr pWin);
++#include "../fb/fb.h"
+ #endif 
+ 
+ void
+@@ -548,24 +549,37 @@ miPaintWindow(WindowPtr pWin, RegionPtr prgn, int what)
+     Bool	solid = TRUE;
+     DrawablePtr	drawable = &pWin->drawable;
+ 
++#ifdef XQUARTZ_CLIP_DEBUG
++    ErrorF("START %d BS %d (pR = %ld)\n", what, pWin->backgroundState, ParentRelative);
++    ErrorF("      Rgn: %d %d %d %d\n", prgn->extents.x1, prgn->extents.y1,
++	                               prgn->extents.x2 - prgn->extents.x1,
++	                               prgn->extents.y2 - prgn->extents.y1);
++    ErrorF("      Win: %d %d (%d %d) %d %d\n", pWin->origin.x, pWin->origin.y,
++	                                       pWin->winSize.extents.x1, pWin->winSize.extents.y1,
++	                                       pWin->winSize.extents.x2 - pWin->winSize.extents.x1,
++					       pWin->winSize.extents.y2 - pWin->winSize.extents.y1);
++    ErrorF("     Draw: %d %d %d %d\n", pWin->drawable.x, pWin->drawable.y,
++				       pWin->drawable.width, pWin->drawable.height);
++#endif
++
+ #ifdef ROOTLESS
+     if(!drawable || drawable->type == UNDRAWABLE_WINDOW)
+ 	return;
+-
+-    if(IsFramedWindow(pWin)) {
+-        RootlessStartDrawing(pWin);
+-        RootlessDamageRegion(pWin, prgn);
+-    
+-        if(pWin->backgroundState == ParentRelative) {
+-            if((what == PW_BACKGROUND) || 
+-               (what == PW_BORDER && !pWin->borderIsPixel))
+-                RootlessSetPixmapOfAncestors(pWin);
+-        }
+-    }
+ #endif
+     
+     if (what == PW_BACKGROUND)
+     {
++#ifdef ROOTLESS
++	if(IsFramedWindow(pWin)) {
++	    RootlessStartDrawing(pWin);
++	    RootlessDamageRegion(pWin, prgn);
++
++	    if(pWin->backgroundState == ParentRelative) {
++		RootlessSetPixmapOfAncestors(pWin);
++	    }
++	}
++#endif
++
+ 	while (pWin->backgroundState == ParentRelative)
+ 	    pWin = pWin->parent;
+ 
+@@ -587,6 +601,18 @@ miPaintWindow(WindowPtr pWin, RegionPtr prgn, int what)
+     {
+ 	PixmapPtr   pixmap;
+ 
++#ifdef ROOTLESS
++	if(IsFramedWindow(pWin)) {
++	    RootlessStartDrawing(pWin);
++	    RootlessDamageRegion(pWin, prgn);
++	    
++	    if(!pWin->borderIsPixel &&
++		pWin->backgroundState == ParentRelative) {
++		RootlessSetPixmapOfAncestors(pWin);
++	    }
++	}
++#endif
++
+ 	tile_x_off = drawable->x;
+ 	tile_y_off = drawable->y;
+ 	
+@@ -595,6 +621,12 @@ miPaintWindow(WindowPtr pWin, RegionPtr prgn, int what)
+ 	    return;
+ 	pixmap = (*pScreen->GetWindowPixmap) ((WindowPtr) drawable);
+ 	drawable = &pixmap->drawable;
++
++#ifdef XQUARTZ_CLIP_DEBUG
++	ErrorF("     Draw: %d %d %d %d\n",
++	       drawable->x, drawable->y, drawable->width, drawable->height);    
++#endif
++	
+ #ifdef COMPOSITE
+ 	draw_x_off = pixmap->screen_x;
+ 	draw_y_off = pixmap->screen_y;
+@@ -657,6 +689,57 @@ miPaintWindow(WindowPtr pWin, RegionPtr prgn, int what)
+     ChangeGC (NullClient, pGC, gcmask, gcval);
+     ValidateGC (drawable, pGC);
+ 
++#ifdef XQUARTZ_CLIP_DEBUG
++    ErrorF("       GC: %d %d %d %d\n",
++	   pGC->pCompositeClip->extents.x1, pGC->pCompositeClip->extents.y1,
++	   pGC->pCompositeClip->extents.x2 - pGC->pCompositeClip->extents.x1,
++	   pGC->pCompositeClip->extents.y2 - pGC->pCompositeClip->extents.y1);
++#endif
++    
++#ifdef XQUARTZ
++    /* Looks like our clipping isn't set right for some reason:
++     * http://xquartz.macosforge.org/trac/ticket/290
++     */
++    if(what == PW_BORDER) {
++
++#if 0
++	if(solid) {
++#if 1
++	    fbFillRegionSolid(&pWin->drawable,
++			      prgn,
++			      0,
++			      fbReplicatePixel(fill.pixel,
++					       pWin->drawable.bitsPerPixel));
++#else
++	    fbFillRegionSolid(drawable,
++			      prgn,
++			      0,
++			      fbReplicatePixel(fill.pixel,
++					       drawable->bitsPerPixel));
++#endif
++	    return;
++	}
++#endif
++    
++	pGC->pCompositeClip->extents.x1 += prgn->extents.x1;
++	pGC->pCompositeClip->extents.y1 += prgn->extents.y1;
++	pGC->pCompositeClip->extents.x2 += prgn->extents.x1;
++	pGC->pCompositeClip->extents.y2 += prgn->extents.y1;
++	
++	if(pGC->pCompositeClip->extents.x2 > drawable->pScreen->width)
++	    pGC->pCompositeClip->extents.x2 = drawable->pScreen->width;
++	if(pGC->pCompositeClip->extents.y2 > drawable->pScreen->height)
++	    pGC->pCompositeClip->extents.y2 = drawable->pScreen->height;
++    }
++#endif
++
++#ifdef XQUARTZ_CLIP_DEBUG
++    ErrorF("       GC: %d %d %d %d\n",
++	   pGC->pCompositeClip->extents.x1, pGC->pCompositeClip->extents.y1,
++	   pGC->pCompositeClip->extents.x2 - pGC->pCompositeClip->extents.x1,
++	   pGC->pCompositeClip->extents.y2 - pGC->pCompositeClip->extents.y1);    
++#endif
++
+     numRects = RegionNumRects(prgn);
+     pbox = RegionRects(prgn);
+     for (i= numRects; --i >= 0; pbox++, prect++)
+-- 
+1.5.6.6
+

Deleted: trunk/dports/x11/xorg-server-devel/files/0010-XQuartz-RandR-Better-handle-switching-betwen-RandR.patch
===================================================================
--- trunk/dports/x11/xorg-server-devel/files/0010-XQuartz-RandR-Better-handle-switching-betwen-RandR.patch	2010-08-20 22:32:45 UTC (rev 70780)
+++ trunk/dports/x11/xorg-server-devel/files/0010-XQuartz-RandR-Better-handle-switching-betwen-RandR.patch	2010-08-21 06:35:57 UTC (rev 70781)
@@ -1,352 +0,0 @@
-From cdf091632a9803fe225c8f65a1172ebda40e563e Mon Sep 17 00:00:00 2001
-From: Jeremy Huddleston <jeremyhu at apple.com>
-Date: Mon, 26 Jul 2010 11:45:59 -0700
-Subject: [PATCH] XQuartz: RandR: Better handle switching betwen RandR modes that share CG modes
-
-Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
----
- hw/xquartz/quartzRandR.c |  156 +++++++++++++++++++++++++++++++++++----------
- hw/xquartz/quartzRandR.h |    2 +-
- 2 files changed, 122 insertions(+), 36 deletions(-)
-
-diff --git xorg-server-1.8.99.906/hw/xquartz/quartzRandR.c xorg-server-1.8.99.906/hw/xquartz/quartzRandR.c
-index 65dce22..9b84fa1 100644
---- xorg-server-1.8.99.906/hw/xquartz/quartzRandR.c
-+++ xorg-server-1.8.99.906/hw/xquartz/quartzRandR.c
-@@ -57,9 +57,12 @@ static Bool ignore_next_fake_mode_update = FALSE;
- #define DEFAULT_REFRESH  60
- #define kDisplayModeUsableFlags  (kDisplayModeValidFlag | kDisplayModeSafeFlag)
- 
--typedef Bool (*QuartzModeCallback)
--    (ScreenPtr, CGDirectDisplayID, QuartzModeInfoPtr, void *);
-+#define CALLBACK_SUCCESS 0
-+#define CALLBACK_CONTINUE 1
-+#define CALLBACK_ERROR -1
- 
-+typedef int (*QuartzModeCallback)
-+    (ScreenPtr, CGDirectDisplayID, QuartzModeInfoPtr, void *);
- 
- #if MAC_OS_X_VERSION_MIN_REQUIRED < 1060
- 
-@@ -97,20 +100,22 @@ static void QuartzRandRGetModeInfo (CFDictionaryRef modeRef,
-     pMode->ref = NULL;
- }
- 
--static Bool QuartzRandRGetCurrentModeInfo (CGDirectDisplayID screenId,
-+static Bool QuartzRandRCopyCurrentModeInfo (CGDirectDisplayID screenId,
-                                            QuartzModeInfoPtr pMode) {
-     CFDictionaryRef curModeRef = CGDisplayCurrentMode(screenId);
-     if (!curModeRef)
-         return FALSE;
- 
-     QuartzRandRGetModeInfo(curModeRef, pMode);
-+    pMode->ref = curModeRef;
-+    CFRetain(pMode->ref);
-     return TRUE;
- }
- 
- static Bool QuartzRandRSetMode (CGDirectDisplayID screenId,
-                                 QuartzModeInfoPtr pMode) {
-     CFDictionaryRef modeRef = (CFDictionaryRef) pMode->ref;
--    return (CGDisplaySwitchToMode(screenId, modeRef) != kCGErrorSuccess);
-+    return (CGDisplaySwitchToMode(screenId, modeRef) == kCGErrorSuccess);
- }
- 
- static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
-@@ -122,6 +127,28 @@ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
-     CFArrayRef modes;
-     QuartzModeInfo modeInfo;
-     int i;
-+    BOOL retval = FALSE;
-+    QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
-+
-+    switch(callback(pScreen, screenId, &pQuartzScreen->rootlessMode, data)) {
-+        case CALLBACK_SUCCESS:
-+            return TRUE;
-+        case CALLBACK_ERROR:
-+            return FALSE;
-+        case CALLBACK_CONTINUE:
-+        default:
-+            break;
-+    }
-+
-+    switch(callback(pScreen, screenId, &pQuartzScreen->fullScreenMode, data)) {
-+        case CALLBACK_SUCCESS:
-+            return TRUE;
-+        case CALLBACK_ERROR:
-+            return FALSE;
-+        case CALLBACK_CONTINUE:
-+        default:
-+            break;
-+    }
- 
-     curModeRef = CGDisplayCurrentMode(screenId);
-     if (!curModeRef)
-@@ -132,6 +159,7 @@ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
-     if (!modes)
-         return FALSE;
-     for (i = 0; i < CFArrayGetCount(modes); i++) {
-+        int cb;
-         modeRef = (CFDictionaryRef) CFArrayGetValueAtIndex(modes, i);
- 
-         /* Skip modes that are not usable on the current display or have a
-@@ -144,10 +172,15 @@ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
- 
-         QuartzRandRGetModeInfo(modeRef, &modeInfo);
-         modeInfo.ref = modeRef;
--        if (!callback(pScreen, screenId, &modeInfo, data))
-+        cb = callback(pScreen, screenId, &modeInfo, data);
-+        if (cb == CALLBACK_SUCCESS)
-+            break;
-+        if (cb == CALLBACK_ERROR) {
-+            retval = FALSE;
-             break;
-+        }
-     }
--    return TRUE;
-+    return retval;
- }
- 
- #else /* we have the new CG APIs from Snow Leopard */
-@@ -162,14 +195,14 @@ static void QuartzRandRGetModeInfo (CGDisplayModeRef modeRef,
-     pMode->ref = NULL;
- }
- 
--static Bool QuartzRandRGetCurrentModeInfo (CGDirectDisplayID screenId,
--                                           QuartzModeInfoPtr pMode) {
-+static Bool QuartzRandRCopyCurrentModeInfo (CGDirectDisplayID screenId,
-+                                            QuartzModeInfoPtr pMode) {
-     CGDisplayModeRef curModeRef = CGDisplayCopyDisplayMode(screenId);
-     if (!curModeRef)
-         return FALSE;
- 
-     QuartzRandRGetModeInfo(curModeRef, pMode);
--    CGDisplayModeRelease(curModeRef);
-+    pMode->ref = curModeRef;
-     return TRUE;
- }
- 
-@@ -179,7 +212,7 @@ static Bool QuartzRandRSetMode (CGDirectDisplayID screenId,
-     if (!modeRef)
-         return FALSE;
- 
--    return (CGDisplaySetDisplayMode(screenId, modeRef, NULL) != kCGErrorSuccess);
-+    return (CGDisplaySetDisplayMode(screenId, modeRef, NULL) == kCGErrorSuccess);
- }
- 
- static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
-@@ -192,6 +225,29 @@ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
-     CFArrayRef modes;
-     QuartzModeInfo modeInfo;
-     int i;
-+    Bool retval = TRUE;
-+
-+    QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
-+
-+    switch(callback(pScreen, screenId, &pQuartzScreen->rootlessMode, data)) {
-+        case CALLBACK_SUCCESS:
-+            return TRUE;
-+        case CALLBACK_ERROR:
-+            return FALSE;
-+        case CALLBACK_CONTINUE:
-+        default:
-+            break;
-+    }
-+
-+    switch(callback(pScreen, screenId, &pQuartzScreen->fullScreenMode, data)) {
-+        case CALLBACK_SUCCESS:
-+            return TRUE;
-+        case CALLBACK_ERROR:
-+            return FALSE;
-+        case CALLBACK_CONTINUE:
-+        default:
-+            break;
-+    }
- 
-     curModeRef = CGDisplayCopyDisplayMode(screenId);
-     if (!curModeRef)
-@@ -205,6 +261,7 @@ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
-         return FALSE;
-     }
-     for (i = 0; i < CFArrayGetCount(modes); i++) {
-+        int cb;
-         modeRef = (CGDisplayModeRef) CFArrayGetValueAtIndex(modes, i);
- 
-         /* Skip modes that are not usable on the current display or have a
-@@ -220,13 +277,19 @@ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
- 
-         QuartzRandRGetModeInfo(modeRef, &modeInfo);
-         modeInfo.ref = modeRef;
--        if (!callback(pScreen, screenId, &modeInfo, data))
-+        cb = callback(pScreen, screenId, &modeInfo, data);
-+        if (cb == CALLBACK_SUCCESS)
-+            break;
-+		if (cb == CALLBACK_ERROR) {
-+			retval = FALSE;
-             break;
-+		}
-     }
-+		
-     CFRelease(modes);
- 
-     CFRelease(curPixelEnc);
--    return TRUE;
-+    return retval;
- }
- 
- #endif  /* Snow Leopard CoreGraphics APIs */
-@@ -246,6 +309,7 @@ static Bool QuartzRandRRegisterMode (ScreenPtr pScreen,
-     RRScreenSizePtr pSize = RRRegisterSize(pScreen,
-         pMode->width, pMode->height, pScreen->mmWidth, pScreen->mmHeight);
-     if (pSize) {
-+        //DEBUG_LOG("registering: %d x %d @ %d %s\n", (int)pMode->width, (int)pMode->height, (int)pMode->refresh, isCurrentMode ? "*" : "");
-         RRRegisterRate(pScreen, pSize, pMode->refresh);
- 
-         if (isCurrentMode)
-@@ -256,34 +320,46 @@ static Bool QuartzRandRRegisterMode (ScreenPtr pScreen,
-     return FALSE;
- }
- 
--static Bool QuartzRandRRegisterModeCallback (ScreenPtr pScreen,
-+static int QuartzRandRRegisterModeCallback (ScreenPtr pScreen,
-                                         CGDirectDisplayID screenId,
-                                         QuartzModeInfoPtr pMode,
-                                         void *data __unused) {
--    return QuartzRandRRegisterMode(pScreen, pMode);
-+    if(QuartzRandRRegisterMode(pScreen, pMode)) {
-+        return CALLBACK_CONTINUE;
-+    } else {
-+        return CALLBACK_ERROR;
-+    }
- }
- 
--static Bool QuartzRandRSetModeCallback (ScreenPtr pScreen,
--                                        CGDirectDisplayID screenId,
--                                        QuartzModeInfoPtr pMode,
--                                        void *data) {
-+static int QuartzRandRSetModeCallback (ScreenPtr pScreen,
-+                                       CGDirectDisplayID screenId,
-+                                       QuartzModeInfoPtr pMode,
-+                                       void *data) {
-     QuartzModeInfoPtr pReqMode = (QuartzModeInfoPtr) data;
-     QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
--
-+	
-     if (!QuartzRandRModesEqual(pMode, pReqMode))
--        return TRUE;  /* continue enumeration */
-+        return CALLBACK_CONTINUE;  /* continue enumeration */
-+
-+    DEBUG_LOG("Found a match for requested RandR resolution (%dx%d@%d).\n", (int)pMode->width, (int)pMode->height, (int)pMode->refresh);
- 
--    if (pReqMode->ref == pQuartzScreen->currentMode.ref) {
-+    if (pQuartzScreen->currentMode.ref && CFEqual(pMode->ref, pQuartzScreen->currentMode.ref)) {
-         DEBUG_LOG("Requested RandR resolution matches current CG mode\n");
--        return FALSE; /* We don't need to do anything in CG */
-+        return CALLBACK_SUCCESS; /* We don't need to do anything in CG */
-     }
- 
--    if (QuartzRandRSetMode(screenId, pMode) == FALSE) {
-+    if (QuartzRandRSetMode(screenId, pMode)) {
-+        if(pQuartzScreen->currentMode.ref)
-+            CFRelease(pQuartzScreen->currentMode.ref);
-+        pQuartzScreen->currentMode = *pMode;
-+        CFRetain(pQuartzScreen->currentMode.ref);
-+
-         ignore_next_fake_mode_update = TRUE;
--        return FALSE;
-+        return CALLBACK_SUCCESS;
-     } else {
--        return TRUE;
--    };
-+        DEBUG_LOG("Error while requesting CG resolution change.\n");
-+        return CALLBACK_ERROR;
-+    }
- }
- 
- static Bool QuartzRandRGetInfo (ScreenPtr pScreen, Rotation *rotations) {
-@@ -295,17 +371,17 @@ static Bool QuartzRandRGetInfo (ScreenPtr pScreen, Rotation *rotations) {
-     if (pQuartzScreen->displayCount == 0)
-         return FALSE;
- 
--    QuartzRandRRegisterMode(pScreen, &pQuartzScreen->rootlessMode);
--    QuartzRandRRegisterMode(pScreen, &pQuartzScreen->fullScreenMode);
--
-     if (pQuartzScreen->displayCount > 1) {
-         /* RandR operations are not well-defined for an X11 screen spanning
-            multiple CG displays. Create two entries for the current virtual
-            resolution including/excluding the menu bar. */
-+
-+        QuartzRandRRegisterMode(pScreen, &pQuartzScreen->rootlessMode);
-+        QuartzRandRRegisterMode(pScreen, &pQuartzScreen->fullScreenMode);
-         return TRUE;
-     }
--    screenId = pQuartzScreen->displayIDs[0];
- 
-+    screenId = pQuartzScreen->displayIDs[0];
-     return QuartzRandREnumerateModes(pScreen, screenId, QuartzRandRRegisterModeCallback, NULL);
- }
- 
-@@ -323,9 +399,14 @@ static Bool QuartzRandRSetConfig (ScreenPtr           pScreen,
- 
-     /* If the client requested the fake rootless mode, switch to rootless.
-      * Otherwise, force fullscreen mode.
-+     * TODO: Refactor all this fullscreen/rootless crap as it is spaghetti
-+     *       has redundancies.
-      */
--    QuartzSetFullscreen(reqMode.refresh != FAKE_REFRESH_ROOTLESS);
-     QuartzSetRootless(reqMode.refresh == FAKE_REFRESH_ROOTLESS);
-+    QuartzSetFullscreen(reqMode.refresh != FAKE_REFRESH_ROOTLESS);
-+    if(reqMode.refresh != FAKE_REFRESH_ROOTLESS &&
-+       reqMode.refresh != FAKE_REFRESH_FULLSCREEN)
-+        QuartzShow();
- 
-     if (pQuartzScreen->displayCount == 0)
-         return FALSE;
-@@ -342,12 +423,10 @@ static Bool QuartzRandRSetConfig (ScreenPtr           pScreen,
-         
-     screenId = pQuartzScreen->displayIDs[0];
-     if (QuartzRandREnumerateModes(pScreen, screenId, QuartzRandRSetModeCallback, &reqMode)) {
--        pQuartzScreen->currentMode = reqMode;
-         return TRUE;
-     }
-     
-     DEBUG_LOG("Unable to find a matching config: %d x %d @ %d\n", (int)reqMode.width, (int)reqMode.height, (int)reqMode.refresh);
--
-     return FALSE;
- }
- 
-@@ -355,9 +434,16 @@ static Bool _QuartzRandRUpdateFakeModes (ScreenPtr pScreen) {
-     QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
- 
-     if (pQuartzScreen->displayCount == 1) {
--        if (!QuartzRandRGetCurrentModeInfo(pQuartzScreen->displayIDs[0],
--                                           &pQuartzScreen->fullScreenMode))
-+        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;
-+
-+        CFRetain(pQuartzScreen->fullScreenMode.ref);  /* This extra retain is for currentMode's copy */
-     } else {
-         pQuartzScreen->fullScreenMode.width = pScreen->width;
-         pQuartzScreen->fullScreenMode.height = pScreen->height;
-diff --git xorg-server-1.8.99.906/hw/xquartz/quartzRandR.h xorg-server-1.8.99.906/hw/xquartz/quartzRandR.h
-index 8ee2818..4a7990e 100644
---- xorg-server-1.8.99.906/hw/xquartz/quartzRandR.h
-+++ xorg-server-1.8.99.906/hw/xquartz/quartzRandR.h
-@@ -34,7 +34,7 @@
- typedef struct {
-     size_t width, height;
-     int refresh;
--    const void *ref;
-+    void *ref; /* CGDisplayModeRef or CFDictionaryRef */
- } QuartzModeInfo, *QuartzModeInfoPtr;
- 
- // Quartz specific per screen storage structure
--- 
-1.5.6.6
-

Deleted: trunk/dports/x11/xorg-server-devel/files/0011-XQuartz-RandR-Don-t-change-the-rootless-preference.patch
===================================================================
--- trunk/dports/x11/xorg-server-devel/files/0011-XQuartz-RandR-Don-t-change-the-rootless-preference.patch	2010-08-20 22:32:45 UTC (rev 70780)
+++ trunk/dports/x11/xorg-server-devel/files/0011-XQuartz-RandR-Don-t-change-the-rootless-preference.patch	2010-08-21 06:35:57 UTC (rev 70781)
@@ -1,742 +0,0 @@
-From 0541f9c9b5d232c48454d98f9f21ffd66c09d97e Mon Sep 17 00:00:00 2001
-From: Jeremy Huddleston <jeremyhu at apple.com>
-Date: Mon, 26 Jul 2010 23:34:49 -0700
-Subject: [PATCH] XQuartz: RandR: Don't change the rootless preference when changing RandR mode
-
-Also renames a bunch of other variables for better consistency.
-
-Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
----
- hw/xquartz/X11Application.h |    3 --
- hw/xquartz/X11Application.m |   44 +++++++++++++++----------------
- hw/xquartz/X11Controller.m  |   42 +++++++++++++++---------------
- hw/xquartz/darwinEvents.c   |    6 ++--
- hw/xquartz/quartz.c         |   59 +++++++++++++++++++++++-------------------
- hw/xquartz/quartz.h         |   18 +++++++++++-
- hw/xquartz/quartzAudio.c    |    4 +-
- hw/xquartz/quartzCommon.h   |    6 ----
- hw/xquartz/quartzKeyboard.c |    6 ++--
- hw/xquartz/quartzRandR.c    |   32 +++++++++++-----------
- hw/xquartz/quartzRandR.h    |    2 +-
- hw/xquartz/xpr/xprAppleWM.c |    2 +-
- hw/xquartz/xpr/xprCursor.c  |    6 ++--
- hw/xquartz/xpr/xprFrame.c   |    4 +-
- hw/xquartz/xpr/xprScreen.c  |    5 ++-
- 15 files changed, 124 insertions(+), 115 deletions(-)
-
-diff --git xorg-server-1.8.99.906/hw/xquartz/X11Application.h xorg-server-1.8.99.906/hw/xquartz/X11Application.h
-index ce19e03..4621284 100644
---- xorg-server-1.8.99.906/hw/xquartz/X11Application.h
-+++ xorg-server-1.8.99.906/hw/xquartz/X11Application.h
-@@ -75,9 +75,6 @@ void X11ApplicationLaunchClient (const char *cmd);
- 
- void X11ApplicationMain(int argc, char **argv, char **envp);
- 
--extern int X11EnableKeyEquivalents;
--extern int quartzHasRoot, quartzEnableRootless, quartzFullscreenMenu;
--
- #define PREFS_APPSMENU              "apps_menu"
- #define PREFS_FAKEBUTTONS           "enable_fake_buttons"
- #define PREFS_SYSBEEP               "enable_system_beep"
-diff --git xorg-server-1.8.99.906/hw/xquartz/X11Application.m xorg-server-1.8.99.906/hw/xquartz/X11Application.m
-index 36c39e5..781dccc 100644
---- xorg-server-1.8.99.906/hw/xquartz/X11Application.m
-+++ xorg-server-1.8.99.906/hw/xquartz/X11Application.m
-@@ -38,6 +38,7 @@
- #import "X11Application.h"
- 
- #include "darwin.h"
-+#include "quartz.h"
- #include "darwinEvents.h"
- #include "quartzKeyboard.h"
- #include "quartz.h"
-@@ -63,9 +64,6 @@ extern int xpbproxy_run (void);
- /* Stuck modifier / button state... force release when we context switch */
- static NSEventType keyState[NUM_KEYCODES];
- 
--int X11EnableKeyEquivalents = TRUE, quartzFullscreenMenu = FALSE;
--int quartzHasRoot = FALSE, quartzEnableRootless = TRUE;
--
- extern Bool noTestExtensions;
- 
- #if MAC_OS_X_VERSION_MIN_REQUIRED >= 1050
-@@ -287,23 +285,23 @@ static void message_kit_thread (SEL selector, NSObject *arg) {
-                         do_swallow = YES;
-                         for_x = NO;
- #if XPLUGIN_VERSION >= 1
--                    } else if(X11EnableKeyEquivalents &&
-+                    } else if(XQuartzEnableKeyEquivalents &&
-                              xp_is_symbolic_hotkey_event([e eventRef])) {
-                         swallow_keycode = [e keyCode];
-                         do_swallow = YES;
-                         for_x = NO;
- #endif
--                    } else if(X11EnableKeyEquivalents &&
-+                    } else if(XQuartzEnableKeyEquivalents &&
-                               [[self mainMenu] performKeyEquivalent:e]) {
-                         swallow_keycode = [e keyCode];
-                         do_swallow = YES;
-                         for_appkit = NO;
-                         for_x = NO;
--                    } else if(!quartzEnableRootless
-+                    } else if(!XQuartzIsRootless
-                               && ([e modifierFlags] & ALL_KEY_MASKS) == (NSCommandKeyMask | NSAlternateKeyMask)
-                               && ([e keyCode] == 0 /*a*/ || [e keyCode] == 53 /*Esc*/)) {
-                         /* We have this here to force processing fullscreen 
--                         * toggle even if X11EnableKeyEquivalents is disabled */
-+                         * toggle even if XQuartzEnableKeyEquivalents is disabled */
-                         swallow_keycode = [e keyCode];
-                         do_swallow = YES;
-                         for_x = NO;
-@@ -372,7 +370,7 @@ static void message_kit_thread (SEL selector, NSObject *arg) {
-                     break;
-                     
-                 case 18: /* ApplicationDidReactivate */
--                    if (quartzHasRoot) for_appkit = NO;
-+                    if (XQuartzHasRoot) for_appkit = NO;
-                     break;
-                     
-                 case NSApplicationDeactivatedEventType:
-@@ -422,7 +420,7 @@ static void message_kit_thread (SEL selector, NSObject *arg) {
-     if ([state boolValue])
-         SetSystemUIMode(kUIModeNormal, 0); 
-     else
--        SetSystemUIMode(kUIModeAllHidden, quartzFullscreenMenu ? kUIOptionAutoShowMenuBar : 0); // kUIModeAllSuppressed or kUIOptionAutoShowMenuBar can be used to allow "mouse-activation"
-+        SetSystemUIMode(kUIModeAllHidden, XQuartzFullscreenMenu ? kUIOptionAutoShowMenuBar : 0); // kUIModeAllSuppressed or kUIOptionAutoShowMenuBar can be used to allow "mouse-activation"
- }
- 
- - (void) launch_client:(NSString *)cmd {
-@@ -720,18 +718,18 @@ static NSMutableArray * cfarray_to_nsarray (CFArrayRef in) {
-     NSString *nsstr;
-     const char *tem;
- 	
--    quartzUseSysBeep = [self prefs_get_boolean:@PREFS_SYSBEEP
--                                       default:quartzUseSysBeep];
--    quartzEnableRootless = [self prefs_get_boolean:@PREFS_ROOTLESS
--                                           default:quartzEnableRootless];
--    quartzFullscreenMenu = [self prefs_get_boolean:@PREFS_FULLSCREEN_MENU
--                                           default:quartzFullscreenMenu];
--    quartzFullscreenDisableHotkeys = ![self prefs_get_boolean:@PREFS_FULLSCREEN_HOTKEYS
--                                                      default:!quartzFullscreenDisableHotkeys];
-+    XQuartzUseSysBeep = [self prefs_get_boolean:@PREFS_SYSBEEP
-+                                       default:XQuartzUseSysBeep];
-+    XQuartzRootlessDefault = [self prefs_get_boolean:@PREFS_ROOTLESS
-+                                           default:XQuartzRootlessDefault];
-+    XQuartzFullscreenMenu = [self prefs_get_boolean:@PREFS_FULLSCREEN_MENU
-+                                           default:XQuartzFullscreenMenu];
-+    XQuartzFullscreenDisableHotkeys = ![self prefs_get_boolean:@PREFS_FULLSCREEN_HOTKEYS
-+                                                      default:!XQuartzFullscreenDisableHotkeys];
-     darwinFakeButtons = [self prefs_get_boolean:@PREFS_FAKEBUTTONS
-                                         default:darwinFakeButtons];
--    quartzOptionSendsAlt = [self prefs_get_boolean:@PREFS_OPTION_SENDS_ALT
--                                           default:quartzOptionSendsAlt];
-+    XQuartzOptionSendsAlt = [self prefs_get_boolean:@PREFS_OPTION_SENDS_ALT
-+                                           default:XQuartzOptionSendsAlt];
- 
-     if (darwinFakeButtons) {
-         const char *fake2, *fake3;
-@@ -759,8 +757,8 @@ static NSMutableArray * cfarray_to_nsarray (CFArrayRef in) {
-         }
-     }
- 
--    X11EnableKeyEquivalents = [self prefs_get_boolean:@PREFS_KEYEQUIVS
--                                              default:X11EnableKeyEquivalents];
-+    XQuartzEnableKeyEquivalents = [self prefs_get_boolean:@PREFS_KEYEQUIVS
-+                                              default:XQuartzEnableKeyEquivalents];
- 	
-     darwinSyncKeymap = [self prefs_get_boolean:@PREFS_SYNC_KEYMAP
-                                        default:darwinSyncKeymap];
-@@ -1158,7 +1156,7 @@ static inline int ensure_flag(int flags, int device_independent, int device_depe
-                 pDev = darwinTabletCurrent;
-             }
- 
--            if(!quartzServerVisible && noTestExtensions) {
-+            if(!XQuartzServerVisible && noTestExtensions) {
- #if defined(XPLUGIN_VERSION) && XPLUGIN_VERSION > 0
- /* Older libXplugin (Tiger/"Stock" Leopard) aren't thread safe, so we can't call xp_find_window from the Appkit thread */
-                 xp_window_id wid = 0;
-@@ -1218,7 +1216,7 @@ static inline int ensure_flag(int flags, int device_independent, int device_depe
-             /* If we're in the background, we need to send a MotionNotify event
-              * first, since we aren't getting them on background mouse motion
-              */
--            if(!quartzServerVisible && noTestExtensions) {
-+            if(!XQuartzServerVisible && noTestExtensions) {
-                 bgMouseLocationUpdated = FALSE;
-                 DarwinSendPointerEvents(darwinPointer, MotionNotify, 0, location.x,
-                                         location.y, pressure, tilt.x, tilt.y);
-diff --git xorg-server-1.8.99.906/hw/xquartz/X11Controller.m xorg-server-1.8.99.906/hw/xquartz/X11Controller.m
-index d66d039..13b6366 100644
---- xorg-server-1.8.99.906/hw/xquartz/X11Controller.m
-+++ xorg-server-1.8.99.906/hw/xquartz/X11Controller.m
-@@ -609,13 +609,13 @@ objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
- }
- 
- - (IBAction) enable_fullscreen_changed:sender {
--    int value = ![enable_fullscreen intValue];
-+    XQuartzRootlessDefault = ![enable_fullscreen intValue];
- 
--    [enable_fullscreen_menu setEnabled:!value];
-+    [enable_fullscreen_menu setEnabled:!XQuartzRootlessDefault];
- 
--    DarwinSendDDXEvent(kXquartzSetRootless, 1, value);
-+    DarwinSendDDXEvent(kXquartzSetRootless, 1, XQuartzRootlessDefault);
- 
--    [NSApp prefs_set_boolean:@PREFS_ROOTLESS value:value];
-+    [NSApp prefs_set_boolean:@PREFS_ROOTLESS value:XQuartzRootlessDefault];
-     [NSApp prefs_synchronize];
- }
- 
-@@ -638,24 +638,24 @@ objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
-         darwinFakeButtons = [fake_buttons intValue];
-         [NSApp prefs_set_boolean:@PREFS_FAKEBUTTONS value:darwinFakeButtons];
-     } else if(sender == use_sysbeep) {
--        quartzUseSysBeep = [use_sysbeep intValue];
--        [NSApp prefs_set_boolean:@PREFS_SYSBEEP value:quartzUseSysBeep];
-+        XQuartzUseSysBeep = [use_sysbeep intValue];
-+        [NSApp prefs_set_boolean:@PREFS_SYSBEEP value:XQuartzUseSysBeep];
-     } else if(sender == enable_keyequivs) {
--        X11EnableKeyEquivalents =  [enable_keyequivs intValue];
--        [NSApp prefs_set_boolean:@PREFS_KEYEQUIVS value:X11EnableKeyEquivalents];
-+        XQuartzEnableKeyEquivalents =  [enable_keyequivs intValue];
-+        [NSApp prefs_set_boolean:@PREFS_KEYEQUIVS value:XQuartzEnableKeyEquivalents];
-     } else if(sender == sync_keymap) {
-         darwinSyncKeymap = [sync_keymap intValue];
-         [NSApp prefs_set_boolean:@PREFS_SYNC_KEYMAP value:darwinSyncKeymap];
-     } else if(sender == enable_fullscreen_menu) {
--        quartzFullscreenMenu = [enable_fullscreen_menu intValue];
--        [NSApp prefs_set_boolean:@PREFS_FULLSCREEN_MENU value:quartzFullscreenMenu];
-+        XQuartzFullscreenMenu = [enable_fullscreen_menu intValue];
-+        [NSApp prefs_set_boolean:@PREFS_FULLSCREEN_MENU value:XQuartzFullscreenMenu];
-     } else if(sender == option_sends_alt) {
--        BOOL prev_opt_sends_alt = quartzOptionSendsAlt;
-+        BOOL prev_opt_sends_alt = XQuartzOptionSendsAlt;
-         
--        quartzOptionSendsAlt = [option_sends_alt intValue];
--        [NSApp prefs_set_boolean:@PREFS_OPTION_SENDS_ALT value:quartzOptionSendsAlt];
-+        XQuartzOptionSendsAlt = [option_sends_alt intValue];
-+        [NSApp prefs_set_boolean:@PREFS_OPTION_SENDS_ALT value:XQuartzOptionSendsAlt];
- 
--        if(prev_opt_sends_alt != quartzOptionSendsAlt)
-+        if(prev_opt_sends_alt != XQuartzOptionSendsAlt)
-             QuartsResyncKeymap(TRUE);
-     } else if(sender == click_through) {
-         [NSApp prefs_set_boolean:@PREFS_CLICK_THROUGH value:[click_through intValue]];
-@@ -701,10 +701,10 @@ objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
-     BOOL pbproxy_active = [NSApp prefs_get_boolean:@PREFS_SYNC_PB default:YES];
-     
-     [fake_buttons setIntValue:darwinFakeButtons];
--    [use_sysbeep setIntValue:quartzUseSysBeep];
--    [enable_keyequivs setIntValue:X11EnableKeyEquivalents];
-+    [use_sysbeep setIntValue:XQuartzUseSysBeep];
-+    [enable_keyequivs setIntValue:XQuartzEnableKeyEquivalents];
-     [sync_keymap setIntValue:darwinSyncKeymap];
--    [option_sends_alt setIntValue:quartzOptionSendsAlt];
-+    [option_sends_alt setIntValue:XQuartzOptionSendsAlt];
-     [click_through setIntValue:[NSApp prefs_get_boolean:@PREFS_CLICK_THROUGH default:NO]];
-     [focus_follows_mouse setIntValue:[NSApp prefs_get_boolean:@PREFS_FFM default:NO]];
-     [focus_on_new_window setIntValue:[NSApp prefs_get_boolean:@PREFS_FOCUS_ON_NEW_WINDOW default:YES]];
-@@ -729,9 +729,9 @@ objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
-     [sync_text1 setTextColor:pbproxy_active ? [NSColor controlTextColor] : [NSColor disabledControlTextColor]];
-     [sync_text2 setTextColor:pbproxy_active ? [NSColor controlTextColor] : [NSColor disabledControlTextColor]];
- 	
--    [enable_fullscreen setIntValue:!quartzEnableRootless];
--    [enable_fullscreen_menu setEnabled:!quartzEnableRootless];
--    [enable_fullscreen_menu setIntValue:quartzFullscreenMenu];
-+    [enable_fullscreen setIntValue:!XQuartzRootlessDefault];
-+    [enable_fullscreen_menu setEnabled:!XQuartzRootlessDefault];
-+    [enable_fullscreen_menu setIntValue:XQuartzFullscreenMenu];
-     
-     [prefs_panel makeKeyAndOrderFront:sender];
- }
-@@ -752,7 +752,7 @@ objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
-   NSMenu *menu = [item menu];
-     
-   if (item == toggle_fullscreen_item)
--    return !quartzEnableRootless;
-+    return !XQuartzIsRootless;
-   else if (menu == [X11App windowsMenu] || menu == dock_menu
- 	   || (menu == [x11_about_item menu] && [item tag] == 42))
-     return (AppleWMSelectedEvents () & AppleWMControllerNotifyMask) != 0;
-diff --git xorg-server-1.8.99.906/hw/xquartz/darwinEvents.c xorg-server-1.8.99.906/hw/xquartz/darwinEvents.c
-index 7367068..4332202 100644
---- xorg-server-1.8.99.906/hw/xquartz/darwinEvents.c
-+++ xorg-server-1.8.99.906/hw/xquartz/darwinEvents.c
-@@ -239,9 +239,9 @@ static void DarwinEventHandler(int screenNum, InternalEvent *ie, DeviceIntPtr de
-             
-         case kXquartzToggleFullscreen:
-             DEBUG_LOG("kXquartzToggleFullscreen\n");
--            if(quartzEnableRootless) 
-+            if(XQuartzIsRootless)
-                 ErrorF("Ignoring kXquartzToggleFullscreen because of rootless mode.");
--            else if (quartzHasRoot)
-+            else if (XQuartzHasRoot)
-                 QuartzHide();
-             else
-                 QuartzShow();
-@@ -250,7 +250,7 @@ static void DarwinEventHandler(int screenNum, InternalEvent *ie, DeviceIntPtr de
-         case kXquartzSetRootless:
-             DEBUG_LOG("kXquartzSetRootless\n");
-             QuartzSetRootless(e->data[0]);
--            if (!quartzEnableRootless && !quartzHasRoot)
-+            if (!XQuartzIsRootless && !XQuartzHasRoot)
-                 QuartzHide();
-             break;
-             
-diff --git xorg-server-1.8.99.906/hw/xquartz/quartz.c xorg-server-1.8.99.906/hw/xquartz/quartz.c
-index a52cac9..cd90457 100644
---- xorg-server-1.8.99.906/hw/xquartz/quartz.c
-+++ xorg-server-1.8.99.906/hw/xquartz/quartz.c
-@@ -66,15 +66,20 @@
- #include <rootlessCommon.h>
- #include <Xplugin.h>
- 
--// Shared global variables for Quartz modes
--int                     quartzUseSysBeep = 0;
--int                     quartzServerVisible = FALSE;
- DevPrivateKeyRec        quartzScreenKeyRec;
- int                     aquaMenuBarHeight = 0;
- QuartzModeProcsPtr      quartzProcs = NULL;
- const char             *quartzOpenGLBundle = NULL;
--int                     quartzFullscreenDisableHotkeys = TRUE;
--int                     quartzOptionSendsAlt = FALSE;
-+
-+Bool XQuartzFullscreenDisableHotkeys = TRUE;
-+Bool XQuartzOptionSendsAlt = FALSE;
-+Bool XQuartzEnableKeyEquivalents = TRUE;
-+Bool XQuartzHasRoot = FALSE;
-+Bool XQuartzRootlessDefault = TRUE;
-+Bool XQuartzIsRootless = TRUE;
-+Bool XQuartzServerVisible = FALSE;
-+Bool XQuartzFullscreenMenu = FALSE;
-+Bool XQuartzUseSysBeep = FALSE;
- 
- /*
- ===========================================================================
-@@ -245,61 +250,61 @@ void QuartzSetFullscreen(Bool state) {
-     
-     DEBUG_LOG("QuartzSetFullscreen: state=%d\n", state);
-     
--    if(quartzHasRoot == state)
-+    if(XQuartzHasRoot == state)
-         return;
-     
--    quartzHasRoot = state;
-+    XQuartzHasRoot = state;
-     
-     xp_disable_update ();
-     
--    if (!quartzHasRoot && !quartzEnableRootless)
-+    if (!XQuartzHasRoot && !XQuartzIsRootless)
-         RootlessHideAllWindows();
-     
--    RootlessUpdateRooted(quartzHasRoot);
-+    RootlessUpdateRooted(XQuartzHasRoot);
-     
--    if (quartzHasRoot && !quartzEnableRootless)
-+    if (XQuartzHasRoot && !XQuartzIsRootless)
-         RootlessShowAllWindows ();
-     
--    if (quartzHasRoot || quartzEnableRootless) {
-+    if (XQuartzHasRoot || XQuartzIsRootless) {
-         RootlessRepositionWindows(screenInfo.screens[0]);
-     }
- 
-     /* Somehow the menubar manages to interfere with our event stream
-      * in fullscreen mode, even though it's not visible. 
-      */
--    X11ApplicationShowHideMenubar(!quartzHasRoot);
-+    X11ApplicationShowHideMenubar(!XQuartzHasRoot);
-     
-     xp_reenable_update ();
-     
--    if (quartzFullscreenDisableHotkeys)
--        xp_disable_hot_keys(quartzHasRoot);
-+    if (XQuartzFullscreenDisableHotkeys)
-+        xp_disable_hot_keys(XQuartzHasRoot);
- }
- 
- void QuartzSetRootless(Bool state) {
--    if(quartzEnableRootless == state)
-+    if(XQuartzIsRootless == state)
-         return;
-     
--    quartzEnableRootless = state;
-+    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 */    
-     QuartzUpdateScreens();
- 
--    if(!quartzHasRoot) {
--        if(!quartzEnableRootless) {
-+    if(!XQuartzHasRoot) {
-+        if(!XQuartzIsRootless) {
-             RootlessHideAllWindows();
-         } else {
-             RootlessShowAllWindows();
-         }
-     }
- 
--    X11ApplicationShowHideMenubar(!quartzHasRoot);
-+    X11ApplicationShowHideMenubar(!XQuartzHasRoot);
- 
-     xp_reenable_update();
- 
--    if (!quartzEnableRootless && quartzFullscreenDisableHotkeys)
--        xp_disable_hot_keys(quartzHasRoot);
-+    if (!XQuartzIsRootless && XQuartzFullscreenDisableHotkeys)
-+        xp_disable_hot_keys(XQuartzHasRoot);
- }
- 
- /*
-@@ -311,17 +316,17 @@ void QuartzSetRootless(Bool state) {
- void QuartzShow(void) {
-     int i;
- 
--    if (quartzServerVisible)
-+    if (XQuartzServerVisible)
-         return;
-     
--    quartzServerVisible = TRUE;
-+    XQuartzServerVisible = TRUE;
-     for (i = 0; i < screenInfo.numScreens; i++) {
-         if (screenInfo.screens[i]) {
-             quartzProcs->ResumeScreen(screenInfo.screens[i]);
-         }
-     }
-     
--    if (!quartzEnableRootless)
-+    if (!XQuartzIsRootless)
-         QuartzSetFullscreen(TRUE);
- }
- 
-@@ -336,7 +341,7 @@ void QuartzHide(void)
- {
-     int i;
- 
--    if (quartzServerVisible) {
-+    if (XQuartzServerVisible) {
-         for (i = 0; i < screenInfo.numScreens; i++) {
-             if (screenInfo.screens[i]) {
-                 quartzProcs->SuspendScreen(screenInfo.screens[i]);
-@@ -345,7 +350,7 @@ void QuartzHide(void)
-     }
-     
-     QuartzSetFullscreen(FALSE);
--    quartzServerVisible = FALSE;
-+    XQuartzServerVisible = FALSE;
- }
- 
- 
-@@ -358,7 +363,7 @@ void QuartzSetRootClip(
- {
-     int i;
- 
--    if (!quartzServerVisible)
-+    if (!XQuartzServerVisible)
-         return;
- 
-     for (i = 0; i < screenInfo.numScreens; i++) {
-diff --git xorg-server-1.8.99.906/hw/xquartz/quartz.h xorg-server-1.8.99.906/hw/xquartz/quartz.h
-index 1b924e7..a0a17cb 100644
---- xorg-server-1.8.99.906/hw/xquartz/quartz.h
-+++ xorg-server-1.8.99.906/hw/xquartz/quartz.h
-@@ -35,6 +35,7 @@
- 
- #include "screenint.h"
- #include "window.h"
-+#include "pixmap.h"
- 
- /*------------------------------------------
-    Quartz display mode function types
-@@ -113,7 +114,20 @@ typedef struct _QuartzModeProcs {
- } QuartzModeProcsRec, *QuartzModeProcsPtr;
- 
- extern QuartzModeProcsPtr quartzProcs;
--extern int quartzHasRoot, quartzEnableRootless;
-+
-+extern Bool XQuartzHasRoot;          /* TODO: These two booleans are very similar and */
-+extern Bool XQuartzServerVisible;    /* the code that uses them needs to be refactored
-+                                      * XQuartzHasRoot is essentially the "saved" XQuartzServerVisible
-+                                      * value from when the server was not in rootless mode.
-+                                      */
-+
-+extern Bool XQuartzEnableKeyEquivalents;
-+extern Bool XQuartzRootlessDefault;  /* Is our default mode rootless? */
-+extern Bool XQuartzIsRootless;       /* Is our current mode rootless (or FS)? */
-+extern Bool XQuartzFullscreenMenu;   /* Show the menu bar (autohide) while in FS */
-+extern Bool XQuartzFullscreenDisableHotkeys;
-+extern Bool XQuartzOptionSendsAlt;   /* Alt or Mode_switch? */
-+extern Bool XQuartzUseSysBeep;       /* Sys beep or our own? */
- 
- Bool QuartzAddScreen(int index, ScreenPtr pScreen);
- Bool QuartzSetupScreen(int index, ScreenPtr pScreen);
-@@ -129,8 +143,8 @@ void QuartzHide(void);
- void QuartzSetRootClip(BOOL enable);
- void QuartzSpaceChanged(uint32_t space_id);
- 
--void QuartzSetFullscreen(Bool state);
- void QuartzSetRootless(Bool state);
-+void QuartzSetFullscreen(Bool state);
- 
- int server_main(int argc, char **argv, char **envp);
- #endif
-diff --git xorg-server-1.8.99.906/hw/xquartz/quartzAudio.c xorg-server-1.8.99.906/hw/xquartz/quartzAudio.c
-index 708202b..d0f7c53 100644
---- xorg-server-1.8.99.906/hw/xquartz/quartzAudio.c
-+++ xorg-server-1.8.99.906/hw/xquartz/quartzAudio.c
-@@ -42,7 +42,7 @@
- #include <dix-config.h>
- #endif
- 
--#include "quartzCommon.h"
-+#include "quartz.h"
- #include "quartzAudio.h"
- 
- #include <CoreAudio/CoreAudio.h>
-@@ -220,7 +220,7 @@ void DDXRingBell(
-     int pitch,          // pitch is Hz
-     int duration )      // duration is milliseconds
- {
--    if (quartzUseSysBeep) {
-+    if (XQuartzUseSysBeep) {
-         if (volume)
-             NSBeep();
-         return;
-diff --git xorg-server-1.8.99.906/hw/xquartz/quartzCommon.h xorg-server-1.8.99.906/hw/xquartz/quartzCommon.h
-index 718df4b..fbfe6f8 100644
---- xorg-server-1.8.99.906/hw/xquartz/quartzCommon.h
-+++ xorg-server-1.8.99.906/hw/xquartz/quartzCommon.h
-@@ -38,13 +38,7 @@
- #include <X11/Xdefs.h>
- #include "privates.h"
- 
--// User preferences used by Quartz modes
--extern int              quartzUseSysBeep;
--extern int              quartzFullscreenDisableHotkeys;
--extern int              quartzOptionSendsAlt;
--
- // Other shared data
--extern int              quartzServerVisible;
- extern DevPrivateKeyRec quartzScreenKeyRec;
- #define quartzScreenKey (&quartzScreenKeyRec)
- extern int              aquaMenuBarHeight;
-diff --git xorg-server-1.8.99.906/hw/xquartz/quartzKeyboard.c xorg-server-1.8.99.906/hw/xquartz/quartzKeyboard.c
-index 75cf23f..f54c686 100644
---- xorg-server-1.8.99.906/hw/xquartz/quartzKeyboard.c
-+++ xorg-server-1.8.99.906/hw/xquartz/quartzKeyboard.c
-@@ -48,7 +48,7 @@
- #include <sys/stat.h>
- #include <AvailabilityMacros.h>
- 
--#include "quartzCommon.h"
-+#include "quartz.h"
- #include "darwin.h"
- #include "darwinEvents.h"
- 
-@@ -262,7 +262,7 @@ static void DarwinBuildModifierMaps(darwinKeyboardInfo *info) {
-             case XK_Alt_L:
-                 info->modifierKeycodes[NX_MODIFIERKEY_ALTERNATE][0] = i;
-                 info->modMap[MIN_KEYCODE + i] = Mod1Mask;
--                if(!quartzOptionSendsAlt)
-+                if(!XQuartzOptionSendsAlt)
-                     *k = XK_Mode_switch; // Yes, this is ugly.  This needs to be cleaned up when we integrate quartzKeyboard with this code and refactor.
-                 break;
- 
-@@ -272,7 +272,7 @@ static void DarwinBuildModifierMaps(darwinKeyboardInfo *info) {
- #else
-                 info->modifierKeycodes[NX_MODIFIERKEY_ALTERNATE][0] = i;
- #endif
--                if(!quartzOptionSendsAlt)
-+                if(!XQuartzOptionSendsAlt)
-                     *k = XK_Mode_switch; // Yes, this is ugly.  This needs to be cleaned up when we integrate quartzKeyboard with this code and refactor.
-                 info->modMap[MIN_KEYCODE + i] = Mod1Mask;
-                 break;
-diff --git xorg-server-1.8.99.906/hw/xquartz/quartzRandR.c xorg-server-1.8.99.906/hw/xquartz/quartzRandR.c
-index 9b84fa1..7534267 100644
---- xorg-server-1.8.99.906/hw/xquartz/quartzRandR.c
-+++ xorg-server-1.8.99.906/hw/xquartz/quartzRandR.c
-@@ -140,7 +140,7 @@ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
-             break;
-     }
- 
--    switch(callback(pScreen, screenId, &pQuartzScreen->fullScreenMode, data)) {
-+    switch(callback(pScreen, screenId, &pQuartzScreen->fullscreenMode, data)) {
-         case CALLBACK_SUCCESS:
-             return TRUE;
-         case CALLBACK_ERROR:
-@@ -239,7 +239,7 @@ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
-             break;
-     }
- 
--    switch(callback(pScreen, screenId, &pQuartzScreen->fullScreenMode, data)) {
-+    switch(callback(pScreen, screenId, &pQuartzScreen->fullscreenMode, data)) {
-         case CALLBACK_SUCCESS:
-             return TRUE;
-         case CALLBACK_ERROR:
-@@ -377,7 +377,7 @@ static Bool QuartzRandRGetInfo (ScreenPtr pScreen, Rotation *rotations) {
-            resolution including/excluding the menu bar. */
- 
-         QuartzRandRRegisterMode(pScreen, &pQuartzScreen->rootlessMode);
--        QuartzRandRRegisterMode(pScreen, &pQuartzScreen->fullScreenMode);
-+        QuartzRandRRegisterMode(pScreen, &pQuartzScreen->fullscreenMode);
-         return TRUE;
-     }
- 
-@@ -434,37 +434,37 @@ static Bool _QuartzRandRUpdateFakeModes (ScreenPtr pScreen) {
-     QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
- 
-     if (pQuartzScreen->displayCount == 1) {
--        if(pQuartzScreen->fullScreenMode.ref)
--            CFRelease(pQuartzScreen->fullScreenMode.ref);
-+        if(pQuartzScreen->fullscreenMode.ref)
-+            CFRelease(pQuartzScreen->fullscreenMode.ref);
-         if(pQuartzScreen->currentMode.ref)
-             CFRelease(pQuartzScreen->currentMode.ref);
-         
-         if (!QuartzRandRCopyCurrentModeInfo(pQuartzScreen->displayIDs[0],
--                                            &pQuartzScreen->fullScreenMode))
-+                                            &pQuartzScreen->fullscreenMode))
-             return FALSE;
- 
--        CFRetain(pQuartzScreen->fullScreenMode.ref);  /* This extra retain is for currentMode's copy */
-+        CFRetain(pQuartzScreen->fullscreenMode.ref);  /* This extra retain is for currentMode's copy */
-     } else {
--        pQuartzScreen->fullScreenMode.width = pScreen->width;
--        pQuartzScreen->fullScreenMode.height = pScreen->height;
--        if(quartzEnableRootless)
--            pQuartzScreen->fullScreenMode.height += aquaMenuBarHeight;
-+        pQuartzScreen->fullscreenMode.width = pScreen->width;
-+        pQuartzScreen->fullscreenMode.height = pScreen->height;
-+        if(XQuartzIsRootless)
-+            pQuartzScreen->fullscreenMode.height += aquaMenuBarHeight;
-     }
- 
--    pQuartzScreen->fullScreenMode.refresh = FAKE_REFRESH_FULLSCREEN;
-+    pQuartzScreen->fullscreenMode.refresh = FAKE_REFRESH_FULLSCREEN;
- 
--    pQuartzScreen->rootlessMode = pQuartzScreen->fullScreenMode;
-+    pQuartzScreen->rootlessMode = pQuartzScreen->fullscreenMode;
-     pQuartzScreen->rootlessMode.refresh = FAKE_REFRESH_ROOTLESS;
-     pQuartzScreen->rootlessMode.height -= aquaMenuBarHeight;
- 
--    if(quartzEnableRootless) {
-+    if(XQuartzIsRootless) {
-         pQuartzScreen->currentMode = pQuartzScreen->rootlessMode;
-     } else {
--        pQuartzScreen->currentMode = pQuartzScreen->fullScreenMode;
-+        pQuartzScreen->currentMode = pQuartzScreen->fullscreenMode;
-     }
-     
-     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);
-     DEBUG_LOG("currentMode: %d x %d\n", (int)pQuartzScreen->currentMode.width, (int)pQuartzScreen->currentMode.height);
-     
-     return TRUE;
-diff --git xorg-server-1.8.99.906/hw/xquartz/quartzRandR.h xorg-server-1.8.99.906/hw/xquartz/quartzRandR.h
-index 4a7990e..b2d4d09 100644
---- xorg-server-1.8.99.906/hw/xquartz/quartzRandR.h
-+++ xorg-server-1.8.99.906/hw/xquartz/quartzRandR.h
-@@ -45,7 +45,7 @@ typedef struct {
-     // No CG display will be covered by more than one X11 screen.
-     int displayCount;
-     CGDirectDisplayID *displayIDs;
--    QuartzModeInfo rootlessMode, fullScreenMode, currentMode;
-+    QuartzModeInfo rootlessMode, fullscreenMode, currentMode;
- } QuartzScreenRec, *QuartzScreenPtr;
- 
- #define QUARTZ_PRIV(pScreen) \
-diff --git xorg-server-1.8.99.906/hw/xquartz/xpr/xprAppleWM.c xorg-server-1.8.99.906/hw/xquartz/xpr/xprAppleWM.c
-index 4b31e3a..1a3d427 100644
---- xorg-server-1.8.99.906/hw/xquartz/xpr/xprAppleWM.c
-+++ xorg-server-1.8.99.906/hw/xquartz/xpr/xprAppleWM.c
-@@ -67,7 +67,7 @@ static int xprSetWindowLevel(
-     if(!winRec)
-         return BadWindow;
-     
--    if(quartzEnableRootless)
-+    if(XQuartzIsRootless)
-         wc.window_level = normal_window_levels[level];
-     else
-         wc.window_level = rooted_window_levels[level];
-diff --git xorg-server-1.8.99.906/hw/xquartz/xpr/xprCursor.c xorg-server-1.8.99.906/hw/xquartz/xpr/xprCursor.c
-index a106e72..216678e 100644
---- xorg-server-1.8.99.906/hw/xquartz/xpr/xprCursor.c
-+++ xorg-server-1.8.99.906/hw/xquartz/xpr/xprCursor.c
-@@ -35,7 +35,7 @@
- #include <dix-config.h>
- #endif
- 
--#include "quartzCommon.h"
-+#include "quartz.h"
- #include "xpr.h"
- #include "darwin.h"
- #include "darwinEvents.h"
-@@ -226,7 +226,7 @@ QuartzSetCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor, int x,
- {
-     QuartzCursorScreenPtr ScreenPriv = CURSOR_PRIV(pScreen);
- 
--    if (!quartzServerVisible)
-+    if (!XQuartzServerVisible)
-         return;
- 
-     if (pCursor == NULL)
-@@ -295,7 +295,7 @@ QuartzCrossScreen(ScreenPtr pScreen, Bool entering)
- static void
- QuartzWarpCursor(DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)
- {
--    if (quartzServerVisible)
-+    if (XQuartzServerVisible)
-     {
-         int sx, sy;
- 
-diff --git xorg-server-1.8.99.906/hw/xquartz/xpr/xprFrame.c xorg-server-1.8.99.906/hw/xquartz/xpr/xprFrame.c
-index 42f06ef..ede5af5 100644
---- xorg-server-1.8.99.906/hw/xquartz/xpr/xprFrame.c
-+++ xorg-server-1.8.99.906/hw/xquartz/xpr/xprFrame.c
-@@ -171,7 +171,7 @@ xprCreateFrame(RootlessWindowPtr pFrame, ScreenPtr pScreen,
- 
-     pFrame->level = !IsRoot (pWin) ? AppleWMWindowLevelNormal : AppleWMNumWindowLevels;
- 
--    if(quartzEnableRootless)
-+    if(XQuartzIsRootless)
-         wc.window_level = normal_window_levels[pFrame->level];
-     else
-         wc.window_level = rooted_window_levels[pFrame->level];
-@@ -285,7 +285,7 @@ static void xprRestackFrame(RootlessFrameID wid, RootlessFrameID nextWid) {
-         RootlessWindowRec *winRec = x_hash_table_lookup(window_hash, wid, NULL);
- 
-         if(winRec) {
--            if(quartzEnableRootless)
-+            if(XQuartzIsRootless)
-                 wc.window_level = normal_window_levels[winRec->level];
-             else
-                 wc.window_level = rooted_window_levels[winRec->level];
-diff --git xorg-server-1.8.99.906/hw/xquartz/xpr/xprScreen.c xorg-server-1.8.99.906/hw/xquartz/xpr/xprScreen.c
-index b3ac693..599ef6f 100644
---- xorg-server-1.8.99.906/hw/xquartz/xpr/xprScreen.c
-+++ xorg-server-1.8.99.906/hw/xquartz/xpr/xprScreen.c
-@@ -158,7 +158,7 @@ displayScreenBounds(CGDirectDisplayID id)
-               (int)frame.origin.x, (int)frame.origin.y);
-     
-     /* Remove menubar to help standard X11 window managers. */
--    if (quartzEnableRootless && 
-+    if (XQuartzIsRootless && 
-         frame.origin.x == 0 && frame.origin.y == 0) {
-         frame.origin.y += aquaMenuBarHeight;
-         frame.size.height -= aquaMenuBarHeight;
-@@ -274,7 +274,8 @@ xprDisplayInit(void)
-     AppleDRIExtensionInit();
-     xprAppleWMInit();
- 
--    if (!quartzEnableRootless)
-+    XQuartzIsRootless = XQuartzRootlessDefault;
-+    if (!XQuartzIsRootless)
-         RootlessHideAllWindows();
- }
- 
--- 
-1.5.6.6
-

Added: trunk/dports/x11/xorg-server-devel/files/0011-fb-Revert-fb-changes-that-broke-XQuartz.patch
===================================================================
--- trunk/dports/x11/xorg-server-devel/files/0011-fb-Revert-fb-changes-that-broke-XQuartz.patch	                        (rev 0)
+++ trunk/dports/x11/xorg-server-devel/files/0011-fb-Revert-fb-changes-that-broke-XQuartz.patch	2010-08-21 06:35:57 UTC (rev 70781)
@@ -0,0 +1,245 @@
+From 1f03dfb10cd9afab052d38cd9de8311dd4bd9166 Mon Sep 17 00:00:00 2001
+From: Jeremy Huddleston <jeremyhu at apple.com>
+Date: Fri, 12 Feb 2010 19:48:52 -0800
+Subject: [PATCH] fb: Revert fb changes that broke XQuartz
+
+http://bugs.freedesktop.org/show_bug.cgi?id=26124
+
+Revert "Fix source pictures getting random transforms after 2d6a8f668342a5190cdf43b5."
+Revert "fb: Adjust transform or composite coordinates for pixman operations"
+
+http://bugs.freedesktop.org/26124
+
+This reverts commit a72c65e9176c51de95db2fdbf4c5d946a4911695.
+This reverts commit a6bd5d2e482a5aa84acb3d4932e2a166d8670ef1.
+
+Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
+---
+ fb/fb.h     |    7 +----
+ fb/fbpict.c |   78 +++++++++++++++++++----------------------------------------
+ fb/fbtrap.c |    6 +---
+ 3 files changed, 29 insertions(+), 62 deletions(-)
+
+diff --git xorg-server-1.9.0/fb/fb.h xorg-server-1.9.0/fb/fb.h
+index a06f98b..3b9efea 100644
+--- xorg-server-1.9.0/fb/fb.h
++++ xorg-server-1.9.0/fb/fb.h
+@@ -2080,11 +2080,8 @@ fbFillRegionSolid (DrawablePtr	pDrawable,
+ 		   FbBits	xor);
+ 
+ extern _X_EXPORT pixman_image_t *
+-image_from_pict (PicturePtr	pict,
+-		 Bool		has_clip,
+-		 int		*xoff,
+-		 int		*yoff);
+-
++image_from_pict (PicturePtr pict,
++		 Bool       has_clip);
+ extern _X_EXPORT void free_pixman_pict (PicturePtr, pixman_image_t *);
+ 
+ #endif /* _FB_H_ */
+diff --git xorg-server-1.9.0/fb/fbpict.c xorg-server-1.9.0/fb/fbpict.c
+index f7f1200..5467ee4 100644
+--- xorg-server-1.9.0/fb/fbpict.c
++++ xorg-server-1.9.0/fb/fbpict.c
+@@ -156,24 +156,19 @@ fbComposite (CARD8      op,
+ 	     CARD16     height)
+ {
+     pixman_image_t *src, *mask, *dest;
+-    int src_xoff, src_yoff;
+-    int msk_xoff, msk_yoff;
+-    int dst_xoff, dst_yoff;
+     
+     miCompositeSourceValidate (pSrc, xSrc - xDst, ySrc - yDst, width, height);
+     if (pMask)
+ 	miCompositeSourceValidate (pMask, xMask - xDst, yMask - yDst, width, height);
+     
+-    src = image_from_pict (pSrc, FALSE, &src_xoff, &src_yoff);
+-    mask = image_from_pict (pMask, FALSE, &msk_xoff, &msk_yoff);
+-    dest = image_from_pict (pDst, TRUE, &dst_xoff, &dst_yoff);
++    src = image_from_pict (pSrc, TRUE);
++    mask = image_from_pict (pMask, TRUE);
++    dest = image_from_pict (pDst, TRUE);
+ 
+     if (src && dest && !(pMask && !mask))
+     {
+ 	pixman_image_composite (op, src, mask, dest,
+-				xSrc + src_xoff, ySrc + src_yoff,
+-				xMask + msk_xoff, yMask + msk_yoff,
+-				xDst + dst_xoff, yDst + dst_yoff,
++				xSrc, ySrc, xMask, yMask, xDst, yDst,
+ 				width, height);
+     }
+ 
+@@ -271,22 +266,22 @@ create_conical_gradient_image (PictGradient *gradient)
+ 
+ static pixman_image_t *
+ create_bits_picture (PicturePtr pict,
+-		     Bool       has_clip,
+-		     int	*xoff,
+-		     int	*yoff)
++		     Bool       has_clip)
+ {
+-    PixmapPtr pixmap;
+     FbBits *bits;
+     FbStride stride;
+-    int bpp;
++    int bpp, xoff, yoff;
+     pixman_image_t *image;
+     
+-    fbGetDrawablePixmap (pict->pDrawable, pixmap, *xoff, *yoff);
+-    fbGetPixmapBitsData(pixmap, bits, stride, bpp);
++    fbGetDrawable (pict->pDrawable, bits, stride, bpp, xoff, yoff);
++
++    bits = (FbBits*)((CARD8*)bits +
++		     (pict->pDrawable->y + yoff) * stride * sizeof(FbBits) +
++		     (pict->pDrawable->x + xoff) * (bpp / 8));
+ 
+     image = pixman_image_create_bits (
+ 	pict->format,
+-	pixmap->drawable.width, pixmap->drawable.height,
++	pict->pDrawable->width, pict->pDrawable->height,
+ 	(uint32_t *)bits, stride * sizeof (FbStride));
+     
+     
+@@ -312,55 +307,33 @@ create_bits_picture (PicturePtr pict,
+ 	if (pict->clientClipType != CT_NONE)
+ 	    pixman_image_set_has_client_clip (image, TRUE);
+ 
+-	if (*xoff || *yoff)
+-	    pixman_region_translate (pict->pCompositeClip, *xoff, *yoff);
++	pixman_region_translate (pict->pCompositeClip, - pict->pDrawable->x, - pict->pDrawable->y);
+ 
+ 	pixman_image_set_clip_region (image, pict->pCompositeClip);
+ 
+-	if (*xoff || *yoff)
+-	    pixman_region_translate (pict->pCompositeClip, -*xoff, -*yoff);
++	pixman_region_translate (pict->pCompositeClip, pict->pDrawable->x, pict->pDrawable->y);
+     }
+     
+     /* Indexed table */
+     if (pict->pFormat->index.devPrivate)
+ 	pixman_image_set_indexed (image, pict->pFormat->index.devPrivate);
+ 
+-    /* Add in drawable origin to position within the image */
+-    *xoff += pict->pDrawable->x;
+-    *yoff += pict->pDrawable->y;
+-
+     return image;
+ }
+ 
+ static pixman_image_t *
+-image_from_pict_internal (PicturePtr pict, Bool has_clip, int *xoff, int *yoff, Bool is_alpha_map);
++image_from_pict_internal (PicturePtr pict, Bool has_clip, Bool is_alpha_map);
+ 
+ static void
+-set_image_properties (pixman_image_t *image, PicturePtr pict, Bool has_clip, int *xoff, int *yoff, Bool is_alpha_map)
++set_image_properties (pixman_image_t *image, PicturePtr pict, Bool is_alpha_map)
+ {
+     pixman_repeat_t repeat;
+     pixman_filter_t filter;
+     
+     if (pict->transform)
+     {
+-	/* For source images, adjust the transform to account
+-	 * for the drawable offset within the pixman image,
+-	 * then set the offset to 0 as it will be used
+-	 * to compute positions within the transformed image.
+-	 */
+-	if (!has_clip) {
+-	    struct pixman_transform	adjusted;
+-
+-	    adjusted = *pict->transform;
+-	    pixman_transform_translate(&adjusted,
+-				       NULL,
+-				       pixman_int_to_fixed(*xoff),
+-				       pixman_int_to_fixed(*yoff));
+-	    pixman_image_set_transform (image, &adjusted);
+-	    *xoff = 0;
+-	    *yoff = 0;
+-	} else
+-	    pixman_image_set_transform (image, pict->transform);
++	pixman_image_set_transform (
++	    image, (pixman_transform_t *)pict->transform);
+     }
+     
+     switch (pict->repeatType)
+@@ -390,8 +363,7 @@ set_image_properties (pixman_image_t *image, PicturePtr pict, Bool has_clip, int
+      */
+     if (pict->alphaMap && !is_alpha_map)
+     {
+-	int alpha_xoff, alpha_yoff;
+-	pixman_image_t *alpha_map = image_from_pict_internal (pict->alphaMap, FALSE, &alpha_xoff, &alpha_yoff, TRUE);
++	pixman_image_t *alpha_map = image_from_pict_internal (pict->alphaMap, TRUE, TRUE);
+ 	
+ 	pixman_image_set_alpha_map (
+ 	    image, alpha_map, pict->alphaOrigin.x, pict->alphaOrigin.y);
+@@ -424,7 +396,8 @@ set_image_properties (pixman_image_t *image, PicturePtr pict, Bool has_clip, int
+ }
+ 
+ static pixman_image_t *
+-image_from_pict_internal (PicturePtr pict, Bool has_clip, int *xoff, int *yoff, Bool is_alpha_map)
++image_from_pict_internal (PicturePtr pict,
++		 Bool has_clip, Bool is_alpha_map)
+ {
+     pixman_image_t *image = NULL;
+ 
+@@ -433,7 +406,7 @@ image_from_pict_internal (PicturePtr pict, Bool has_clip, int *xoff, int *yoff,
+ 
+     if (pict->pDrawable)
+     {
+-	image = create_bits_picture (pict, has_clip, xoff, yoff);
++	image = create_bits_picture (pict, has_clip);
+     }
+     else if (pict->pSourcePict)
+     {
+@@ -454,19 +427,18 @@ image_from_pict_internal (PicturePtr pict, Bool has_clip, int *xoff, int *yoff,
+ 	    else if (sp->type == SourcePictTypeConical)
+ 		image = create_conical_gradient_image (gradient);
+ 	}
+-	*xoff = *yoff = 0;
+     }
+     
+     if (image)
+-	set_image_properties (image, pict, has_clip, xoff, yoff, is_alpha_map);
++	set_image_properties (image, pict, is_alpha_map);
+     
+     return image;
+ }
+ 
+ pixman_image_t *
+-image_from_pict (PicturePtr pict, Bool has_clip, int *xoff, int *yoff)
++image_from_pict (PicturePtr pict, Bool has_clip)
+ {
+-    return image_from_pict_internal (pict, has_clip, xoff, yoff, FALSE);
++    return image_from_pict_internal (pict, has_clip, FALSE);
+ }
+ 
+ void
+diff --git xorg-server-1.9.0/fb/fbtrap.c xorg-server-1.9.0/fb/fbtrap.c
+index 9f5c39f..9c55236 100644
+--- xorg-server-1.9.0/fb/fbtrap.c
++++ xorg-server-1.9.0/fb/fbtrap.c
+@@ -38,8 +38,7 @@ fbAddTraps (PicturePtr	pPicture,
+ 	    int		ntrap,
+ 	    xTrap	*traps)
+ {
+-    int image_xoff, image_yoff;
+-    pixman_image_t *image = image_from_pict (pPicture, FALSE, &image_xoff, &image_yoff);
++    pixman_image_t *image = image_from_pict (pPicture, FALSE);
+ 
+     if (!image)
+ 	return;
+@@ -55,8 +54,7 @@ fbRasterizeTrapezoid (PicturePtr    pPicture,
+ 		      int	    x_off,
+ 		      int	    y_off)
+ {
+-    int	mask_xoff, mask_yoff;
+-    pixman_image_t *image = image_from_pict (pPicture, FALSE, &mask_xoff, &mask_yoff);
++    pixman_image_t *image = image_from_pict (pPicture, FALSE);
+ 
+     if (!image)
+ 	return;
+-- 
+1.5.6.6
+

Deleted: trunk/dports/x11/xorg-server-devel/files/0012-XQuartz-RandR-Refactor-legacy-mode-switching-to-be.patch
===================================================================
--- trunk/dports/x11/xorg-server-devel/files/0012-XQuartz-RandR-Refactor-legacy-mode-switching-to-be.patch	2010-08-20 22:32:45 UTC (rev 70780)
+++ trunk/dports/x11/xorg-server-devel/files/0012-XQuartz-RandR-Refactor-legacy-mode-switching-to-be.patch	2010-08-21 06:35:57 UTC (rev 70781)
@@ -1,598 +0,0 @@
-From 4fa0b305404517854efbc1ed48e8f0b806ad91f8 Mon Sep 17 00:00:00 2001
-From: Jeremy Huddleston <jeremyhu at apple.com>
-Date: Tue, 3 Aug 2010 12:51:51 -0700
-Subject: [PATCH] XQuartz: RandR: Refactor legacy mode-switching to be better integrated with RandR
-
-Adds three new functions
-void QuartzRandRSetFakeRootless (void);
-void QuartzRandRSetFakeFullscreen (void);
-void QuartzRandRToggleFullscreen (void);
-
-The first two are identical to requesting the fake modes from a RandR client
-The third responds to cmd-alt-a to leave fullscreen or RandR.
-
-Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
----
- hw/xquartz/X11Application.m |    2 +-
- hw/xquartz/darwinEvents.c   |   14 ++--
- hw/xquartz/quartz.c         |   64 ++++++++++-------
- hw/xquartz/quartz.h         |   10 +--
- hw/xquartz/quartzRandR.c    |  163 ++++++++++++++++++++++++++++---------------
- hw/xquartz/quartzRandR.h    |   20 +++++
- 6 files changed, 175 insertions(+), 98 deletions(-)
-
-diff --git xorg-server-1.8.99.906/hw/xquartz/X11Application.m xorg-server-1.8.99.906/hw/xquartz/X11Application.m
-index 781dccc..8f4f23f 100644
---- xorg-server-1.8.99.906/hw/xquartz/X11Application.m
-+++ xorg-server-1.8.99.906/hw/xquartz/X11Application.m
-@@ -370,7 +370,7 @@ static void message_kit_thread (SEL selector, NSObject *arg) {
-                     break;
-                     
-                 case 18: /* ApplicationDidReactivate */
--                    if (XQuartzHasRoot) for_appkit = NO;
-+                    if (XQuartzFullscreenVisible) for_appkit = NO;
-                     break;
-                     
-                 case NSApplicationDeactivatedEventType:
-diff --git xorg-server-1.8.99.906/hw/xquartz/darwinEvents.c xorg-server-1.8.99.906/hw/xquartz/darwinEvents.c
-index 4332202..74fadf4 100644
---- xorg-server-1.8.99.906/hw/xquartz/darwinEvents.c
-+++ xorg-server-1.8.99.906/hw/xquartz/darwinEvents.c
-@@ -241,17 +241,17 @@ static void DarwinEventHandler(int screenNum, InternalEvent *ie, DeviceIntPtr de
-             DEBUG_LOG("kXquartzToggleFullscreen\n");
-             if(XQuartzIsRootless)
-                 ErrorF("Ignoring kXquartzToggleFullscreen because of rootless mode.");
--            else if (XQuartzHasRoot)
--                QuartzHide();
--            else
--                QuartzShow();
-+            else 
-+                QuartzRandRToggleFullscreen();
-             break;
-             
-         case kXquartzSetRootless:
-             DEBUG_LOG("kXquartzSetRootless\n");
--            QuartzSetRootless(e->data[0]);
--            if (!XQuartzIsRootless && !XQuartzHasRoot)
--                QuartzHide();
-+            if(e->data[0]) {
-+                QuartzRandRSetFakeRootless();
-+            } else {
-+                QuartzRandRSetFakeFullscreen(FALSE);
-+            }
-             break;
-             
-         case kXquartzSetRootClip:
-diff --git xorg-server-1.8.99.906/hw/xquartz/quartz.c xorg-server-1.8.99.906/hw/xquartz/quartz.c
-index cd90457..e21303c 100644
---- xorg-server-1.8.99.906/hw/xquartz/quartz.c
-+++ xorg-server-1.8.99.906/hw/xquartz/quartz.c
-@@ -74,7 +74,7 @@ const char             *quartzOpenGLBundle = NULL;
- Bool XQuartzFullscreenDisableHotkeys = TRUE;
- Bool XQuartzOptionSendsAlt = FALSE;
- Bool XQuartzEnableKeyEquivalents = TRUE;
--Bool XQuartzHasRoot = FALSE;
-+Bool XQuartzFullscreenVisible = FALSE;
- Bool XQuartzRootlessDefault = TRUE;
- Bool XQuartzIsRootless = TRUE;
- Bool XQuartzServerVisible = FALSE;
-@@ -246,44 +246,58 @@ void QuartzUpdateScreens(void) {
-     quartzProcs->UpdateScreen(pScreen);
- }
- 
--void QuartzSetFullscreen(Bool state) {
-+void QuartzShowFullscreen(int state) {
-+    int i;
-+    
-+    DEBUG_LOG("QuartzShowFullscreen: state=%d\n", state);
-     
--    DEBUG_LOG("QuartzSetFullscreen: state=%d\n", state);
-+    if(XQuartzIsRootless) {
-+        ErrorF("QuartzShowFullscreen called while in rootless mode.\n");
-+        return;
-+    }
-     
--    if(XQuartzHasRoot == state)
-+    if(XQuartzFullscreenVisible == state)
-         return;
-     
--    XQuartzHasRoot = state;
-+    XQuartzFullscreenVisible = state;
-     
-     xp_disable_update ();
-     
--    if (!XQuartzHasRoot && !XQuartzIsRootless)
-+    if (!XQuartzFullscreenVisible)
-         RootlessHideAllWindows();
-     
--    RootlessUpdateRooted(XQuartzHasRoot);
-+    RootlessUpdateRooted(XQuartzFullscreenVisible);
-     
--    if (XQuartzHasRoot && !XQuartzIsRootless)
-+    if (XQuartzFullscreenVisible) {
-         RootlessShowAllWindows ();
--    
--    if (XQuartzHasRoot || XQuartzIsRootless) {
--        RootlessRepositionWindows(screenInfo.screens[0]);
-+        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);
-+        }
-     }
- 
-     /* Somehow the menubar manages to interfere with our event stream
-      * in fullscreen mode, even though it's not visible. 
-      */
--    X11ApplicationShowHideMenubar(!XQuartzHasRoot);
-+    X11ApplicationShowHideMenubar(!XQuartzFullscreenVisible);
-     
-     xp_reenable_update ();
-     
-     if (XQuartzFullscreenDisableHotkeys)
--        xp_disable_hot_keys(XQuartzHasRoot);
-+        xp_disable_hot_keys(XQuartzFullscreenVisible);
- }
- 
--void QuartzSetRootless(Bool state) {
-+void QuartzSetRootless(Bool state) {    
-+    DEBUG_LOG("QuartzSetRootless state=%d\n", state);
-+    
-     if(XQuartzIsRootless == state)
-         return;
-     
-+    if(state)
-+        QuartzShowFullscreen(FALSE);
-+    
-     XQuartzIsRootless = state;
- 
-     xp_disable_update();
-@@ -291,20 +305,17 @@ void QuartzSetRootless(Bool state) {
-     /* When in rootless, the menubar is not part of the screen, so we need to update our screens on toggle */    
-     QuartzUpdateScreens();
- 
--    if(!XQuartzHasRoot) {
--        if(!XQuartzIsRootless) {
--            RootlessHideAllWindows();
--        } else {
--            RootlessShowAllWindows();
--        }
-+    if(XQuartzIsRootless) {
-+        RootlessShowAllWindows();
-+    } else {
-+        RootlessHideAllWindows();
-     }
- 
--    X11ApplicationShowHideMenubar(!XQuartzHasRoot);
-+    X11ApplicationShowHideMenubar(TRUE);
- 
-     xp_reenable_update();
- 
--    if (!XQuartzIsRootless && XQuartzFullscreenDisableHotkeys)
--        xp_disable_hot_keys(XQuartzHasRoot);
-+    xp_disable_hot_keys(FALSE);
- }
- 
- /*
-@@ -327,7 +338,7 @@ void QuartzShow(void) {
-     }
-     
-     if (!XQuartzIsRootless)
--        QuartzSetFullscreen(TRUE);
-+        QuartzShowFullscreen(TRUE);
- }
- 
- 
-@@ -348,8 +359,9 @@ void QuartzHide(void)
-             }
-         }
-     }
--    
--    QuartzSetFullscreen(FALSE);
-+
-+    if(!XQuartzIsRootless)
-+        QuartzShowFullscreen(FALSE);
-     XQuartzServerVisible = FALSE;
- }
- 
-diff --git xorg-server-1.8.99.906/hw/xquartz/quartz.h xorg-server-1.8.99.906/hw/xquartz/quartz.h
-index a0a17cb..7efb7e0 100644
---- xorg-server-1.8.99.906/hw/xquartz/quartz.h
-+++ xorg-server-1.8.99.906/hw/xquartz/quartz.h
-@@ -115,12 +115,8 @@ typedef struct _QuartzModeProcs {
- 
- extern QuartzModeProcsPtr quartzProcs;
- 
--extern Bool XQuartzHasRoot;          /* TODO: These two booleans are very similar and */
--extern Bool XQuartzServerVisible;    /* the code that uses them needs to be refactored
--                                      * XQuartzHasRoot is essentially the "saved" XQuartzServerVisible
--                                      * value from when the server was not in rootless mode.
--                                      */
--
-+extern Bool XQuartzFullscreenVisible; /* Are the windows visible (predicated on !rootless) */
-+extern Bool XQuartzServerVisible;     /* Is the server visible ... TODO: Refactor to "active" */
- extern Bool XQuartzEnableKeyEquivalents;
- extern Bool XQuartzRootlessDefault;  /* Is our default mode rootless? */
- extern Bool XQuartzIsRootless;       /* Is our current mode rootless (or FS)? */
-@@ -144,7 +140,7 @@ void QuartzSetRootClip(BOOL enable);
- void QuartzSpaceChanged(uint32_t space_id);
- 
- void QuartzSetRootless(Bool state);
--void QuartzSetFullscreen(Bool state);
-+void QuartzShowFullscreen(Bool state);
- 
- int server_main(int argc, char **argv, char **envp);
- #endif
-diff --git xorg-server-1.8.99.906/hw/xquartz/quartzRandR.c xorg-server-1.8.99.906/hw/xquartz/quartzRandR.c
-index 7534267..586d299 100644
---- xorg-server-1.8.99.906/hw/xquartz/quartzRandR.c
-+++ xorg-server-1.8.99.906/hw/xquartz/quartzRandR.c
-@@ -62,7 +62,7 @@ static Bool ignore_next_fake_mode_update = FALSE;
- #define CALLBACK_ERROR -1
- 
- typedef int (*QuartzModeCallback)
--    (ScreenPtr, CGDirectDisplayID, QuartzModeInfoPtr, void *);
-+    (ScreenPtr, QuartzModeInfoPtr, void *);
- 
- #if MAC_OS_X_VERSION_MIN_REQUIRED < 1060
- 
-@@ -98,6 +98,7 @@ static void QuartzRandRGetModeInfo (CFDictionaryRef modeRef,
-     if (pMode->refresh == 0)
-         pMode->refresh = DEFAULT_REFRESH;
-     pMode->ref = NULL;
-+    pMode->pSize = NULL;
- }
- 
- static Bool QuartzRandRCopyCurrentModeInfo (CGDirectDisplayID screenId,
-@@ -112,14 +113,13 @@ static Bool QuartzRandRCopyCurrentModeInfo (CGDirectDisplayID screenId,
-     return TRUE;
- }
- 
--static Bool QuartzRandRSetMode (CGDirectDisplayID screenId,
-+static Bool QuartzRandRSetCGMode (CGDirectDisplayID screenId,
-                                 QuartzModeInfoPtr pMode) {
-     CFDictionaryRef modeRef = (CFDictionaryRef) pMode->ref;
-     return (CGDisplaySwitchToMode(screenId, modeRef) == kCGErrorSuccess);
- }
- 
- static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
--                                       CGDirectDisplayID screenId,
-                                        QuartzModeCallback callback,
-                                        void *data) {
-     CFDictionaryRef curModeRef, modeRef;
-@@ -129,8 +129,9 @@ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
-     int i;
-     BOOL retval = FALSE;
-     QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
-+    CGDirectDisplayID screenId = pQuartzScreen->displayIDs[0];
- 
--    switch(callback(pScreen, screenId, &pQuartzScreen->rootlessMode, data)) {
-+    switch(callback(pScreen, &pQuartzScreen->rootlessMode, data)) {
-         case CALLBACK_SUCCESS:
-             return TRUE;
-         case CALLBACK_ERROR:
-@@ -140,7 +141,7 @@ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
-             break;
-     }
- 
--    switch(callback(pScreen, screenId, &pQuartzScreen->fullscreenMode, data)) {
-+    switch(callback(pScreen, &pQuartzScreen->fullscreenMode, data)) {
-         case CALLBACK_SUCCESS:
-             return TRUE;
-         case CALLBACK_ERROR:
-@@ -172,7 +173,7 @@ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
- 
-         QuartzRandRGetModeInfo(modeRef, &modeInfo);
-         modeInfo.ref = modeRef;
--        cb = callback(pScreen, screenId, &modeInfo, data);
-+        cb = callback(pScreen, &modeInfo, data);
-         if (cb == CALLBACK_SUCCESS)
-             break;
-         if (cb == CALLBACK_ERROR) {
-@@ -193,6 +194,7 @@ static void QuartzRandRGetModeInfo (CGDisplayModeRef modeRef,
-     if (pMode->refresh == 0)
-         pMode->refresh = DEFAULT_REFRESH;
-     pMode->ref = NULL;
-+    pMode->pSize = NULL;
- }
- 
- static Bool QuartzRandRCopyCurrentModeInfo (CGDirectDisplayID screenId,
-@@ -206,7 +208,7 @@ static Bool QuartzRandRCopyCurrentModeInfo (CGDirectDisplayID screenId,
-     return TRUE;
- }
- 
--static Bool QuartzRandRSetMode (CGDirectDisplayID screenId,
-+static Bool QuartzRandRSetCGMode (CGDirectDisplayID screenId,
-                                 QuartzModeInfoPtr pMode) {
-     CGDisplayModeRef modeRef = (CGDisplayModeRef) pMode->ref;
-     if (!modeRef)
-@@ -216,7 +218,6 @@ static Bool QuartzRandRSetMode (CGDirectDisplayID screenId,
- }
- 
- static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
--                                       CGDirectDisplayID screenId,
-                                        QuartzModeCallback callback,
-                                        void *data) {
-     CGDisplayModeRef curModeRef, modeRef;
-@@ -228,8 +229,9 @@ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
-     Bool retval = TRUE;
- 
-     QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
-+    CGDirectDisplayID screenId = pQuartzScreen->displayIDs[0];
- 
--    switch(callback(pScreen, screenId, &pQuartzScreen->rootlessMode, data)) {
-+    switch(callback(pScreen, &pQuartzScreen->rootlessMode, data)) {
-         case CALLBACK_SUCCESS:
-             return TRUE;
-         case CALLBACK_ERROR:
-@@ -239,7 +241,7 @@ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
-             break;
-     }
- 
--    switch(callback(pScreen, screenId, &pQuartzScreen->fullscreenMode, data)) {
-+    switch(callback(pScreen, &pQuartzScreen->fullscreenMode, data)) {
-         case CALLBACK_SUCCESS:
-             return TRUE;
-         case CALLBACK_ERROR:
-@@ -277,7 +279,7 @@ static Bool QuartzRandREnumerateModes (ScreenPtr pScreen,
- 
-         QuartzRandRGetModeInfo(modeRef, &modeInfo);
-         modeInfo.ref = modeRef;
--        cb = callback(pScreen, screenId, &modeInfo, data);
-+        cb = callback(pScreen, &modeInfo, data);
-         if (cb == CALLBACK_SUCCESS)
-             break;
- 		if (cb == CALLBACK_ERROR) {
-@@ -306,14 +308,15 @@ static Bool QuartzRandRRegisterMode (ScreenPtr pScreen,
-                                      QuartzModeInfoPtr pMode) {
-     QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
-     Bool isCurrentMode = QuartzRandRModesEqual(&pQuartzScreen->currentMode, pMode);
--    RRScreenSizePtr pSize = RRRegisterSize(pScreen,
--        pMode->width, pMode->height, pScreen->mmWidth, pScreen->mmHeight);
--    if (pSize) {
-+
-+    /* TODO: DPI */
-+    pMode->pSize = RRRegisterSize(pScreen, pMode->width, pMode->height, pScreen->mmWidth, pScreen->mmHeight);
-+    if (pMode->pSize) {
-         //DEBUG_LOG("registering: %d x %d @ %d %s\n", (int)pMode->width, (int)pMode->height, (int)pMode->refresh, isCurrentMode ? "*" : "");
--        RRRegisterRate(pScreen, pSize, pMode->refresh);
-+        RRRegisterRate(pScreen, pMode->pSize, pMode->refresh);
- 
-         if (isCurrentMode)
--            RRSetCurrentConfig(pScreen, RR_Rotate_0, pMode->refresh, pSize);
-+            RRSetCurrentConfig(pScreen, RR_Rotate_0, pMode->refresh, pMode->pSize);
- 
-         return TRUE;
-     }
-@@ -321,7 +324,6 @@ static Bool QuartzRandRRegisterMode (ScreenPtr pScreen,
- }
- 
- static int QuartzRandRRegisterModeCallback (ScreenPtr pScreen,
--                                        CGDirectDisplayID screenId,
-                                         QuartzModeInfoPtr pMode,
-                                         void *data __unused) {
-     if(QuartzRandRRegisterMode(pScreen, pMode)) {
-@@ -331,40 +333,53 @@ static int QuartzRandRRegisterModeCallback (ScreenPtr pScreen,
-     }
- }
- 
-+static Bool QuartzRandRSetMode(ScreenPtr pScreen, QuartzModeInfoPtr pMode, BOOL doRegister) {
-+    QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
-+    CGDirectDisplayID screenId = pQuartzScreen->displayIDs[0];
-+
-+    if (pQuartzScreen->currentMode.ref && CFEqual(pMode->ref, pQuartzScreen->currentMode.ref)) {
-+        DEBUG_LOG("Requested RandR resolution matches current CG mode\n");
-+    } if (QuartzRandRSetCGMode(screenId, pMode)) {
-+        ignore_next_fake_mode_update = TRUE;
-+    } else {
-+        DEBUG_LOG("Error while requesting CG resolution change.\n");
-+        return FALSE;
-+    }
-+
-+    /* If the client requested the fake rootless mode, switch to rootless.
-+     * Otherwise, force fullscreen mode.
-+     */
-+    QuartzSetRootless(pMode->refresh == FAKE_REFRESH_ROOTLESS);
-+    if (pMode->refresh != FAKE_REFRESH_ROOTLESS) {
-+        QuartzShowFullscreen(TRUE);
-+    }
-+
-+    if(pQuartzScreen->currentMode.ref)
-+        CFRelease(pQuartzScreen->currentMode.ref);
-+    pQuartzScreen->currentMode = *pMode;
-+    CFRetain(pQuartzScreen->currentMode.ref);
-+    
-+    return TRUE;
-+}
-+
- static int QuartzRandRSetModeCallback (ScreenPtr pScreen,
--                                       CGDirectDisplayID screenId,
-                                        QuartzModeInfoPtr pMode,
-                                        void *data) {
-     QuartzModeInfoPtr pReqMode = (QuartzModeInfoPtr) data;
--    QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
- 	
-     if (!QuartzRandRModesEqual(pMode, pReqMode))
-         return CALLBACK_CONTINUE;  /* continue enumeration */
- 
-     DEBUG_LOG("Found a match for requested RandR resolution (%dx%d@%d).\n", (int)pMode->width, (int)pMode->height, (int)pMode->refresh);
- 
--    if (pQuartzScreen->currentMode.ref && CFEqual(pMode->ref, pQuartzScreen->currentMode.ref)) {
--        DEBUG_LOG("Requested RandR resolution matches current CG mode\n");
--        return CALLBACK_SUCCESS; /* We don't need to do anything in CG */
--    }
--
--    if (QuartzRandRSetMode(screenId, pMode)) {
--        if(pQuartzScreen->currentMode.ref)
--            CFRelease(pQuartzScreen->currentMode.ref);
--        pQuartzScreen->currentMode = *pMode;
--        CFRetain(pQuartzScreen->currentMode.ref);
--
--        ignore_next_fake_mode_update = TRUE;
-+    if(QuartzRandRSetMode(pScreen, pMode, FALSE))
-         return CALLBACK_SUCCESS;
--    } else {
--        DEBUG_LOG("Error while requesting CG resolution change.\n");
-+    else
-         return CALLBACK_ERROR;
--    }
- }
- 
- static Bool QuartzRandRGetInfo (ScreenPtr pScreen, Rotation *rotations) {
-     QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
--    CGDirectDisplayID screenId;
- 
-     *rotations = RR_Rotate_0;  /* TODO: support rotation */
- 
-@@ -381,8 +396,7 @@ static Bool QuartzRandRGetInfo (ScreenPtr pScreen, Rotation *rotations) {
-         return TRUE;
-     }
- 
--    screenId = pQuartzScreen->displayIDs[0];
--    return QuartzRandREnumerateModes(pScreen, screenId, QuartzRandRRegisterModeCallback, NULL);
-+    return QuartzRandREnumerateModes(pScreen, QuartzRandRRegisterModeCallback, NULL);
- }
- 
- static Bool QuartzRandRSetConfig (ScreenPtr           pScreen,
-@@ -390,39 +404,20 @@ static Bool QuartzRandRSetConfig (ScreenPtr           pScreen,
-                                   int                 rate,
-                                   RRScreenSizePtr     pSize) {
-     QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
--    CGDirectDisplayID screenId;
-     QuartzModeInfo reqMode;
- 
-     reqMode.width = pSize->width;
-     reqMode.height = pSize->height;
-     reqMode.refresh = rate;
- 
--    /* If the client requested the fake rootless mode, switch to rootless.
--     * Otherwise, force fullscreen mode.
--     * TODO: Refactor all this fullscreen/rootless crap as it is spaghetti
--     *       has redundancies.
--     */
--    QuartzSetRootless(reqMode.refresh == FAKE_REFRESH_ROOTLESS);
--    QuartzSetFullscreen(reqMode.refresh != FAKE_REFRESH_ROOTLESS);
--    if(reqMode.refresh != FAKE_REFRESH_ROOTLESS &&
--       reqMode.refresh != FAKE_REFRESH_FULLSCREEN)
--        QuartzShow();
--
-     if (pQuartzScreen->displayCount == 0)
-         return FALSE;
--    if (pQuartzScreen->displayCount > 1) {
--        /* RandR operations are not well-defined for an X11 screen spanning
--           multiple CG displays. Do not accept any configuations that differ
--           from the current configuration. */
--        return TRUE;
--    }
- 
-     /* Do not switch modes if requested mode is equal to current mode. */
-     if (QuartzRandRModesEqual(&reqMode, &pQuartzScreen->currentMode))
-         return TRUE;
-         
--    screenId = pQuartzScreen->displayIDs[0];
--    if (QuartzRandREnumerateModes(pScreen, screenId, QuartzRandRSetModeCallback, &reqMode)) {
-+    if (QuartzRandREnumerateModes(pScreen, QuartzRandRSetModeCallback, &reqMode)) {
-         return TRUE;
-     }
-     
-@@ -499,3 +494,57 @@ Bool QuartzRandRInit (ScreenPtr pScreen) {
-     pScrPriv->rrSetConfig = QuartzRandRSetConfig;
-     return TRUE;
- }
-+
-+void QuartzRandRSetFakeRootless (void) {
-+    int i;
-+    
-+    DEBUG_LOG("QuartzRandRSetFakeRootless called.\n");
-+    
-+    for (i=0; i < screenInfo.numScreens; i++) {
-+        ScreenPtr pScreen = screenInfo.screens[i];
-+        QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
-+
-+        QuartzRandRSetMode(pScreen, &pQuartzScreen->rootlessMode, TRUE);
-+    }
-+}
-+
-+void QuartzRandRSetFakeFullscreen (BOOL state) {
-+    int i;
-+
-+    DEBUG_LOG("QuartzRandRSetFakeFullscreen called.\n");
-+    
-+    for (i=0; i < screenInfo.numScreens; i++) {
-+        ScreenPtr pScreen = screenInfo.screens[i];
-+        QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
-+
-+        QuartzRandRSetMode(pScreen, &pQuartzScreen->fullscreenMode, TRUE);
-+    }
-+    
-+    QuartzShowFullscreen(state);
-+}
-+
-+/* Toggle fullscreen mode.  If "fake" fullscreen is the current mode,
-+ * this will just show/hide the X11 windows.  If we are in a RandR fullscreen
-+ * mode, this will toggles us to the default fake mode and hide windows if
-+ * it is fullscreen
-+ */
-+void QuartzRandRToggleFullscreen (void) {
-+    ScreenPtr pScreen = screenInfo.screens[0];
-+    QuartzScreenPtr pQuartzScreen = QUARTZ_PRIV(pScreen);
-+
-+    if (pQuartzScreen->currentMode.ref == NULL) {
-+        ErrorF("Ignoring QuartzRandRToggleFullscreen because don't have a current mode set.\n");
-+    } else if (pQuartzScreen->currentMode.refresh == FAKE_REFRESH_ROOTLESS) {
-+        ErrorF("Ignoring QuartzRandRToggleFullscreen because we are in rootless mode.\n");
-+    } else if (pQuartzScreen->currentMode.refresh == FAKE_REFRESH_FULLSCREEN) {
-+        /* Legacy fullscreen mode.  Hide/Show */
-+        QuartzShowFullscreen(!XQuartzFullscreenVisible);
-+    } else {
-+        /* RandR fullscreen mode.  Return to default mode and hide if it is fullscreen. */
-+        if(XQuartzRootlessDefault) {
-+            QuartzRandRSetFakeRootless();
-+        } else {
-+            QuartzRandRSetFakeFullscreen(FALSE);
-+        }
-+    }    
-+}
-diff --git xorg-server-1.8.99.906/hw/xquartz/quartzRandR.h xorg-server-1.8.99.906/hw/xquartz/quartzRandR.h
-index b2d4d09..fb0ce0c 100644
---- xorg-server-1.8.99.906/hw/xquartz/quartzRandR.h
-+++ xorg-server-1.8.99.906/hw/xquartz/quartzRandR.h
-@@ -31,9 +31,12 @@
- #ifndef _QUARTZRANDR_H_
- #define _QUARTZRANDR_H_
- 
-+#include "randrstr.h"
-+
- typedef struct {
-     size_t width, height;
-     int refresh;
-+    RRScreenSizePtr pSize;
-     void *ref; /* CGDisplayModeRef or CFDictionaryRef */
- } QuartzModeInfo, *QuartzModeInfoPtr;
- 
-@@ -57,4 +60,21 @@ void QuartzCopyDisplayIDs(ScreenPtr pScreen,
- Bool QuartzRandRUpdateFakeModes (BOOL force_update);
- Bool QuartzRandRInit (ScreenPtr pScreen);
- 
-+/* These two functions provide functionality expected by the legacy
-+ * mode switching.  They are equivalent to a client requesting one
-+ * of the modes corresponding to these "fake" modes.
-+ * QuartzRandRSetFakeFullscreen takes an argument which is used to determine
-+ * the visibility of the windows after the change.
-+ */
-+void QuartzRandRSetFakeRootless (void);
-+void QuartzRandRSetFakeFullscreen (BOOL state);
-+
-+
-+/* Toggle fullscreen mode.  If "fake" fullscreen is the current mode,
-+ * this will just show/hide the X11 windows.  If we are in a RandR fullscreen
-+ * mode, this will toggles us to the default fake mode and hide windows if
-+ * it is fullscreen
-+ */
-+void QuartzRandRToggleFullscreen (void);
-+
- #endif
--- 
-1.5.6.6
-

Deleted: trunk/dports/x11/xorg-server-devel/files/0013-Workaround-the-GC-clipping-problem-in-miPaintWindow.patch
===================================================================
--- trunk/dports/x11/xorg-server-devel/files/0013-Workaround-the-GC-clipping-problem-in-miPaintWindow.patch	2010-08-20 22:32:45 UTC (rev 70780)
+++ trunk/dports/x11/xorg-server-devel/files/0013-Workaround-the-GC-clipping-problem-in-miPaintWindow.patch	2010-08-21 06:35:57 UTC (rev 70781)
@@ -1,164 +0,0 @@
-From d29824e984ee4bca5f5761d2ebedb83e048604c3 Mon Sep 17 00:00:00 2001
-From: Jeremy Huddleston <jeremyhu at apple.com>
-Date: Fri, 30 Apr 2010 13:08:25 -0700
-Subject: [PATCH] Workaround the GC clipping problem in miPaintWindow and add some debugging output.
-
-Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
----
- mi/miexpose.c |  105 +++++++++++++++++++++++++++++++++++++++++++++++++++------
- 1 files changed, 94 insertions(+), 11 deletions(-)
-
-diff --git xorg-server-1.8.99.906/mi/miexpose.c xorg-server-1.8.99.906/mi/miexpose.c
-index 94258b8..4f25c23 100644
---- xorg-server-1.8.99.906/mi/miexpose.c
-+++ xorg-server-1.8.99.906/mi/miexpose.c
-@@ -521,6 +521,7 @@ void RootlessSetPixmapOfAncestors(WindowPtr pWin);
- void RootlessStartDrawing(WindowPtr pWin);
- void RootlessDamageRegion(WindowPtr pWin, RegionPtr prgn);
- Bool IsFramedWindow(WindowPtr pWin);
-+#include "../fb/fb.h"
- #endif 
- 
- void
-@@ -548,24 +549,37 @@ miPaintWindow(WindowPtr pWin, RegionPtr prgn, int what)
-     Bool	solid = TRUE;
-     DrawablePtr	drawable = &pWin->drawable;
- 
-+#ifdef XQUARTZ_CLIP_DEBUG
-+    ErrorF("START %d BS %d (pR = %ld)\n", what, pWin->backgroundState, ParentRelative);
-+    ErrorF("      Rgn: %d %d %d %d\n", prgn->extents.x1, prgn->extents.y1,
-+	                               prgn->extents.x2 - prgn->extents.x1,
-+	                               prgn->extents.y2 - prgn->extents.y1);
-+    ErrorF("      Win: %d %d (%d %d) %d %d\n", pWin->origin.x, pWin->origin.y,
-+	                                       pWin->winSize.extents.x1, pWin->winSize.extents.y1,
-+	                                       pWin->winSize.extents.x2 - pWin->winSize.extents.x1,
-+					       pWin->winSize.extents.y2 - pWin->winSize.extents.y1);
-+    ErrorF("     Draw: %d %d %d %d\n", pWin->drawable.x, pWin->drawable.y,
-+				       pWin->drawable.width, pWin->drawable.height);
-+#endif
-+
- #ifdef ROOTLESS
-     if(!drawable || drawable->type == UNDRAWABLE_WINDOW)
- 	return;
--
--    if(IsFramedWindow(pWin)) {
--        RootlessStartDrawing(pWin);
--        RootlessDamageRegion(pWin, prgn);
--    
--        if(pWin->backgroundState == ParentRelative) {
--            if((what == PW_BACKGROUND) || 
--               (what == PW_BORDER && !pWin->borderIsPixel))
--                RootlessSetPixmapOfAncestors(pWin);
--        }
--    }
- #endif
-     
-     if (what == PW_BACKGROUND)
-     {
-+#ifdef ROOTLESS
-+	if(IsFramedWindow(pWin)) {
-+	    RootlessStartDrawing(pWin);
-+	    RootlessDamageRegion(pWin, prgn);
-+
-+	    if(pWin->backgroundState == ParentRelative) {
-+		RootlessSetPixmapOfAncestors(pWin);
-+	    }
-+	}
-+#endif
-+
- 	while (pWin->backgroundState == ParentRelative)
- 	    pWin = pWin->parent;
- 
-@@ -587,6 +601,18 @@ miPaintWindow(WindowPtr pWin, RegionPtr prgn, int what)
-     {
- 	PixmapPtr   pixmap;
- 
-+#ifdef ROOTLESS
-+	if(IsFramedWindow(pWin)) {
-+	    RootlessStartDrawing(pWin);
-+	    RootlessDamageRegion(pWin, prgn);
-+	    
-+	    if(!pWin->borderIsPixel &&
-+		pWin->backgroundState == ParentRelative) {
-+		RootlessSetPixmapOfAncestors(pWin);
-+	    }
-+	}
-+#endif
-+
- 	tile_x_off = drawable->x;
- 	tile_y_off = drawable->y;
- 	
-@@ -595,6 +621,12 @@ miPaintWindow(WindowPtr pWin, RegionPtr prgn, int what)
- 	    return;
- 	pixmap = (*pScreen->GetWindowPixmap) ((WindowPtr) drawable);
- 	drawable = &pixmap->drawable;
-+
-+#ifdef XQUARTZ_CLIP_DEBUG
-+	ErrorF("     Draw: %d %d %d %d\n",
-+	       drawable->x, drawable->y, drawable->width, drawable->height);    
-+#endif
-+	
- #ifdef COMPOSITE
- 	draw_x_off = pixmap->screen_x;
- 	draw_y_off = pixmap->screen_y;
-@@ -657,6 +689,57 @@ miPaintWindow(WindowPtr pWin, RegionPtr prgn, int what)
-     ChangeGC (NullClient, pGC, gcmask, gcval);
-     ValidateGC (drawable, pGC);
- 
-+#ifdef XQUARTZ_CLIP_DEBUG
-+    ErrorF("       GC: %d %d %d %d\n",
-+	   pGC->pCompositeClip->extents.x1, pGC->pCompositeClip->extents.y1,
-+	   pGC->pCompositeClip->extents.x2 - pGC->pCompositeClip->extents.x1,
-+	   pGC->pCompositeClip->extents.y2 - pGC->pCompositeClip->extents.y1);
-+#endif
-+    
-+#ifdef XQUARTZ
-+    /* Looks like our clipping isn't set right for some reason:
-+     * http://xquartz.macosforge.org/trac/ticket/290
-+     */
-+    if(what == PW_BORDER) {
-+
-+#if 0
-+	if(solid) {
-+#if 1
-+	    fbFillRegionSolid(&pWin->drawable,
-+			      prgn,
-+			      0,
-+			      fbReplicatePixel(fill.pixel,
-+					       pWin->drawable.bitsPerPixel));
-+#else
-+	    fbFillRegionSolid(drawable,
-+			      prgn,
-+			      0,
-+			      fbReplicatePixel(fill.pixel,
-+					       drawable->bitsPerPixel));
-+#endif
-+	    return;
-+	}
-+#endif
-+    
-+	pGC->pCompositeClip->extents.x1 += prgn->extents.x1;
-+	pGC->pCompositeClip->extents.y1 += prgn->extents.y1;
-+	pGC->pCompositeClip->extents.x2 += prgn->extents.x1;
-+	pGC->pCompositeClip->extents.y2 += prgn->extents.y1;
-+	
-+	if(pGC->pCompositeClip->extents.x2 > drawable->pScreen->width)
-+	    pGC->pCompositeClip->extents.x2 = drawable->pScreen->width;
-+	if(pGC->pCompositeClip->extents.y2 > drawable->pScreen->height)
-+	    pGC->pCompositeClip->extents.y2 = drawable->pScreen->height;
-+    }
-+#endif
-+
-+#ifdef XQUARTZ_CLIP_DEBUG
-+    ErrorF("       GC: %d %d %d %d\n",
-+	   pGC->pCompositeClip->extents.x1, pGC->pCompositeClip->extents.y1,
-+	   pGC->pCompositeClip->extents.x2 - pGC->pCompositeClip->extents.x1,
-+	   pGC->pCompositeClip->extents.y2 - pGC->pCompositeClip->extents.y1);    
-+#endif
-+
-     numRects = RegionNumRects(prgn);
-     pbox = RegionRects(prgn);
-     for (i= numRects; --i >= 0; pbox++, prect++)
--- 
-1.5.6.6
-

Deleted: trunk/dports/x11/xorg-server-devel/files/0014-fb-Revert-fb-changes-that-broke-XQuartz.patch
===================================================================
--- trunk/dports/x11/xorg-server-devel/files/0014-fb-Revert-fb-changes-that-broke-XQuartz.patch	2010-08-20 22:32:45 UTC (rev 70780)
+++ trunk/dports/x11/xorg-server-devel/files/0014-fb-Revert-fb-changes-that-broke-XQuartz.patch	2010-08-21 06:35:57 UTC (rev 70781)
@@ -1,245 +0,0 @@
-From 58b269bf7443cb616ce12f4c193c8f3c5a6591e4 Mon Sep 17 00:00:00 2001
-From: Jeremy Huddleston <jeremyhu at apple.com>
-Date: Fri, 12 Feb 2010 19:48:52 -0800
-Subject: [PATCH] fb: Revert fb changes that broke XQuartz
-
-http://bugs.freedesktop.org/show_bug.cgi?id=26124
-
-Revert "Fix source pictures getting random transforms after 2d6a8f668342a5190cdf43b5."
-Revert "fb: Adjust transform or composite coordinates for pixman operations"
-
-http://bugs.freedesktop.org/26124
-
-This reverts commit a72c65e9176c51de95db2fdbf4c5d946a4911695.
-This reverts commit a6bd5d2e482a5aa84acb3d4932e2a166d8670ef1.
-
-Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
----
- fb/fb.h     |    7 +----
- fb/fbpict.c |   78 +++++++++++++++++++----------------------------------------
- fb/fbtrap.c |    6 +---
- 3 files changed, 29 insertions(+), 62 deletions(-)
-
-diff --git xorg-server-1.8.99.906/fb/fb.h xorg-server-1.8.99.906/fb/fb.h
-index a06f98b..3b9efea 100644
---- xorg-server-1.8.99.906/fb/fb.h
-+++ xorg-server-1.8.99.906/fb/fb.h
-@@ -2080,11 +2080,8 @@ fbFillRegionSolid (DrawablePtr	pDrawable,
- 		   FbBits	xor);
- 
- extern _X_EXPORT pixman_image_t *
--image_from_pict (PicturePtr	pict,
--		 Bool		has_clip,
--		 int		*xoff,
--		 int		*yoff);
--
-+image_from_pict (PicturePtr pict,
-+		 Bool       has_clip);
- extern _X_EXPORT void free_pixman_pict (PicturePtr, pixman_image_t *);
- 
- #endif /* _FB_H_ */
-diff --git xorg-server-1.8.99.906/fb/fbpict.c xorg-server-1.8.99.906/fb/fbpict.c
-index f7f1200..5467ee4 100644
---- xorg-server-1.8.99.906/fb/fbpict.c
-+++ xorg-server-1.8.99.906/fb/fbpict.c
-@@ -156,24 +156,19 @@ fbComposite (CARD8      op,
- 	     CARD16     height)
- {
-     pixman_image_t *src, *mask, *dest;
--    int src_xoff, src_yoff;
--    int msk_xoff, msk_yoff;
--    int dst_xoff, dst_yoff;
-     
-     miCompositeSourceValidate (pSrc, xSrc - xDst, ySrc - yDst, width, height);
-     if (pMask)
- 	miCompositeSourceValidate (pMask, xMask - xDst, yMask - yDst, width, height);
-     
--    src = image_from_pict (pSrc, FALSE, &src_xoff, &src_yoff);
--    mask = image_from_pict (pMask, FALSE, &msk_xoff, &msk_yoff);
--    dest = image_from_pict (pDst, TRUE, &dst_xoff, &dst_yoff);
-+    src = image_from_pict (pSrc, TRUE);
-+    mask = image_from_pict (pMask, TRUE);
-+    dest = image_from_pict (pDst, TRUE);
- 
-     if (src && dest && !(pMask && !mask))
-     {
- 	pixman_image_composite (op, src, mask, dest,
--				xSrc + src_xoff, ySrc + src_yoff,
--				xMask + msk_xoff, yMask + msk_yoff,
--				xDst + dst_xoff, yDst + dst_yoff,
-+				xSrc, ySrc, xMask, yMask, xDst, yDst,
- 				width, height);
-     }
- 
-@@ -271,22 +266,22 @@ create_conical_gradient_image (PictGradient *gradient)
- 
- static pixman_image_t *
- create_bits_picture (PicturePtr pict,
--		     Bool       has_clip,
--		     int	*xoff,
--		     int	*yoff)
-+		     Bool       has_clip)
- {
--    PixmapPtr pixmap;
-     FbBits *bits;
-     FbStride stride;
--    int bpp;
-+    int bpp, xoff, yoff;
-     pixman_image_t *image;
-     
--    fbGetDrawablePixmap (pict->pDrawable, pixmap, *xoff, *yoff);
--    fbGetPixmapBitsData(pixmap, bits, stride, bpp);
-+    fbGetDrawable (pict->pDrawable, bits, stride, bpp, xoff, yoff);
-+
-+    bits = (FbBits*)((CARD8*)bits +
-+		     (pict->pDrawable->y + yoff) * stride * sizeof(FbBits) +
-+		     (pict->pDrawable->x + xoff) * (bpp / 8));
- 
-     image = pixman_image_create_bits (
- 	pict->format,
--	pixmap->drawable.width, pixmap->drawable.height,
-+	pict->pDrawable->width, pict->pDrawable->height,
- 	(uint32_t *)bits, stride * sizeof (FbStride));
-     
-     
-@@ -312,55 +307,33 @@ create_bits_picture (PicturePtr pict,
- 	if (pict->clientClipType != CT_NONE)
- 	    pixman_image_set_has_client_clip (image, TRUE);
- 
--	if (*xoff || *yoff)
--	    pixman_region_translate (pict->pCompositeClip, *xoff, *yoff);
-+	pixman_region_translate (pict->pCompositeClip, - pict->pDrawable->x, - pict->pDrawable->y);
- 
- 	pixman_image_set_clip_region (image, pict->pCompositeClip);
- 
--	if (*xoff || *yoff)
--	    pixman_region_translate (pict->pCompositeClip, -*xoff, -*yoff);
-+	pixman_region_translate (pict->pCompositeClip, pict->pDrawable->x, pict->pDrawable->y);
-     }
-     
-     /* Indexed table */
-     if (pict->pFormat->index.devPrivate)
- 	pixman_image_set_indexed (image, pict->pFormat->index.devPrivate);
- 
--    /* Add in drawable origin to position within the image */
--    *xoff += pict->pDrawable->x;
--    *yoff += pict->pDrawable->y;
--
-     return image;
- }
- 
- static pixman_image_t *
--image_from_pict_internal (PicturePtr pict, Bool has_clip, int *xoff, int *yoff, Bool is_alpha_map);
-+image_from_pict_internal (PicturePtr pict, Bool has_clip, Bool is_alpha_map);
- 
- static void
--set_image_properties (pixman_image_t *image, PicturePtr pict, Bool has_clip, int *xoff, int *yoff, Bool is_alpha_map)
-+set_image_properties (pixman_image_t *image, PicturePtr pict, Bool is_alpha_map)
- {
-     pixman_repeat_t repeat;
-     pixman_filter_t filter;
-     
-     if (pict->transform)
-     {
--	/* For source images, adjust the transform to account
--	 * for the drawable offset within the pixman image,
--	 * then set the offset to 0 as it will be used
--	 * to compute positions within the transformed image.
--	 */
--	if (!has_clip) {
--	    struct pixman_transform	adjusted;
--
--	    adjusted = *pict->transform;
--	    pixman_transform_translate(&adjusted,
--				       NULL,
--				       pixman_int_to_fixed(*xoff),
--				       pixman_int_to_fixed(*yoff));
--	    pixman_image_set_transform (image, &adjusted);
--	    *xoff = 0;
--	    *yoff = 0;
--	} else
--	    pixman_image_set_transform (image, pict->transform);
-+	pixman_image_set_transform (
-+	    image, (pixman_transform_t *)pict->transform);
-     }
-     
-     switch (pict->repeatType)
-@@ -390,8 +363,7 @@ set_image_properties (pixman_image_t *image, PicturePtr pict, Bool has_clip, int
-      */
-     if (pict->alphaMap && !is_alpha_map)
-     {
--	int alpha_xoff, alpha_yoff;
--	pixman_image_t *alpha_map = image_from_pict_internal (pict->alphaMap, FALSE, &alpha_xoff, &alpha_yoff, TRUE);
-+	pixman_image_t *alpha_map = image_from_pict_internal (pict->alphaMap, TRUE, TRUE);
- 	
- 	pixman_image_set_alpha_map (
- 	    image, alpha_map, pict->alphaOrigin.x, pict->alphaOrigin.y);
-@@ -424,7 +396,8 @@ set_image_properties (pixman_image_t *image, PicturePtr pict, Bool has_clip, int
- }
- 
- static pixman_image_t *
--image_from_pict_internal (PicturePtr pict, Bool has_clip, int *xoff, int *yoff, Bool is_alpha_map)
-+image_from_pict_internal (PicturePtr pict,
-+		 Bool has_clip, Bool is_alpha_map)
- {
-     pixman_image_t *image = NULL;
- 
-@@ -433,7 +406,7 @@ image_from_pict_internal (PicturePtr pict, Bool has_clip, int *xoff, int *yoff,
- 
-     if (pict->pDrawable)
-     {
--	image = create_bits_picture (pict, has_clip, xoff, yoff);
-+	image = create_bits_picture (pict, has_clip);
-     }
-     else if (pict->pSourcePict)
-     {
-@@ -454,19 +427,18 @@ image_from_pict_internal (PicturePtr pict, Bool has_clip, int *xoff, int *yoff,
- 	    else if (sp->type == SourcePictTypeConical)
- 		image = create_conical_gradient_image (gradient);
- 	}
--	*xoff = *yoff = 0;
-     }
-     
-     if (image)
--	set_image_properties (image, pict, has_clip, xoff, yoff, is_alpha_map);
-+	set_image_properties (image, pict, is_alpha_map);
-     
-     return image;
- }
- 
- pixman_image_t *
--image_from_pict (PicturePtr pict, Bool has_clip, int *xoff, int *yoff)
-+image_from_pict (PicturePtr pict, Bool has_clip)
- {
--    return image_from_pict_internal (pict, has_clip, xoff, yoff, FALSE);
-+    return image_from_pict_internal (pict, has_clip, FALSE);
- }
- 
- void
-diff --git xorg-server-1.8.99.906/fb/fbtrap.c xorg-server-1.8.99.906/fb/fbtrap.c
-index 9f5c39f..9c55236 100644
---- xorg-server-1.8.99.906/fb/fbtrap.c
-+++ xorg-server-1.8.99.906/fb/fbtrap.c
-@@ -38,8 +38,7 @@ fbAddTraps (PicturePtr	pPicture,
- 	    int		ntrap,
- 	    xTrap	*traps)
- {
--    int image_xoff, image_yoff;
--    pixman_image_t *image = image_from_pict (pPicture, FALSE, &image_xoff, &image_yoff);
-+    pixman_image_t *image = image_from_pict (pPicture, FALSE);
- 
-     if (!image)
- 	return;
-@@ -55,8 +54,7 @@ fbRasterizeTrapezoid (PicturePtr    pPicture,
- 		      int	    x_off,
- 		      int	    y_off)
- {
--    int	mask_xoff, mask_yoff;
--    pixman_image_t *image = image_from_pict (pPicture, FALSE, &mask_xoff, &mask_yoff);
-+    pixman_image_t *image = image_from_pict (pPicture, FALSE);
- 
-     if (!image)
- 	return;
--- 
-1.5.6.6
-
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20100820/ce739099/attachment-0001.html>


More information about the macports-changes mailing list