diff options
Diffstat (limited to 'doc/nx-X11_vs_XOrg69_patches/randr.NX.diff')
-rw-r--r-- | doc/nx-X11_vs_XOrg69_patches/randr.NX.diff | 2704 |
1 files changed, 0 insertions, 2704 deletions
diff --git a/doc/nx-X11_vs_XOrg69_patches/randr.NX.diff b/doc/nx-X11_vs_XOrg69_patches/randr.NX.diff deleted file mode 100644 index 835577944..000000000 --- a/doc/nx-X11_vs_XOrg69_patches/randr.NX.diff +++ /dev/null @@ -1,2704 +0,0 @@ -diff -u ./nx-X11/programs/Xserver/randr.X.original/Imakefile ./nx-X11/programs/Xserver/randr/Imakefile ---- ./nx-X11/programs/Xserver/randr.X.original/Imakefile 2015-02-13 14:03:44.792440567 +0100 -+++ ./nx-X11/programs/Xserver/randr/Imakefile 2015-02-10 19:13:13.636692176 +0100 -@@ -1,15 +1,33 @@ -+/**************************************************************************/ -+/* */ -+/* Copyright (c) 2001, 2011 NoMachine, http://www.nomachine.com/. */ -+/* */ -+/* NX-X11, NX protocol compression and NX extensions to this software */ -+/* are copyright of NoMachine. Redistribution and use of the present */ -+/* software is allowed according to terms specified in the file LICENSE */ -+/* which comes in the source distribution. */ -+/* */ -+/* Check http://www.nomachine.com/licensing.html for applicability. */ -+/* */ -+/* NX and NoMachine are trademarks of Medialogic S.p.A. */ -+/* */ -+/* All rights reserved. */ -+/* */ -+/**************************************************************************/ - XCOMM $XFree86: xc/programs/Xserver/randr/Imakefile,v 1.1 2001/05/23 03:29:44 keithp Exp $ - #include <Server.tmpl> - -- SRCS = randr.c mirandr.c -+ SRCS = mirandr.c randr.c rrcrtc.c rrdispatch.c rrinfo.c rrmode.c rroutput.c rrpointer.c rrproperty.c rrscreen.c rrsdispatch.c rrxinerama.c - -- OBJS = randr.o mirandr.o -+ OBJS = mirandr.o randr.o rrcrtc.o rrdispatch.o rrinfo.o rrmode.o rroutput.o rrpointer.o rrproperty.o rrscreen.o rrsdispatch.o rrxinerama.o - - INCLUDES = -I../include -I../mi -I../../../include/fonts \ - -I../fb -I../hw/kdrive -I$(EXTINCSRC) -I$(XINCLUDESRC) \ - -I$(FONTINCSRC) -I../render - LINTLIBS = ../dix/llib-ldix.ln ../os/llib-los.ln - -+ DEFINES = -DNXAGENT_SERVER -+ - NormalLibraryTarget(randr,$(OBJS)) - NormalLibraryObjectRule() - LintLibraryTarget(randr,$(SRCS)) -Only in ./nx-X11/programs/Xserver/randr: Imakefile.NX.original -Only in ./nx-X11/programs/Xserver/randr: Imakefile.X.original -Only in ./nx-X11/programs/Xserver/randr: Makefile.am -Only in ./nx-X11/programs/Xserver/randr: Makefile.in -diff -u ./nx-X11/programs/Xserver/randr.X.original/mirandr.c ./nx-X11/programs/Xserver/randr/mirandr.c ---- ./nx-X11/programs/Xserver/randr.X.original/mirandr.c 2015-02-13 14:03:44.792440567 +0100 -+++ ./nx-X11/programs/Xserver/randr/mirandr.c 2015-02-10 19:13:13.616692925 +0100 -@@ -1,76 +1,42 @@ - /* -- * $XFree86: xc/programs/Xserver/randr/mirandr.c,v 1.5 2001/06/04 09:45:40 keithp Exp $ -- * -- * Copyright © 2000, Compaq Computer Corporation, -- * Copyright © 2002, Hewlett Packard, Inc. -+ * Copyright © 2000 Compaq Computer Corporation -+ * Copyright © 2002 Hewlett-Packard Company -+ * Copyright © 2006 Intel Corporation - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that -- * the above copyright notice appear in all copies and that both that -- * copyright notice and this permission notice appear in supporting -- * documentation, and that the name of Compaq or HP not be used in advertising -- * or publicity pertaining to distribution of the software without specific, -- * written prior permission. HP makes no representations about the -- * suitability of this software for any purpose. It is provided "as is" -- * without express or implied warranty. -+ * the above copyright notice appear in all copies and that both that copyright -+ * notice and this permission notice appear in supporting documentation, and -+ * that the name of the copyright holders not be used in advertising or -+ * publicity pertaining to distribution of the software without specific, -+ * written prior permission. The copyright holders make no representations -+ * about the suitability of this software for any purpose. It is provided "as -+ * is" without express or implied warranty. - * -- * HP DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL -- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL HP -- * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -+ * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR -+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE -+ * OF THIS SOFTWARE. - * -- * Author: Jim Gettys, HP Labs, Hewlett-Packard, Inc. -+ * Author: Jim Gettys, Hewlett-Packard Company, Inc. -+ * Keith Packard, Intel Corporation - */ - -- - #ifdef HAVE_DIX_CONFIG_H - #include <dix-config.h> - #endif - - #include "scrnintstr.h" - #include "mi.h" --#include <X11/extensions/randr.h> - #include "randrstr.h" - #include <stdio.h> - --/* -- * This function assumes that only a single depth can be -- * displayed at a time, but that all visuals of that depth -- * can be displayed simultaneously. It further assumes that -- * only a single size is available. Hardware providing -- * additional capabilties should use different code. -- * XXX what to do here.... -- */ -- - Bool - miRRGetInfo (ScreenPtr pScreen, Rotation *rotations) - { -- int i; -- Bool setConfig = FALSE; -- -- *rotations = RR_Rotate_0; -- for (i = 0; i < pScreen->numDepths; i++) -- { -- if (pScreen->allowedDepths[i].numVids) -- { -- RRScreenSizePtr pSize; -- -- pSize = RRRegisterSize (pScreen, -- pScreen->width, -- pScreen->height, -- pScreen->mmWidth, -- pScreen->mmHeight); -- if (!pSize) -- return FALSE; -- if (!setConfig) -- { -- RRSetCurrentConfig (pScreen, RR_Rotate_0, 0, pSize); -- setConfig = TRUE; -- } -- } -- } - return TRUE; - } - -@@ -79,24 +45,110 @@ - * different here - */ - Bool --miRRSetConfig (ScreenPtr pScreen, -- Rotation rotation, -- int rate, -- RRScreenSizePtr pSize) -+miRRCrtcSet (ScreenPtr pScreen, -+ RRCrtcPtr crtc, -+ RRModePtr mode, -+ int x, -+ int y, -+ Rotation rotation, -+ int numOutput, -+ RROutputPtr *outputs) - { - return TRUE; - } - -+static Bool -+miRRCrtcSetGamma (ScreenPtr pScreen, -+ RRCrtcPtr crtc) -+{ -+ return TRUE; -+} -+ -+Bool -+miRROutputSetProperty (ScreenPtr pScreen, -+ RROutputPtr output, -+ Atom property, -+ RRPropertyValuePtr value) -+{ -+ return TRUE; -+} -+ -+Bool -+miRROutputValidateMode (ScreenPtr pScreen, -+ RROutputPtr output, -+ RRModePtr mode) -+{ -+ return FALSE; -+} -+ -+void -+miRRModeDestroy (ScreenPtr pScreen, -+ RRModePtr mode) -+{ -+} -+ -+/* -+ * This function assumes that only a single depth can be -+ * displayed at a time, but that all visuals of that depth -+ * can be displayed simultaneously. It further assumes that -+ * only a single size is available. Hardware providing -+ * additional capabilties should use different code. -+ * XXX what to do here.... -+ */ - - Bool - miRandRInit (ScreenPtr pScreen) - { -- rrScrPrivPtr rp; -+ rrScrPrivPtr pScrPriv; -+#if RANDR_12_INTERFACE -+ RRModePtr mode; -+ RRCrtcPtr crtc; -+ RROutputPtr output; -+ xRRModeInfo modeInfo; -+ char name[64]; -+#endif - - if (!RRScreenInit (pScreen)) - return FALSE; -- rp = rrGetScrPriv(pScreen); -- rp->rrGetInfo = miRRGetInfo; -- rp->rrSetConfig = miRRSetConfig; -+ pScrPriv = rrGetScrPriv(pScreen); -+ pScrPriv->rrGetInfo = miRRGetInfo; -+#if RANDR_12_INTERFACE -+ pScrPriv->rrCrtcSet = miRRCrtcSet; -+ pScrPriv->rrCrtcSetGamma = miRRCrtcSetGamma; -+ pScrPriv->rrOutputSetProperty = miRROutputSetProperty; -+ pScrPriv->rrOutputValidateMode = miRROutputValidateMode; -+ pScrPriv->rrModeDestroy = miRRModeDestroy; -+ -+ RRScreenSetSizeRange (pScreen, -+ pScreen->width, pScreen->height, -+ pScreen->width, pScreen->height); -+ -+ sprintf (name, "%dx%d", pScreen->width, pScreen->height); -+ memset (&modeInfo, '\0', sizeof (modeInfo)); -+ modeInfo.width = pScreen->width; -+ modeInfo.height = pScreen->height; -+ modeInfo.nameLength = strlen (name); -+ -+ mode = RRModeGet (&modeInfo, name); -+ if (!mode) -+ return FALSE; -+ -+ crtc = RRCrtcCreate (pScreen, NULL); -+ if (!crtc) -+ return FALSE; -+ -+ output = RROutputCreate (pScreen, "screen", 6, NULL); -+ if (!output) -+ return FALSE; -+ if (!RROutputSetClones (output, NULL, 0)) -+ return FALSE; -+ if (!RROutputSetModes (output, &mode, 1, 0)) -+ return FALSE; -+ if (!RROutputSetCrtcs (output, &crtc, 1)) -+ return FALSE; -+ if (!RROutputSetConnection (output, RR_Connected)) -+ return FALSE; -+ RRCrtcNotify (crtc, mode, 0, 0, RR_Rotate_0, 1, &output); -+#endif - return TRUE; - } -Only in ./nx-X11/programs/Xserver/randr: panoramiXproto.h -Only in ./nx-X11/programs/Xserver/randr: panoramiXproto.h.NX.original -Only in ./nx-X11/programs/Xserver/randr: panoramiXproto.h.X.original -diff -u ./nx-X11/programs/Xserver/randr.X.original/randr.c ./nx-X11/programs/Xserver/randr/randr.c ---- ./nx-X11/programs/Xserver/randr.X.original/randr.c 2015-02-13 14:03:44.792440567 +0100 -+++ ./nx-X11/programs/Xserver/randr/randr.c 2015-02-10 19:13:13.616692925 +0100 -@@ -1,29 +1,46 @@ - /* -- * $XFree86: xc/programs/Xserver/randr/randr.c,v 1.21tsi Exp $ -- * -- * Copyright © 2000, Compaq Computer Corporation, -- * Copyright © 2002, Hewlett Packard, Inc. -+ * Copyright © 2000 Compaq Computer Corporation -+ * Copyright © 2002 Hewlett-Packard Company -+ * Copyright © 2006 Intel Corporation - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that -- * the above copyright notice appear in all copies and that both that -- * copyright notice and this permission notice appear in supporting -- * documentation, and that the name of Compaq or HP not be used in advertising -- * or publicity pertaining to distribution of the software without specific, -- * written prior permission. HP makes no representations about the -- * suitability of this software for any purpose. It is provided "as is" -- * without express or implied warranty. -+ * the above copyright notice appear in all copies and that both that copyright -+ * notice and this permission notice appear in supporting documentation, and -+ * that the name of the copyright holders not be used in advertising or -+ * publicity pertaining to distribution of the software without specific, -+ * written prior permission. The copyright holders make no representations -+ * about the suitability of this software for any purpose. It is provided "as -+ * is" without express or implied warranty. - * -- * HP DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL -- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL HP -- * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -+ * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR -+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE -+ * OF THIS SOFTWARE. - * -- * Author: Jim Gettys, HP Labs, Hewlett-Packard, Inc. -+ * Author: Jim Gettys, Hewlett-Packard Company, Inc. -+ * Keith Packard, Intel Corporation - */ - -+/**************************************************************************/ -+/* */ -+/* Copyright (c) 2001, 2011 NoMachine, http://www.nomachine.com/. */ -+/* */ -+/* NX-X11, NX protocol compression and NX extensions to this software */ -+/* are copyright of NoMachine. Redistribution and use of the present */ -+/* software is allowed according to terms specified in the file LICENSE */ -+/* which comes in the source distribution. */ -+/* */ -+/* Check http://www.nomachine.com/licensing.html for applicability. */ -+/* */ -+/* NX and NoMachine are trademarks of Medialogic S.p.A. */ -+/* */ -+/* All rights reserved. */ -+/* */ -+/**************************************************************************/ - - #define NEED_REPLIES - #define NEED_EVENTS -@@ -31,28 +48,7 @@ - #include <dix-config.h> - #endif - --#include <X11/X.h> --#include <X11/Xproto.h> --#include "misc.h" --#include "os.h" --#include "dixstruct.h" --#include "resource.h" --#include "scrnintstr.h" --#include "windowstr.h" --#include "pixmapstr.h" --#include "extnsionst.h" --#include "servermd.h" --#include <X11/extensions/randr.h> --#include <X11/extensions/randrproto.h> - #include "randrstr.h" --#ifdef RENDER --#include <X11/extensions/render.h> /* we share subpixel order information */ --#include "picturestr.h" --#endif --#include <X11/Xfuncproto.h> --#ifdef EXTMODULE --#include "xf86_ansic.h" --#endif - - /* From render.h */ - #ifndef SubPixelUnknown -@@ -60,13 +56,7 @@ - #endif - - #define RR_VALIDATE --int RRGeneration; --int RRNScreens; -- --static int ProcRRQueryVersion (ClientPtr pClient); --static int ProcRRDispatch (ClientPtr pClient); --static int SProcRRDispatch (ClientPtr pClient); --static int SProcRRQueryVersion (ClientPtr pClient); -+static int RRNScreens; - - #define wrap(priv,real,mem,func) {\ - priv->mem = real->mem; \ -@@ -77,56 +67,20 @@ - real->mem = priv->mem; \ - } - --#if 0 --static CARD8 RRReqCode; --static int RRErrBase; --#endif --static int RREventBase; --static RESTYPE ClientType, EventType; /* resource types for event masks */ --static int RRClientPrivateIndex; -- --typedef struct _RRTimes { -- TimeStamp setTime; -- TimeStamp configTime; --} RRTimesRec, *RRTimesPtr; -- --typedef struct _RRClient { -- int major_version; -- int minor_version; --/* RRTimesRec times[0]; */ --} RRClientRec, *RRClientPtr; -- --/* -- * each window has a list of clients requesting -- * RRNotify events. Each client has a resource -- * for each window it selects RRNotify input for, -- * this resource is used to delete the RRNotifyRec -- * entry from the per-window queue. -- */ -- --typedef struct _RREvent *RREventPtr; -- --typedef struct _RREvent { -- RREventPtr next; -- ClientPtr client; -- WindowPtr window; -- XID clientResource; -- int mask; --} RREventRec; -+static int ProcRRDispatch (ClientPtr pClient); -+static int SProcRRDispatch (ClientPtr pClient); - -+int RREventBase; -+int RRErrorBase; -+RESTYPE RRClientType, RREventType; /* resource types for event masks */ -+ -+#ifndef NXAGENT_SERVER -+DevPrivateKey RRClientPrivateKey = &RRClientPrivateKey; -+DevPrivateKey rrPrivKey = &rrPrivKey; -+#else -+int RRClientPrivateIndex; - int rrPrivIndex = -1; -- --#define GetRRClient(pClient) ((RRClientPtr) (pClient)->devPrivates[RRClientPrivateIndex].ptr) --#define rrClientPriv(pClient) RRClientPtr pRRClient = GetRRClient(pClient) -- --static Bool --RRClientKnowsRates (ClientPtr pClient) --{ -- rrClientPriv(pClient); -- -- return (pRRClient->major_version > 1 || -- (pRRClient->major_version == 1 && pRRClient->minor_version >= 1)); --} -+#endif - - static void - RRClientCallback (CallbackListPtr *list, -@@ -163,10 +117,14 @@ - RRCloseScreen (int i, ScreenPtr pScreen) - { - rrScrPriv(pScreen); -+ int j; - - unwrap (pScrPriv, pScreen, CloseScreen); -- if (pScrPriv->pSizes) -- xfree (pScrPriv->pSizes); -+ for (j = pScrPriv->numCrtcs - 1; j >= 0; j--) -+ RRCrtcDestroy (pScrPriv->crtcs[j]); -+ for (j = pScrPriv->numOutputs - 1; j >= 0; j--) -+ RROutputDestroy (pScrPriv->outputs[j]); -+ - xfree (pScrPriv); - RRNScreens -= 1; /* ok, one fewer screen with RandR running */ - return (*pScreen->CloseScreen) (i, pScreen); -@@ -191,18 +149,105 @@ - cpswaps(from->subpixelOrder, to->subpixelOrder); - } - --Bool RRScreenInit(ScreenPtr pScreen) -+static void -+SRRCrtcChangeNotifyEvent(xRRCrtcChangeNotifyEvent *from, -+ xRRCrtcChangeNotifyEvent *to) - { -- rrScrPrivPtr pScrPriv; -+ to->type = from->type; -+ to->subCode = from->subCode; -+ cpswaps(from->sequenceNumber, to->sequenceNumber); -+ cpswapl(from->timestamp, to->timestamp); -+ cpswapl(from->window, to->window); -+ cpswapl(from->crtc, to->crtc); -+ cpswapl(from->mode, to->mode); -+ cpswapl(from->window, to->window); -+ cpswaps(from->rotation, to->rotation); -+ cpswaps(from->x, to->x); -+ cpswaps(from->y, to->y); -+ cpswaps(from->width, to->width); -+ cpswaps(from->height, to->height); -+} -+ -+static void -+SRROutputChangeNotifyEvent(xRROutputChangeNotifyEvent *from, -+ xRROutputChangeNotifyEvent *to) -+{ -+ to->type = from->type; -+ to->subCode = from->subCode; -+ cpswaps(from->sequenceNumber, to->sequenceNumber); -+ cpswapl(from->timestamp, to->timestamp); -+ cpswapl(from->configTimestamp, to->configTimestamp); -+ cpswapl(from->window, to->window); -+ cpswapl(from->output, to->output); -+ cpswapl(from->crtc, to->crtc); -+ cpswapl(from->mode, to->mode); -+ cpswaps(from->rotation, to->rotation); -+} - -+static void -+SRROutputPropertyNotifyEvent(xRROutputPropertyNotifyEvent *from, -+ xRROutputPropertyNotifyEvent *to) -+{ -+ to->type = from->type; -+ to->subCode = from->subCode; -+ cpswaps(from->sequenceNumber, to->sequenceNumber); -+ cpswapl(from->window, to->window); -+ cpswapl(from->output, to->output); -+ cpswapl(from->atom, to->atom); -+ cpswapl(from->timestamp, to->timestamp); -+} -+ -+static void -+SRRNotifyEvent (xEvent *from, -+ xEvent *to) -+{ -+ switch (from->u.u.detail) { -+ case RRNotify_CrtcChange: -+ SRRCrtcChangeNotifyEvent ((xRRCrtcChangeNotifyEvent *) from, -+ (xRRCrtcChangeNotifyEvent *) to); -+ break; -+ case RRNotify_OutputChange: -+ SRROutputChangeNotifyEvent ((xRROutputChangeNotifyEvent *) from, -+ (xRROutputChangeNotifyEvent *) to); -+ break; -+ case RRNotify_OutputProperty: -+ SRROutputPropertyNotifyEvent ((xRROutputPropertyNotifyEvent *) from, -+ (xRROutputPropertyNotifyEvent *) to); -+ break; -+ default: -+ break; -+ } -+} -+ -+static int RRGeneration; -+ -+Bool RRInit (void) -+{ - if (RRGeneration != serverGeneration) - { -+ #ifdef NXAGENT_SERVER - if ((rrPrivIndex = AllocateScreenPrivateIndex()) < 0) - return FALSE; -+ #endif -+ if (!RRModeInit ()) -+ return FALSE; -+ if (!RRCrtcInit ()) -+ return FALSE; -+ if (!RROutputInit ()) -+ return FALSE; - RRGeneration = serverGeneration; - } -+ return TRUE; -+} -+ -+Bool RRScreenInit(ScreenPtr pScreen) -+{ -+ rrScrPrivPtr pScrPriv; -+ -+ if (!RRInit ()) -+ return FALSE; - -- pScrPriv = (rrScrPrivPtr) xalloc (sizeof (rrScrPrivRec)); -+ pScrPriv = (rrScrPrivPtr) calloc (1, sizeof (rrScrPrivRec)); - if (!pScrPriv) - return FALSE; - -@@ -211,8 +256,31 @@ - /* - * Calling function best set these function vectors - */ -- pScrPriv->rrSetConfig = 0; - pScrPriv->rrGetInfo = 0; -+ pScrPriv->maxWidth = pScrPriv->minWidth = pScreen->width; -+ pScrPriv->maxHeight = pScrPriv->minHeight = pScreen->height; -+ -+ pScrPriv->width = pScreen->width; -+ pScrPriv->height = pScreen->height; -+ pScrPriv->mmWidth = pScreen->mmWidth; -+ pScrPriv->mmHeight = pScreen->mmHeight; -+#if RANDR_12_INTERFACE -+ pScrPriv->rrScreenSetSize = NULL; -+ pScrPriv->rrCrtcSet = NULL; -+ pScrPriv->rrCrtcSetGamma = NULL; -+#endif -+#if RANDR_10_INTERFACE -+ pScrPriv->rrSetConfig = 0; -+ pScrPriv->rotations = RR_Rotate_0; -+ pScrPriv->reqWidth = pScreen->width; -+ pScrPriv->reqHeight = pScreen->height; -+ pScrPriv->nSizes = 0; -+ pScrPriv->pSizes = NULL; -+ pScrPriv->rotation = RR_Rotate_0; -+ pScrPriv->rate = 0; -+ pScrPriv->size = 0; -+#endif -+ - /* - * This value doesn't really matter -- any client must call - * GetScreenInfo before reading it which will automatically update -@@ -223,14 +291,10 @@ - - wrap (pScrPriv, pScreen, CloseScreen, RRCloseScreen); - -- pScrPriv->rotations = RR_Rotate_0; -- -- pScrPriv->nSizes = 0; -- pScrPriv->nSizesInUse = 0; -- pScrPriv->pSizes = 0; -- -- pScrPriv->rotation = RR_Rotate_0; -- pScrPriv->size = -1; -+ pScrPriv->numOutputs = 0; -+ pScrPriv->outputs = NULL; -+ pScrPriv->numCrtcs = 0; -+ pScrPriv->crtcs = NULL; - - RRNScreens += 1; /* keep count of screens that implement randr */ - return TRUE; -@@ -246,7 +310,7 @@ - - pRREvent = (RREventPtr) data; - pWin = pRREvent->window; -- pHead = (RREventPtr *) LookupIDByType(pWin->drawable.id, EventType); -+ pHead = (RREventPtr *) LookupIDByType(pWin->drawable.id, RREventType); - if (pHead) { - pPrev = 0; - for (pCur = *pHead; pCur && pCur != pRREvent; pCur=pCur->next) -@@ -272,7 +336,7 @@ - pHead = (RREventPtr *) data; - for (pCur = *pHead; pCur; pCur = pNext) { - pNext = pCur->next; -- FreeResource (pCur->clientResource, ClientType); -+ FreeResource (pCur->clientResource, RRClientType); - xfree ((pointer) pCur); - } - xfree ((pointer) pHead); -@@ -286,1034 +350,172 @@ - - if (RRNScreens == 0) return; - -+ #ifndef NXAGENT_SERVER -+ if (!dixRequestPrivate(RRClientPrivateKey, -+ sizeof (RRClientRec) + -+ screenInfo.numScreens * sizeof (RRTimesRec))) -+ return; -+ #else - RRClientPrivateIndex = AllocateClientPrivateIndex (); - if (!AllocateClientPrivate (RRClientPrivateIndex, - sizeof (RRClientRec) + - screenInfo.numScreens * sizeof (RRTimesRec))) - return; -+ #endif - if (!AddCallback (&ClientStateCallback, RRClientCallback, 0)) - return; - -- ClientType = CreateNewResourceType(RRFreeClient); -- if (!ClientType) -+ RRClientType = CreateNewResourceType(RRFreeClient); -+ if (!RRClientType) - return; -- EventType = CreateNewResourceType(RRFreeEvents); -- if (!EventType) -+ RREventType = CreateNewResourceType(RRFreeEvents); -+ if (!RREventType) - return; - extEntry = AddExtension (RANDR_NAME, RRNumberEvents, RRNumberErrors, - ProcRRDispatch, SProcRRDispatch, - RRResetProc, StandardMinorOpcode); - if (!extEntry) - return; --#if 0 -- RRReqCode = (CARD8) extEntry->base; -- RRErrBase = extEntry->errorBase; --#endif -+ RRErrorBase = extEntry->errorBase; - RREventBase = extEntry->eventBase; - EventSwapVector[RREventBase + RRScreenChangeNotify] = (EventSwapPtr) -- SRRScreenChangeNotifyEvent; -- -- return; -+ SRRScreenChangeNotifyEvent; -+ EventSwapVector[RREventBase + RRNotify] = (EventSwapPtr) -+ SRRNotifyEvent; -+#ifdef PANORAMIX -+ RRXineramaExtensionInit(); -+#endif - } -- -+ - static int - TellChanged (WindowPtr pWin, pointer value) - { - RREventPtr *pHead, pRREvent; - ClientPtr client; -- xRRScreenChangeNotifyEvent se; - ScreenPtr pScreen = pWin->drawable.pScreen; - rrScrPriv(pScreen); -- RRScreenSizePtr pSize; -- WindowPtr pRoot = WindowTable[pScreen->myNum]; -+ int i; - -- pHead = (RREventPtr *) LookupIDByType (pWin->drawable.id, EventType); -+ pHead = (RREventPtr *) LookupIDByType (pWin->drawable.id, RREventType); - if (!pHead) - return WT_WALKCHILDREN; - -- se.type = RRScreenChangeNotify + RREventBase; -- se.rotation = (CARD8) pScrPriv->rotation; -- se.timestamp = pScrPriv->lastSetTime.milliseconds; -- se.configTimestamp = pScrPriv->lastConfigTime.milliseconds; -- se.root = pRoot->drawable.id; -- se.window = pWin->drawable.id; --#ifdef RENDER -- se.subpixelOrder = PictureGetSubpixelOrder (pScreen); --#else -- se.subpixelOrder = SubPixelUnknown; --#endif -- if (pScrPriv->size >= 0) -- { -- pSize = &pScrPriv->pSizes[pScrPriv->size]; -- se.sizeID = pSize->id; -- se.widthInPixels = pSize->width; -- se.heightInPixels = pSize->height; -- se.widthInMillimeters = pSize->mmWidth; -- se.heightInMillimeters = pSize->mmHeight; -- } -- else -- { -- /* -- * This "shouldn't happen", but a broken DDX can -- * forget to set the current configuration on GetInfo -- */ -- se.sizeID = 0xffff; -- se.widthInPixels = 0; -- se.heightInPixels = 0; -- se.widthInMillimeters = 0; -- se.heightInMillimeters = 0; -- } - for (pRREvent = *pHead; pRREvent; pRREvent = pRREvent->next) - { - client = pRREvent->client; - if (client == serverClient || client->clientGone) - continue; -- se.sequenceNumber = client->sequence; -- if(pRREvent->mask & RRScreenChangeNotifyMask) -- WriteEventsToClient (client, 1, (xEvent *) &se); -- } -- return WT_WALKCHILDREN; --} - --static Bool --RRGetInfo (ScreenPtr pScreen) --{ -- rrScrPriv (pScreen); -- int i, j, k, l; -- Bool changed; -- Rotation rotations; -- RRScreenSizePtr pSize; -- RRScreenRatePtr pRate; -- -- for (i = 0; i < pScrPriv->nSizes; i++) -- { -- pSize = &pScrPriv->pSizes[i]; -- pSize->oldReferenced = pSize->referenced; -- pSize->referenced = FALSE; -- for (k = 0; k < pSize->nRates; k++) -+ if (pRREvent->mask & RRScreenChangeNotifyMask) -+ RRDeliverScreenEvent (client, pWin, pScreen); -+ -+ if (pRREvent->mask & RRCrtcChangeNotifyMask) - { -- pRate = &pSize->pRates[k]; -- pRate->oldReferenced = pRate->referenced; -- pRate->referenced = FALSE; -- } -- } -- if (!(*pScrPriv->rrGetInfo) (pScreen, &rotations)) -- return FALSE; -- -- changed = FALSE; -- -- /* -- * Check whether anything changed and simultaneously generate -- * the protocol id values for the objects -- */ -- if (rotations != pScrPriv->rotations) -- { -- pScrPriv->rotations = rotations; -- changed = TRUE; -- } -- -- j = 0; -- for (i = 0; i < pScrPriv->nSizes; i++) -- { -- pSize = &pScrPriv->pSizes[i]; -- if (pSize->oldReferenced != pSize->referenced) -- changed = TRUE; -- if (pSize->referenced) -- pSize->id = j++; -- l = 0; -- for (k = 0; k < pSize->nRates; k++) -- { -- pRate = &pSize->pRates[k]; -- if (pRate->oldReferenced != pRate->referenced) -- changed = TRUE; -- if (pRate->referenced) -- l++; -- } -- pSize->nRatesInUse = l; -- } -- pScrPriv->nSizesInUse = j; -- if (changed) -- { -- UpdateCurrentTime (); -- pScrPriv->lastConfigTime = currentTime; -- WalkTree (pScreen, TellChanged, (pointer) pScreen); -- } -- return TRUE; --} -- --static void --RRSendConfigNotify (ScreenPtr pScreen) --{ -- WindowPtr pWin = WindowTable[pScreen->myNum]; -- xEvent event; -- -- event.u.u.type = ConfigureNotify; -- event.u.configureNotify.window = pWin->drawable.id; -- event.u.configureNotify.aboveSibling = None; -- event.u.configureNotify.x = 0; -- event.u.configureNotify.y = 0; -- -- /* XXX xinerama stuff ? */ -- -- event.u.configureNotify.width = pWin->drawable.width; -- event.u.configureNotify.height = pWin->drawable.height; -- event.u.configureNotify.borderWidth = wBorderWidth (pWin); -- event.u.configureNotify.override = pWin->overrideRedirect; -- DeliverEvents(pWin, &event, 1, NullWindow); --} -- --static int --ProcRRQueryVersion (ClientPtr client) --{ -- xRRQueryVersionReply rep; -- register int n; -- REQUEST(xRRQueryVersionReq); -- rrClientPriv(client); -- -- REQUEST_SIZE_MATCH(xRRQueryVersionReq); -- pRRClient->major_version = stuff->majorVersion; -- pRRClient->minor_version = stuff->minorVersion; -- rep.type = X_Reply; -- rep.length = 0; -- rep.sequenceNumber = client->sequence; -- rep.majorVersion = RANDR_MAJOR; -- rep.minorVersion = RANDR_MINOR; -- if (client->swapped) { -- swaps(&rep.sequenceNumber, n); -- swapl(&rep.length, n); -- swapl(&rep.majorVersion, n); -- swapl(&rep.minorVersion, n); -- } -- WriteToClient(client, sizeof(xRRQueryVersionReply), (char *)&rep); -- return (client->noClientException); --} -- -- --extern char *ConnectionInfo; -- --static 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; --} -- --static int --ProcRRGetScreenInfo (ClientPtr client) --{ -- REQUEST(xRRGetScreenInfoReq); -- xRRGetScreenInfoReply rep; -- WindowPtr pWin; -- int n; -- ScreenPtr pScreen; -- rrScrPrivPtr pScrPriv; -- CARD8 *extra; -- unsigned long extraLen; -- -- REQUEST_SIZE_MATCH(xRRGetScreenInfoReq); -- pWin = (WindowPtr)SecurityLookupWindow(stuff->window, client, -- SecurityReadAccess); -- -- if (!pWin) -- return BadWindow; -- -- pScreen = pWin->drawable.pScreen; -- pScrPriv = rrGetScrPriv(pScreen); -- rep.pad = 0; -- if (!pScrPriv) -- { -- rep.type = X_Reply; -- rep.setOfRotations = RR_Rotate_0;; -- rep.sequenceNumber = client->sequence; -- rep.length = 0; -- rep.root = WindowTable[pWin->drawable.pScreen->myNum]->drawable.id; -- rep.timestamp = currentTime.milliseconds; -- rep.configTimestamp = currentTime.milliseconds; -- rep.nSizes = 0; -- rep.sizeID = 0; -- rep.rotation = RR_Rotate_0; -- rep.rate = 0; -- rep.nrateEnts = 0; -- extra = 0; -- extraLen = 0; -- } -- else -- { -- int i, j; -- xScreenSizes *size; -- CARD16 *rates; -- CARD8 *data8; -- Bool has_rate = RRClientKnowsRates (client); -- -- RRGetInfo (pScreen); -- -- rep.type = X_Reply; -- rep.setOfRotations = pScrPriv->rotations; -- rep.sequenceNumber = client->sequence; -- rep.length = 0; -- rep.root = WindowTable[pWin->drawable.pScreen->myNum]->drawable.id; -- rep.timestamp = pScrPriv->lastSetTime.milliseconds; -- rep.configTimestamp = pScrPriv->lastConfigTime.milliseconds; -- rep.rotation = pScrPriv->rotation; -- rep.nSizes = pScrPriv->nSizesInUse; -- rep.rate = pScrPriv->rate; -- rep.nrateEnts = 0; -- if (has_rate) -- { -- for (i = 0; i < pScrPriv->nSizes; i++) -+ for (i = 0; i < pScrPriv->numCrtcs; i++) - { -- RRScreenSizePtr pSize = &pScrPriv->pSizes[i]; -- if (pSize->referenced) -- { -- rep.nrateEnts += (1 + pSize->nRatesInUse); -- } -+ RRCrtcPtr crtc = pScrPriv->crtcs[i]; -+ if (crtc->changed) -+ RRDeliverCrtcEvent (client, pWin, crtc); - } - } -- -- if (pScrPriv->size >= 0) -- rep.sizeID = pScrPriv->pSizes[pScrPriv->size].id; -- else -- return BadImplementation; -- -- extraLen = (rep.nSizes * sizeof (xScreenSizes) + -- rep.nrateEnts * sizeof (CARD16)); -- -- extra = (CARD8 *) xalloc (extraLen); -- if (!extra) -- return BadAlloc; -- /* -- * First comes the size information -- */ -- size = (xScreenSizes *) extra; -- rates = (CARD16 *) (size + rep.nSizes); -- for (i = 0; i < pScrPriv->nSizes; i++) -+ -+ if (pRREvent->mask & RROutputChangeNotifyMask) - { -- RRScreenSizePtr pSize = &pScrPriv->pSizes[i]; -- if (pSize->referenced) -+ for (i = 0; i < pScrPriv->numOutputs; i++) - { -- size->widthInPixels = pSize->width; -- size->heightInPixels = pSize->height; -- size->widthInMillimeters = pSize->mmWidth; -- size->heightInMillimeters = pSize->mmHeight; -- if (client->swapped) -- { -- swaps (&size->widthInPixels, n); -- swaps (&size->heightInPixels, n); -- swaps (&size->widthInMillimeters, n); -- swaps (&size->heightInMillimeters, n); -- } -- size++; -- if (has_rate) -- { -- *rates = pSize->nRatesInUse; -- if (client->swapped) -- { -- swaps (rates, n); -- } -- rates++; -- for (j = 0; j < pSize->nRates; j++) -- { -- RRScreenRatePtr pRate = &pSize->pRates[j]; -- if (pRate->referenced) -- { -- *rates = pRate->rate; -- if (client->swapped) -- { -- swaps (rates, n); -- } -- rates++; -- } -- } -- } -+ RROutputPtr output = pScrPriv->outputs[i]; -+ if (output->changed) -+ RRDeliverOutputEvent (client, pWin, output); - } - } -- data8 = (CARD8 *) rates; -- -- if (data8 - (CARD8 *) extra != extraLen) -- FatalError ("RRGetScreenInfo bad extra len %ld != %ld\n", -- (unsigned long)(data8 - (CARD8 *) extra), extraLen); -- rep.length = (extraLen + 3) >> 2; -- } -- if (client->swapped) { -- swaps(&rep.sequenceNumber, n); -- swapl(&rep.length, n); -- swapl(&rep.timestamp, n); -- swaps(&rep.rotation, n); -- swaps(&rep.nSizes, n); -- swaps(&rep.sizeID, n); -- swaps(&rep.rate, n); -- swaps(&rep.nrateEnts, n); -- } -- WriteToClient(client, sizeof(xRRGetScreenInfoReply), (char *)&rep); -- if (extraLen) -- { -- WriteToClient (client, extraLen, (char *) extra); -- xfree (extra); - } -- return (client->noClientException); -+ return WT_WALKCHILDREN; - } - --static int --ProcRRSetScreenConfig (ClientPtr client) -+/* -+ * Something changed; send events and adjust pointer position -+ */ -+void -+RRTellChanged (ScreenPtr pScreen) - { -- REQUEST(xRRSetScreenConfigReq); -- xRRSetScreenConfigReply rep; -- DrawablePtr pDraw; -- int n; -- ScreenPtr pScreen; -- rrScrPrivPtr pScrPriv; -- TimeStamp configTime; -- TimeStamp time; -- RRScreenSizePtr pSize; -- int i; -- Rotation rotation; -- int rate; -- short oldWidth, oldHeight; -- Bool has_rate; -- -- UpdateCurrentTime (); -- -- if (RRClientKnowsRates (client)) -- { -- REQUEST_SIZE_MATCH (xRRSetScreenConfigReq); -- has_rate = TRUE; -- } -- else -- { -- REQUEST_SIZE_MATCH (xRR1_0SetScreenConfigReq); -- has_rate = FALSE; -- } -- -- SECURITY_VERIFY_DRAWABLE(pDraw, stuff->drawable, client, -- SecurityWriteAccess); -- -- pScreen = pDraw->pScreen; -- -- pScrPriv = rrGetScrPriv(pScreen); -- -- time = ClientTimeToServerTime(stuff->timestamp); -- configTime = ClientTimeToServerTime(stuff->configTimestamp); -- -- oldWidth = pScreen->width; -- oldHeight = pScreen->height; -- -- if (!pScrPriv) -- { -- time = currentTime; -- rep.status = RRSetConfigFailed; -- goto sendReply; -- } -- if (!RRGetInfo (pScreen)) -- return BadAlloc; -- -- /* -- * if the client's config timestamp is not the same as the last config -- * timestamp, then the config information isn't up-to-date and -- * can't even be validated -- */ -- if (CompareTimeStamps (configTime, pScrPriv->lastConfigTime) != 0) -- { -- rep.status = RRSetConfigInvalidConfigTime; -- goto sendReply; -- } -- -- /* -- * Search for the requested size -- */ -- pSize = 0; -- for (i = 0; i < pScrPriv->nSizes; i++) -- { -- pSize = &pScrPriv->pSizes[i]; -- if (pSize->referenced && pSize->id == stuff->sizeID) -- { -- break; -- } -- } -- if (i == pScrPriv->nSizes) -- { -- /* -- * Invalid size ID -- */ -- client->errorValue = stuff->sizeID; -- return BadValue; -- } -+ rrScrPriv (pScreen); -+ int i; - -- /* -- * Validate requested rotation -- */ -- rotation = (Rotation) stuff->rotation; -- -- /* test the rotation bits only! */ -- switch (rotation & 0xf) { -- case RR_Rotate_0: -- case RR_Rotate_90: -- case RR_Rotate_180: -- case RR_Rotate_270: -- break; -- default: -- /* -- * Invalid rotation -- */ -- client->errorValue = stuff->rotation; -- return BadValue; -- } -- -- if ((~pScrPriv->rotations) & rotation) -+ if (pScrPriv->changed) - { -- /* -- * requested rotation or reflection not supported by screen -- */ -- client->errorValue = stuff->rotation; -- return BadMatch; -- } -- -- /* -- * Validate requested refresh -- */ -- if (has_rate) -- rate = (int) stuff->rate; -- else -- rate = 0; -- -- if (rate) -- { -- for (i = 0; i < pSize->nRates; i++) -+ UpdateCurrentTime (); -+ if (pScrPriv->configChanged) - { -- RRScreenRatePtr pRate = &pSize->pRates[i]; -- if (pRate->referenced && pRate->rate == rate) -- break; -+ pScrPriv->lastConfigTime = currentTime; -+ pScrPriv->configChanged = FALSE; - } -- if (i == pSize->nRates) -- { -- /* -- * Invalid rate -- */ -- client->errorValue = rate; -- return BadValue; -+ pScrPriv->changed = FALSE; -+ WalkTree (pScreen, TellChanged, (pointer) pScreen); -+ for (i = 0; i < pScrPriv->numOutputs; i++) -+ pScrPriv->outputs[i]->changed = FALSE; -+ for (i = 0; i < pScrPriv->numCrtcs; i++) -+ pScrPriv->crtcs[i]->changed = FALSE; -+ if (pScrPriv->layoutChanged) -+ { -+ pScrPriv->layoutChanged = FALSE; -+ RRPointerScreenConfigured (pScreen); -+ RRSendConfigNotify (pScreen); - } - } -- -- /* -- * Make sure the requested set-time is not older than -- * the last set-time -- */ -- if (CompareTimeStamps (time, pScrPriv->lastSetTime) < 0) -- { -- rep.status = RRSetConfigInvalidTime; -- goto sendReply; -- } -- -- /* -- * call out to ddx routine to effect the change -- */ -- if (!(*pScrPriv->rrSetConfig) (pScreen, rotation, rate, -- pSize)) -- { -- /* -- * unknown DDX failure, report to client -- */ -- rep.status = RRSetConfigFailed; -- goto sendReply; -- } -- -- /* -- * set current extension configuration pointers -- */ -- RRSetCurrentConfig (pScreen, rotation, rate, pSize); -- -- /* -- * Deliver ScreenChangeNotify events whenever -- * the configuration is updated -- */ -- WalkTree (pScreen, TellChanged, (pointer) pScreen); -- -- /* -- * Deliver ConfigureNotify events when root changes -- * pixel size -- */ -- if (oldWidth != pScreen->width || oldHeight != pScreen->height) -- RRSendConfigNotify (pScreen); -- RREditConnectionInfo (pScreen); -- -- /* -- * Fix pointer bounds and location -- */ -- ScreenRestructured (pScreen); -- pScrPriv->lastSetTime = time; -- -- /* -- * Report Success -- */ -- rep.status = RRSetConfigSuccess; -- --sendReply: -- -- rep.type = X_Reply; -- /* rep.status has already been filled in */ -- rep.length = 0; -- rep.sequenceNumber = client->sequence; -- -- rep.newTimestamp = pScrPriv->lastSetTime.milliseconds; -- rep.newConfigTimestamp = pScrPriv->lastConfigTime.milliseconds; -- rep.root = WindowTable[pDraw->pScreen->myNum]->drawable.id; -- -- if (client->swapped) -- { -- swaps(&rep.sequenceNumber, n); -- swapl(&rep.length, n); -- swapl(&rep.newTimestamp, n); -- swapl(&rep.newConfigTimestamp, n); -- swapl(&rep.root, n); -- } -- WriteToClient(client, sizeof(xRRSetScreenConfigReply), (char *)&rep); -- -- return (client->noClientException); - } - --int --RRSetScreenConfig (ScreenPtr pScreen, -- Rotation rotation, -- int rate, -- RRScreenSizePtr pSize) -+/* -+ * Return the first output which is connected to an active CRTC -+ * Used in emulating 1.0 behaviour -+ */ -+RROutputPtr -+RRFirstOutput (ScreenPtr pScreen) - { -- rrScrPrivPtr pScrPriv; -- int i; -- short oldWidth, oldHeight; -- -- pScrPriv = rrGetScrPriv(pScreen); -- -- oldWidth = pScreen->width; -- oldHeight = pScreen->height; -- -- if (!RRGetInfo (pScreen)) -- return BadAlloc; -+ rrScrPriv(pScreen); -+ RROutputPtr output; -+ int i, j; - -- /* -- * Validate requested rotation -- */ -- -- /* test the rotation bits only! */ -- switch (rotation & 0xf) { -- case RR_Rotate_0: -- case RR_Rotate_90: -- case RR_Rotate_180: -- case RR_Rotate_270: -- break; -- default: -- /* -- * Invalid rotation -- */ -- return BadValue; -- } -- -- if ((~pScrPriv->rotations) & rotation) -- { -- /* -- * requested rotation or reflection not supported by screen -- */ -- return BadMatch; -- } -- -- /* -- * Validate requested refresh -- */ -- if (rate) -+ for (i = 0; i < pScrPriv->numCrtcs; i++) - { -- for (i = 0; i < pSize->nRates; i++) -- { -- RRScreenRatePtr pRate = &pSize->pRates[i]; -- if (pRate->referenced && pRate->rate == rate) -- break; -- } -- if (i == pSize->nRates) -+ RRCrtcPtr crtc = pScrPriv->crtcs[i]; -+ for (j = 0; j < pScrPriv->numOutputs; j++) - { -- /* -- * Invalid rate -- */ -- return BadValue; -+ output = pScrPriv->outputs[j]; -+ if (output->crtc == crtc) -+ return output; - } - } -- -- /* -- * call out to ddx routine to effect the change -- */ -- if (!(*pScrPriv->rrSetConfig) (pScreen, rotation, rate, -- pSize)) -- { -- /* -- * unknown DDX failure, report to client -- */ -- return BadImplementation; -- } -- -- /* -- * set current extension configuration pointers -- */ -- RRSetCurrentConfig (pScreen, rotation, rate, pSize); -- -- /* -- * Deliver ScreenChangeNotify events whenever -- * the configuration is updated -- */ -- WalkTree (pScreen, TellChanged, (pointer) pScreen); -- -- /* -- * Deliver ConfigureNotify events when root changes -- * pixel size -- */ -- if (oldWidth != pScreen->width || oldHeight != pScreen->height) -- RRSendConfigNotify (pScreen); -- RREditConnectionInfo (pScreen); -- -- /* -- * Fix pointer bounds and location -- */ -- ScreenRestructured (pScreen); -- -- return Success; -+ return NULL; - } - --static int --ProcRRSelectInput (ClientPtr client) -+CARD16 -+RRVerticalRefresh (xRRModeInfo *mode) - { -- REQUEST(xRRSelectInputReq); -- rrClientPriv(client); -- RRTimesPtr pTimes; -- WindowPtr pWin; -- RREventPtr pRREvent, pNewRREvent, *pHead; -- XID clientResource; -- -- REQUEST_SIZE_MATCH(xRRSelectInputReq); -- pWin = SecurityLookupWindow (stuff->window, client, SecurityWriteAccess); -- if (!pWin) -- return BadWindow; -- pHead = (RREventPtr *)SecurityLookupIDByType(client, -- pWin->drawable.id, EventType, -- SecurityWriteAccess); -- -- if (stuff->enable & (RRScreenChangeNotifyMask)) -- { -- ScreenPtr pScreen = pWin->drawable.pScreen; -- rrScrPriv (pScreen); -- -- if (pHead) -- { -- /* check for existing entry. */ -- for (pRREvent = *pHead; pRREvent; pRREvent = pRREvent->next) -- if (pRREvent->client == client) -- return Success; -- } -- -- /* build the entry */ -- pNewRREvent = (RREventPtr) xalloc (sizeof (RREventRec)); -- if (!pNewRREvent) -- return BadAlloc; -- pNewRREvent->next = 0; -- pNewRREvent->client = client; -- pNewRREvent->window = pWin; -- pNewRREvent->mask = stuff->enable; -- /* -- * add a resource that will be deleted when -- * the client goes away -- */ -- clientResource = FakeClientID (client->index); -- pNewRREvent->clientResource = clientResource; -- if (!AddResource (clientResource, ClientType, (pointer)pNewRREvent)) -- return BadAlloc; -- /* -- * create a resource to contain a pointer to the list -- * of clients selecting input. This must be indirect as -- * the list may be arbitrarily rearranged which cannot be -- * done through the resource database. -- */ -- if (!pHead) -- { -- pHead = (RREventPtr *) xalloc (sizeof (RREventPtr)); -- if (!pHead || -- !AddResource (pWin->drawable.id, EventType, (pointer)pHead)) -- { -- FreeResource (clientResource, RT_NONE); -- return BadAlloc; -- } -- *pHead = 0; -- } -- pNewRREvent->next = *pHead; -- *pHead = pNewRREvent; -- /* -- * Now see if the client needs an event -- */ -- if (pScrPriv) -- { -- pTimes = &((RRTimesPtr) (pRRClient + 1))[pScreen->myNum]; -- if (CompareTimeStamps (pTimes->setTime, -- pScrPriv->lastSetTime) != 0 || -- CompareTimeStamps (pTimes->configTime, -- pScrPriv->lastConfigTime) != 0) -- { -- TellChanged (pWin, (pointer) pScreen); -- } -- } -- } -- else if (stuff->enable == xFalse) -- { -- /* delete the interest */ -- if (pHead) { -- pNewRREvent = 0; -- for (pRREvent = *pHead; pRREvent; pRREvent = pRREvent->next) { -- if (pRREvent->client == client) -- break; -- pNewRREvent = pRREvent; -- } -- if (pRREvent) { -- FreeResource (pRREvent->clientResource, ClientType); -- if (pNewRREvent) -- pNewRREvent->next = pRREvent->next; -- else -- *pHead = pRREvent->next; -- xfree (pRREvent); -- } -- } -- } -- else -- { -- client->errorValue = stuff->enable; -- return BadValue; -- } -- return Success; -+ CARD32 refresh; -+ CARD32 dots = mode->hTotal * mode->vTotal; -+ if (!dots) -+ return 0; -+ refresh = (mode->dotClock + dots/2) / dots; -+ if (refresh > 0xffff) -+ refresh = 0xffff; -+ return (CARD16) refresh; - } - -- - static int - ProcRRDispatch (ClientPtr client) - { - REQUEST(xReq); -- switch (stuff->data) -- { -- case X_RRQueryVersion: -- return ProcRRQueryVersion(client); -- case X_RRSetScreenConfig: -- return ProcRRSetScreenConfig(client); -- case X_RRSelectInput: -- return ProcRRSelectInput(client); -- case X_RRGetScreenInfo: -- return ProcRRGetScreenInfo(client); -- default: -+ if (stuff->data >= RRNumberRequests || !ProcRandrVector[stuff->data]) - return BadRequest; -- } --} -- --static int --SProcRRQueryVersion (ClientPtr client) --{ -- register int n; -- REQUEST(xRRQueryVersionReq); -- -- swaps(&stuff->length, n); -- swapl(&stuff->majorVersion, n); -- swapl(&stuff->minorVersion, n); -- return ProcRRQueryVersion(client); --} -- --static int --SProcRRGetScreenInfo (ClientPtr client) --{ -- register int n; -- REQUEST(xRRGetScreenInfoReq); -- -- swaps(&stuff->length, n); -- swapl(&stuff->window, n); -- return ProcRRGetScreenInfo(client); --} -- --static int --SProcRRSetScreenConfig (ClientPtr client) --{ -- register int n; -- REQUEST(xRRSetScreenConfigReq); -- -- if (RRClientKnowsRates (client)) -- { -- REQUEST_SIZE_MATCH (xRRSetScreenConfigReq); -- swaps (&stuff->rate, n); -- } -- else -- { -- REQUEST_SIZE_MATCH (xRR1_0SetScreenConfigReq); -- } -- -- swaps(&stuff->length, n); -- swapl(&stuff->drawable, n); -- swapl(&stuff->timestamp, n); -- swaps(&stuff->sizeID, n); -- swaps(&stuff->rotation, n); -- return ProcRRSetScreenConfig(client); --} -- --static int --SProcRRSelectInput (ClientPtr client) --{ -- register int n; -- REQUEST(xRRSelectInputReq); -- -- swaps(&stuff->length, n); -- swapl(&stuff->window, n); -- return ProcRRSelectInput(client); -+ return (*ProcRandrVector[stuff->data]) (client); - } - -- - static int - SProcRRDispatch (ClientPtr client) - { - REQUEST(xReq); -- switch (stuff->data) -- { -- case X_RRQueryVersion: -- return SProcRRQueryVersion(client); -- case X_RRSetScreenConfig: -- return SProcRRSetScreenConfig(client); -- case X_RRSelectInput: -- return SProcRRSelectInput(client); -- case X_RRGetScreenInfo: -- return SProcRRGetScreenInfo(client); -- default: -+ if (stuff->data >= RRNumberRequests || !ProcRandrVector[stuff->data]) - return BadRequest; -- } --} -- -- --static Bool --RRScreenSizeMatches (RRScreenSizePtr a, -- RRScreenSizePtr b) --{ -- if (a->width != b->width) -- return FALSE; -- if (a->height != b->height) -- return FALSE; -- if (a->mmWidth != b->mmWidth) -- return FALSE; -- if (a->mmHeight != b->mmHeight) -- return FALSE; -- return TRUE; --} -- --RRScreenSizePtr --RRRegisterSize (ScreenPtr pScreen, -- short width, -- short height, -- short mmWidth, -- short mmHeight) --{ -- rrScrPriv (pScreen); -- int i; -- RRScreenSize tmp; -- RRScreenSizePtr pNew; -- -- if (!pScrPriv) -- return 0; -- -- tmp.width = width; -- tmp.height= height; -- tmp.mmWidth = mmWidth; -- tmp.mmHeight = mmHeight; -- tmp.pRates = 0; -- tmp.nRates = 0; -- tmp.nRatesInUse = 0; -- tmp.referenced = TRUE; -- tmp.oldReferenced = FALSE; -- for (i = 0; i < pScrPriv->nSizes; i++) -- if (RRScreenSizeMatches (&tmp, &pScrPriv->pSizes[i])) -- { -- pScrPriv->pSizes[i].referenced = TRUE; -- return &pScrPriv->pSizes[i]; -- } -- pNew = xrealloc (pScrPriv->pSizes, -- (pScrPriv->nSizes + 1) * sizeof (RRScreenSize)); -- if (!pNew) -- return 0; -- pNew[pScrPriv->nSizes++] = tmp; -- pScrPriv->pSizes = pNew; -- return &pNew[pScrPriv->nSizes-1]; --} -- --Bool RRRegisterRate (ScreenPtr pScreen, -- RRScreenSizePtr pSize, -- int rate) --{ -- rrScrPriv(pScreen); -- int i; -- RRScreenRatePtr pNew, pRate; -- -- if (!pScrPriv) -- return FALSE; -- -- for (i = 0; i < pSize->nRates; i++) -- { -- pRate = &pSize->pRates[i]; -- if (pRate->rate == rate) -- { -- pRate->referenced = TRUE; -- return TRUE; -- } -- } -- -- pNew = xrealloc (pSize->pRates, -- (pSize->nRates + 1) * sizeof (RRScreenRate)); -- if (!pNew) -- return FALSE; -- pRate = &pNew[pSize->nRates++]; -- pRate->rate = rate; -- pRate->referenced = TRUE; -- pRate->oldReferenced = FALSE; -- pSize->pRates = pNew; -- return TRUE; -+ return (*SProcRandrVector[stuff->data]) (client); - } - --void --RRSetCurrentConfig (ScreenPtr pScreen, -- Rotation rotation, -- int rate, -- RRScreenSizePtr pSize) --{ -- rrScrPriv (pScreen); -- -- if (!pScrPriv) -- return; -- -- pScrPriv->rotation = rotation; -- pScrPriv->size = pSize - pScrPriv->pSizes; -- pScrPriv->rate = rate; --} -Only in ./nx-X11/programs/Xserver/randr: randr.c.NX.original -Only in ./nx-X11/programs/Xserver/randr: randr.c.X.original -Only in ./nx-X11/programs/Xserver/randr: randr.h -Only in ./nx-X11/programs/Xserver/randr: randr.h.NX.original -Only in ./nx-X11/programs/Xserver/randr: randr.h.X.original -Only in ./nx-X11/programs/Xserver/randr: randrproto.h -Only in ./nx-X11/programs/Xserver/randr: randrproto.h.NX.original -Only in ./nx-X11/programs/Xserver/randr: randrproto.h.X.original -diff -u ./nx-X11/programs/Xserver/randr.X.original/randrstr.h ./nx-X11/programs/Xserver/randr/randrstr.h ---- ./nx-X11/programs/Xserver/randr.X.original/randrstr.h 2015-02-13 14:03:44.792440567 +0100 -+++ ./nx-X11/programs/Xserver/randr/randrstr.h 2015-02-10 19:13:13.636692176 +0100 -@@ -1,25 +1,28 @@ - /* -- * $XFree86: xc/programs/Xserver/randr/randrstr.h,v 1.5 2002/09/29 23:39:45 keithp Exp $ -- * - * Copyright © 2000 Compaq Computer Corporation -+ * Copyright © 2002 Hewlett-Packard Company -+ * Copyright © 2006 Intel Corporation - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that -- * the above copyright notice appear in all copies and that both that -- * copyright notice and this permission notice appear in supporting -- * documentation, and that the name of Compaq not be used in -- * advertising or publicity pertaining to distribution of the software without -- * specific, written prior permission. Compaq makes no -- * representations about the suitability of this software for any purpose. It -- * is provided "as is" without express or implied warranty. -+ * the above copyright notice appear in all copies and that both that copyright -+ * notice and this permission notice appear in supporting documentation, and -+ * that the name of the copyright holders not be used in advertising or -+ * publicity pertaining to distribution of the software without specific, -+ * written prior permission. The copyright holders make no representations -+ * about the suitability of this software for any purpose. It is provided "as -+ * is" without express or implied warranty. - * -- * COMPAQ DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -- * EVENT SHALL COMPAQ BE LIABLE FOR ANY SPECIAL, INDIRECT OR -+ * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -- * PERFORMANCE OF THIS SOFTWARE. -+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE -+ * OF THIS SOFTWARE. -+ * -+ * Author: Jim Gettys, Hewlett-Packard Company, Inc. -+ * Keith Packard, Intel Corporation - */ - - #ifdef HAVE_DIX_CONFIG_H -@@ -29,68 +32,456 @@ - #ifndef _RANDRSTR_H_ - #define _RANDRSTR_H_ - -+#include <X11/X.h> -+#include <X11/Xproto.h> -+#include "misc.h" -+#include "os.h" -+#include "dixstruct.h" -+#include "resource.h" -+#include "scrnintstr.h" -+#include "windowstr.h" -+#include "pixmapstr.h" -+#include "extnsionst.h" -+#include "servermd.h" -+#ifndef NXAGENT_SERVER - #include <X11/extensions/randr.h> -+#include <X11/extensions/randrproto.h> -+#else -+#include "randr.h" -+#include "randrproto.h" -+#endif -+#ifdef RENDER -+#include <X11/extensions/render.h> /* we share subpixel order information */ -+#include "picturestr.h" -+#endif -+#include <X11/Xfuncproto.h> -+ -+/* required for ABI compatibility for now */ -+#define RANDR_10_INTERFACE 1 -+#define RANDR_12_INTERFACE 1 -+ -+typedef XID RRMode; -+typedef XID RROutput; -+typedef XID RRCrtc; -+ -+extern int RREventBase, RRErrorBase; -+ -+extern int (*ProcRandrVector[RRNumberRequests])(ClientPtr); -+extern int (*SProcRandrVector[RRNumberRequests])(ClientPtr); -+ -+/* -+ * Modeline for a monitor. Name follows directly after this struct -+ */ -+ -+#define RRModeName(pMode) ((char *) (pMode + 1)) -+typedef struct _rrMode RRModeRec, *RRModePtr; -+typedef struct _rrPropertyValue RRPropertyValueRec, *RRPropertyValuePtr; -+typedef struct _rrProperty RRPropertyRec, *RRPropertyPtr; -+typedef struct _rrCrtc RRCrtcRec, *RRCrtcPtr; -+typedef struct _rrOutput RROutputRec, *RROutputPtr; -+ -+struct _rrMode { -+ int refcnt; -+ xRRModeInfo mode; -+ char *name; -+ ScreenPtr userScreen; -+}; -+ -+struct _rrPropertyValue { -+ Atom type; /* ignored by server */ -+ short format; /* format of data for swapping - 8,16,32 */ -+ long size; /* size of data in (format/8) bytes */ -+ pointer data; /* private to client */ -+}; -+ -+struct _rrProperty { -+ RRPropertyPtr next; -+ ATOM propertyName; -+ Bool is_pending; -+ Bool range; -+ Bool immutable; -+ int num_valid; -+ INT32 *valid_values; -+ RRPropertyValueRec current, pending; -+}; -+ -+struct _rrCrtc { -+ RRCrtc id; -+ ScreenPtr pScreen; -+ RRModePtr mode; -+ int x, y; -+ Rotation rotation; -+ Rotation rotations; -+ Bool changed; -+ int numOutputs; -+ RROutputPtr *outputs; -+ int gammaSize; -+ CARD16 *gammaRed; -+ CARD16 *gammaBlue; -+ CARD16 *gammaGreen; -+ void *devPrivate; -+}; -+ -+struct _rrOutput { -+ RROutput id; -+ ScreenPtr pScreen; -+ char *name; -+ int nameLength; -+ CARD8 connection; -+ CARD8 subpixelOrder; -+ int mmWidth; -+ int mmHeight; -+ RRCrtcPtr crtc; -+ int numCrtcs; -+ RRCrtcPtr *crtcs; -+ int numClones; -+ RROutputPtr *clones; -+ int numModes; -+ int numPreferred; -+ RRModePtr *modes; -+ int numUserModes; -+ RRModePtr *userModes; -+ Bool changed; -+ RRPropertyPtr properties; -+ Bool pendingProperties; -+ void *devPrivate; -+}; -+ -+#if RANDR_12_INTERFACE -+typedef Bool (*RRScreenSetSizeProcPtr) (ScreenPtr pScreen, -+ CARD16 width, -+ CARD16 height, -+ CARD32 mmWidth, -+ CARD32 mmHeight); -+ -+typedef Bool (*RRCrtcSetProcPtr) (ScreenPtr pScreen, -+ RRCrtcPtr crtc, -+ RRModePtr mode, -+ int x, -+ int y, -+ Rotation rotation, -+ int numOutputs, -+ RROutputPtr *outputs); -+ -+typedef Bool (*RRCrtcSetGammaProcPtr) (ScreenPtr pScreen, -+ RRCrtcPtr crtc); -+ -+typedef Bool (*RROutputSetPropertyProcPtr) (ScreenPtr pScreen, -+ RROutputPtr output, -+ Atom property, -+ RRPropertyValuePtr value); -+ -+typedef Bool (*RROutputValidateModeProcPtr) (ScreenPtr pScreen, -+ RROutputPtr output, -+ RRModePtr mode); -+ -+typedef void (*RRModeDestroyProcPtr) (ScreenPtr pScreen, -+ RRModePtr mode); -+ -+#endif -+ -+typedef Bool (*RRGetInfoProcPtr) (ScreenPtr pScreen, Rotation *rotations); -+typedef Bool (*RRCloseScreenProcPtr) ( int i, ScreenPtr pscreen); - --typedef struct _rrScreenRate { -- int rate; -- Bool referenced; -- Bool oldReferenced; -+/* These are for 1.0 compatibility */ -+ -+typedef struct _rrRefresh { -+ CARD16 rate; -+ RRModePtr mode; - } RRScreenRate, *RRScreenRatePtr; - - typedef struct _rrScreenSize { - int id; - short width, height; - short mmWidth, mmHeight; -- RRScreenRatePtr pRates; - int nRates; -- int nRatesInUse; -- Bool referenced; -- Bool oldReferenced; -+ RRScreenRatePtr pRates; - } RRScreenSize, *RRScreenSizePtr; - -+#ifdef RANDR_10_INTERFACE -+ - typedef Bool (*RRSetConfigProcPtr) (ScreenPtr pScreen, - Rotation rotation, - int rate, - RRScreenSizePtr pSize); - --typedef Bool (*RRGetInfoProcPtr) (ScreenPtr pScreen, Rotation *rotations); --typedef Bool (*RRCloseScreenProcPtr) ( int i, ScreenPtr pscreen); -+#endif - -+ - typedef struct _rrScrPriv { -+ /* -+ * 'public' part of the structure; DDXen fill this in -+ * as they initialize -+ */ -+#if RANDR_10_INTERFACE - RRSetConfigProcPtr rrSetConfig; -+#endif - RRGetInfoProcPtr rrGetInfo; -+#if RANDR_12_INTERFACE -+ RRScreenSetSizeProcPtr rrScreenSetSize; -+ RRCrtcSetProcPtr rrCrtcSet; -+ RRCrtcSetGammaProcPtr rrCrtcSetGamma; -+ RROutputSetPropertyProcPtr rrOutputSetProperty; -+ RROutputValidateModeProcPtr rrOutputValidateMode; -+ RRModeDestroyProcPtr rrModeDestroy; -+#endif - -+ /* -+ * Private part of the structure; not considered part of the ABI -+ */ - TimeStamp lastSetTime; /* last changed by client */ - TimeStamp lastConfigTime; /* possible configs changed */ - RRCloseScreenProcPtr CloseScreen; - -+ Bool changed; /* some config changed */ -+ Bool configChanged; /* configuration changed */ -+ Bool layoutChanged; /* screen layout changed */ -+ -+ CARD16 minWidth, minHeight; -+ CARD16 maxWidth, maxHeight; -+ CARD16 width, height; /* last known screen size */ -+ CARD16 mmWidth, mmHeight; /* last known screen size */ -+ -+ int numOutputs; -+ RROutputPtr *outputs; -+ -+ int numCrtcs; -+ RRCrtcPtr *crtcs; -+ -+ /* Last known pointer position */ -+ RRCrtcPtr pointerCrtc; -+ -+#ifdef RANDR_10_INTERFACE - /* - * Configuration information - */ - Rotation rotations; -+ CARD16 reqWidth, reqHeight; - - int nSizes; -- int nSizesInUse; - RRScreenSizePtr pSizes; -- -- /* -- * Current state -- */ -+ - Rotation rotation; -- int size; - int rate; -+ int size; -+#endif - } rrScrPrivRec, *rrScrPrivPtr; - -+#ifndef NXAGENT_SERVER -+extern DevPrivateKey rrPrivKey; -+#else - extern int rrPrivIndex; -+#endif -+ -+#ifndef NXAGENT_SERVER -+ -+#define rrGetScrPriv(pScr) ((rrScrPrivPtr)dixLookupPrivate(&(pScr)->devPrivates, rrPrivKey)) -+#define rrScrPriv(pScr) rrScrPrivPtr pScrPriv = rrGetScrPriv(pScr) -+#define SetRRScreen(s,p) dixSetPrivate(&(s)->devPrivates, rrPrivKey, p) -+ -+#else - - #define rrGetScrPriv(pScr) ((rrScrPrivPtr) (pScr)->devPrivates[rrPrivIndex].ptr) - #define rrScrPriv(pScr) rrScrPrivPtr pScrPriv = rrGetScrPriv(pScr) - #define SetRRScreen(s,p) ((s)->devPrivates[rrPrivIndex].ptr = (pointer) (p)) - -+#endif -+ -+/* -+ * each window has a list of clients requesting -+ * RRNotify events. Each client has a resource -+ * for each window it selects RRNotify input for, -+ * this resource is used to delete the RRNotifyRec -+ * entry from the per-window queue. -+ */ -+ -+typedef struct _RREvent *RREventPtr; -+ -+typedef struct _RREvent { -+ RREventPtr next; -+ ClientPtr client; -+ WindowPtr window; -+ XID clientResource; -+ int mask; -+} RREventRec; -+ -+typedef struct _RRTimes { -+ TimeStamp setTime; -+ TimeStamp configTime; -+} RRTimesRec, *RRTimesPtr; -+ -+typedef struct _RRClient { -+ int major_version; -+ int minor_version; -+/* RRTimesRec times[0]; */ -+} RRClientRec, *RRClientPtr; -+ -+extern RESTYPE RRClientType, RREventType; /* resource types for event masks */ -+#ifndef NXAGENT_SERVER -+extern DevPrivateKey RRClientPrivateKey; -+#else -+extern int RRClientPrivateIndex; -+#endif -+extern RESTYPE RRCrtcType, RRModeType, RROutputType; -+ -+#define LookupOutput(client,id,a) ((RROutputPtr) \ -+ (SecurityLookupIDByType (client, id, \ -+ RROutputType, a))) -+#define LookupCrtc(client,id,a) ((RRCrtcPtr) \ -+ (SecurityLookupIDByType (client, id, \ -+ RRCrtcType, a))) -+#define LookupMode(client,id,a) ((RRModePtr) \ -+ (SecurityLookupIDByType (client, id, \ -+ RRModeType, a))) -+#ifndef NXAGENT_SERVER -+ -+#define GetRRClient(pClient) ((RRClientPtr)dixLookupPrivate(&(pClient)->devPrivates, RRClientPrivateKey)) -+#define rrClientPriv(pClient) RRClientPtr pRRClient = GetRRClient(pClient) -+ -+#else -+ -+#define GetRRClient(pClient) ((RRClientPtr) (pClient)->devPrivates[RRClientPrivateIndex].ptr) -+#define rrClientPriv(pClient) RRClientPtr pRRClient = GetRRClient(pClient) -+ -+#define DixUnknownAccess SecurityUnknownAccess -+#define DixReadAccess SecurityReadAccess -+#define DixWriteAccess SecurityWriteAccess -+#define DixDestroyAccess SecurityDestroyAccess -+ -+#endif -+ - /* Initialize the extension */ - void - RRExtensionInit (void); - -+#ifdef RANDR_12_INTERFACE -+/* -+ * Set the range of sizes for the screen -+ */ -+void -+RRScreenSetSizeRange (ScreenPtr pScreen, -+ CARD16 minWidth, -+ CARD16 minHeight, -+ CARD16 maxWidth, -+ CARD16 maxHeight); -+#endif -+ -+/* rrscreen.c */ -+/* -+ * Notify the extension that the screen size has been changed. -+ * The driver is responsible for calling this whenever it has changed -+ * the size of the screen -+ */ -+void -+RRScreenSizeNotify (ScreenPtr pScreen); -+ -+/* -+ * Request that the screen be resized -+ */ -+Bool -+RRScreenSizeSet (ScreenPtr pScreen, -+ CARD16 width, -+ CARD16 height, -+ CARD32 mmWidth, -+ CARD32 mmHeight); -+ -+/* -+ * Send ConfigureNotify event to root window when 'something' happens -+ */ -+void -+RRSendConfigNotify (ScreenPtr pScreen); -+ -+/* -+ * screen dispatch -+ */ -+int -+ProcRRGetScreenSizeRange (ClientPtr client); -+ -+int -+ProcRRSetScreenSize (ClientPtr client); -+ -+int -+ProcRRGetScreenResources (ClientPtr client); -+ -+int -+ProcRRSetScreenConfig (ClientPtr client); -+ -+int -+ProcRRGetScreenInfo (ClientPtr client); -+ -+/* -+ * Deliver a ScreenNotify event -+ */ -+void -+RRDeliverScreenEvent (ClientPtr client, WindowPtr pWin, ScreenPtr pScreen); -+ -+/* mirandr.c */ -+Bool -+miRandRInit (ScreenPtr pScreen); -+ -+Bool -+miRRGetInfo (ScreenPtr pScreen, Rotation *rotations); -+ -+Bool -+miRRGetScreenInfo (ScreenPtr pScreen); -+ -+Bool -+miRRCrtcSet (ScreenPtr pScreen, -+ RRCrtcPtr crtc, -+ RRModePtr mode, -+ int x, -+ int y, -+ Rotation rotation, -+ int numOutput, -+ RROutputPtr *outputs); -+ -+Bool -+miRROutputSetProperty (ScreenPtr pScreen, -+ RROutputPtr output, -+ Atom property, -+ RRPropertyValuePtr value); -+ -+Bool -+miRROutputValidateMode (ScreenPtr pScreen, -+ RROutputPtr output, -+ RRModePtr mode); -+ -+void -+miRRModeDestroy (ScreenPtr pScreen, -+ RRModePtr mode); -+ -+/* randr.c */ -+/* -+ * Send all pending events -+ */ -+void -+RRTellChanged (ScreenPtr pScreen); -+ -+/* -+ * Poll the driver for changed information -+ */ -+Bool -+RRGetInfo (ScreenPtr pScreen); -+ -+Bool RRInit (void); -+ -+Bool RRScreenInit(ScreenPtr pScreen); -+ -+RROutputPtr -+RRFirstOutput (ScreenPtr pScreen); -+ -+Rotation -+RRGetRotation (ScreenPtr pScreen); -+ -+CARD16 -+RRVerticalRefresh (xRRModeInfo *mode); -+ -+#ifdef RANDR_10_INTERFACE -+/* -+ * This is the old interface, deprecated but left -+ * around for compatibility -+ */ -+ - /* - * Then, register the specific size with the screen - */ -@@ -116,7 +507,10 @@ - int rate, - RRScreenSizePtr pSize); - --Bool RRScreenInit(ScreenPtr pScreen); -+Bool RRScreenInit (ScreenPtr pScreen); -+ -+Rotation -+RRGetRotation (ScreenPtr pScreen); - - int - RRSetScreenConfig (ScreenPtr pScreen, -@@ -124,19 +518,371 @@ - int rate, - RRScreenSizePtr pSize); - -+#endif -+ -+/* rrcrtc.c */ -+ -+/* -+ * Notify the CRTC of some change; layoutChanged indicates that -+ * some position or size element changed -+ */ -+void -+RRCrtcChanged (RRCrtcPtr crtc, Bool layoutChanged); -+ -+/* -+ * Create a CRTC -+ */ -+RRCrtcPtr -+RRCrtcCreate (ScreenPtr pScreen, void *devPrivate); -+ -+/* -+ * Set the allowed rotations on a CRTC -+ */ -+void -+RRCrtcSetRotations (RRCrtcPtr crtc, Rotation rotations); -+ -+/* -+ * Notify the extension that the Crtc has been reconfigured, -+ * the driver calls this whenever it has updated the mode -+ */ -+Bool -+RRCrtcNotify (RRCrtcPtr crtc, -+ RRModePtr mode, -+ int x, -+ int y, -+ Rotation rotation, -+ int numOutputs, -+ RROutputPtr *outputs); -+ -+void -+RRDeliverCrtcEvent (ClientPtr client, WindowPtr pWin, RRCrtcPtr crtc); -+ -+/* -+ * Request that the Crtc be reconfigured -+ */ - Bool --miRandRInit (ScreenPtr pScreen); -+RRCrtcSet (RRCrtcPtr crtc, -+ RRModePtr mode, -+ int x, -+ int y, -+ Rotation rotation, -+ int numOutput, -+ RROutputPtr *outputs); -+ -+/* -+ * Request that the Crtc gamma be changed -+ */ - - Bool --miRRGetInfo (ScreenPtr pScreen, Rotation *rotations); -+RRCrtcGammaSet (RRCrtcPtr crtc, -+ CARD16 *red, -+ CARD16 *green, -+ CARD16 *blue); -+ -+/* -+ * Notify the extension that the Crtc gamma has been changed -+ * The driver calls this whenever it has changed the gamma values -+ * in the RRCrtcRec -+ */ - - Bool --miRRSetConfig (ScreenPtr pScreen, -- Rotation rotation, -- int rate, -- RRScreenSizePtr size); -+RRCrtcGammaNotify (RRCrtcPtr crtc); -+ -+/* -+ * Set the size of the gamma table at server startup time -+ */ - - Bool --miRRGetScreenInfo (ScreenPtr pScreen); -+RRCrtcGammaSetSize (RRCrtcPtr crtc, -+ int size); -+ -+/* -+ * Return the area of the frame buffer scanned out by the crtc, -+ * taking into account the current mode and rotation -+ */ -+ -+void -+RRCrtcGetScanoutSize(RRCrtcPtr crtc, int *width, int *height); -+ -+/* -+ * Destroy a Crtc at shutdown -+ */ -+void -+RRCrtcDestroy (RRCrtcPtr crtc); -+ -+/* -+ * Initialize crtc type -+ */ -+Bool -+RRCrtcInit (void); -+ -+/* -+ * Crtc dispatch -+ */ -+ -+int -+ProcRRGetCrtcInfo (ClientPtr client); -+ -+int -+ProcRRSetCrtcConfig (ClientPtr client); -+ -+int -+ProcRRGetCrtcGammaSize (ClientPtr client); -+ -+int -+ProcRRGetCrtcGamma (ClientPtr client); -+ -+int -+ProcRRSetCrtcGamma (ClientPtr client); -+ -+/* rrdispatch.c */ -+Bool -+RRClientKnowsRates (ClientPtr pClient); -+ -+/* rrmode.c */ -+/* -+ * Find, and if necessary, create a mode -+ */ -+ -+RRModePtr -+RRModeGet (xRRModeInfo *modeInfo, -+ const char *name); -+ -+void -+RRModePruneUnused (ScreenPtr pScreen); -+ -+/* -+ * Destroy a mode. -+ */ -+ -+void -+RRModeDestroy (RRModePtr mode); -+ -+/* -+ * Return a list of modes that are valid for some output in pScreen -+ */ -+RRModePtr * -+RRModesForScreen (ScreenPtr pScreen, int *num_ret); -+ -+/* -+ * Initialize mode type -+ */ -+Bool -+RRModeInit (void); -+ -+int -+ProcRRCreateMode (ClientPtr client); -+ -+int -+ProcRRDestroyMode (ClientPtr client); -+ -+int -+ProcRRAddOutputMode (ClientPtr client); -+ -+int -+ProcRRDeleteOutputMode (ClientPtr client); -+ -+/* rroutput.c */ -+ -+/* -+ * Notify the output of some change. configChanged indicates whether -+ * any external configuration (mode list, clones, connected status) -+ * has changed, or whether the change was strictly internal -+ * (which crtc is in use) -+ */ -+void -+RROutputChanged (RROutputPtr output, Bool configChanged); -+ -+/* -+ * Create an output -+ */ -+ -+RROutputPtr -+RROutputCreate (ScreenPtr pScreen, -+ const char *name, -+ int nameLength, -+ void *devPrivate); -+ -+/* -+ * Notify extension that output parameters have been changed -+ */ -+Bool -+RROutputSetClones (RROutputPtr output, -+ RROutputPtr *clones, -+ int numClones); -+ -+Bool -+RROutputSetModes (RROutputPtr output, -+ RRModePtr *modes, -+ int numModes, -+ int numPreferred); -+ -+int -+RROutputAddUserMode (RROutputPtr output, -+ RRModePtr mode); -+ -+int -+RROutputDeleteUserMode (RROutputPtr output, -+ RRModePtr mode); -+ -+Bool -+RROutputSetCrtcs (RROutputPtr output, -+ RRCrtcPtr *crtcs, -+ int numCrtcs); -+ -+Bool -+RROutputSetConnection (RROutputPtr output, -+ CARD8 connection); -+ -+Bool -+RROutputSetSubpixelOrder (RROutputPtr output, -+ int subpixelOrder); -+ -+Bool -+RROutputSetPhysicalSize (RROutputPtr output, -+ int mmWidth, -+ int mmHeight); -+ -+void -+RRDeliverOutputEvent(ClientPtr client, WindowPtr pWin, RROutputPtr output); -+ -+void -+RROutputDestroy (RROutputPtr output); -+ -+int -+ProcRRGetOutputInfo (ClientPtr client); -+ -+/* -+ * Initialize output type -+ */ -+Bool -+RROutputInit (void); -+ -+/* rrpointer.c */ -+void -+RRPointerMoved (ScreenPtr pScreen, int x, int y); -+ -+void -+RRPointerScreenConfigured (ScreenPtr pScreen); -+ -+/* rrproperty.c */ -+ -+void -+RRDeleteAllOutputProperties (RROutputPtr output); -+ -+RRPropertyValuePtr -+RRGetOutputProperty (RROutputPtr output, Atom property, Bool pending); -+ -+RRPropertyPtr -+RRQueryOutputProperty (RROutputPtr output, Atom property); -+ -+void -+RRDeleteOutputProperty (RROutputPtr output, Atom property); -+ -+Bool -+RRPostPendingProperties (RROutputPtr output); -+ -+int -+RRChangeOutputProperty (RROutputPtr output, Atom property, Atom type, -+ int format, int mode, unsigned long len, -+ pointer value, Bool sendevent, Bool pending); -+ -+int -+RRConfigureOutputProperty (RROutputPtr output, Atom property, -+ Bool pending, Bool range, Bool immutable, -+ int num_values, INT32 *values); -+int -+ProcRRChangeOutputProperty (ClientPtr client); -+ -+int -+ProcRRGetOutputProperty (ClientPtr client); -+ -+int -+ProcRRListOutputProperties (ClientPtr client); -+ -+int -+ProcRRQueryOutputProperty (ClientPtr client); -+ -+int -+ProcRRConfigureOutputProperty (ClientPtr client); -+ -+int -+ProcRRDeleteOutputProperty (ClientPtr client); -+ -+/* rrxinerama.c */ -+void -+RRXineramaExtensionInit(void); - - #endif /* _RANDRSTR_H_ */ -+ -+/* -+ -+randr extension implementation structure -+ -+Query state: -+ ProcRRGetScreenInfo/ProcRRGetScreenResources -+ RRGetInfo -+ -+ • Request configuration from driver, either 1.0 or 1.2 style -+ • These functions only record state changes, all -+ other actions are pended until RRTellChanged is called -+ -+ ->rrGetInfo -+ 1.0: -+ RRRegisterSize -+ RRRegisterRate -+ RRSetCurrentConfig -+ 1.2: -+ RRScreenSetSizeRange -+ RROutputSetCrtcs -+ RRModeGet -+ RROutputSetModes -+ RROutputSetConnection -+ RROutputSetSubpixelOrder -+ RROutputSetClones -+ RRCrtcNotify -+ -+ • Must delay scanning configuration until after ->rrGetInfo returns -+ because some drivers will call SetCurrentConfig in the middle -+ of the ->rrGetInfo operation. -+ -+ 1.0: -+ -+ • Scan old configuration, mirror to new structures -+ -+ RRScanOldConfig -+ RRCrtcCreate -+ RROutputCreate -+ RROutputSetCrtcs -+ RROutputSetConnection -+ RROutputSetSubpixelOrder -+ RROldModeAdd • This adds modes one-at-a-time -+ RRModeGet -+ RRCrtcNotify -+ -+ • send events, reset pointer if necessary -+ -+ RRTellChanged -+ WalkTree (sending events) -+ -+ • when layout has changed: -+ RRPointerScreenConfigured -+ RRSendConfigNotify -+ -+Asynchronous state setting (1.2 only) -+ When setting state asynchronously, the driver invokes the -+ ->rrGetInfo function and then calls RRTellChanged to flush -+ the changes to the clients and reset pointer if necessary -+ -+Set state -+ -+ ProcRRSetScreenConfig -+ RRCrtcSet -+ 1.2: -+ ->rrCrtcSet -+ RRCrtcNotify -+ 1.0: -+ ->rrSetConfig -+ RRCrtcNotify -+ RRTellChanged -+ */ -Only in ./nx-X11/programs/Xserver/randr: registry.h -Only in ./nx-X11/programs/Xserver/randr: registry.h.NX.original -Only in ./nx-X11/programs/Xserver/randr: registry.h.X.original -Only in ./nx-X11/programs/Xserver/randr: rrcrtc.c -Only in ./nx-X11/programs/Xserver/randr: rrcrtc.c.NX.original -Only in ./nx-X11/programs/Xserver/randr: rrcrtc.c.X.original -Only in ./nx-X11/programs/Xserver/randr: rrdispatch.c -Only in ./nx-X11/programs/Xserver/randr: rrdispatch.c.X.original -Only in ./nx-X11/programs/Xserver/randr: rrinfo.c -Only in ./nx-X11/programs/Xserver/randr: rrmode.c -Only in ./nx-X11/programs/Xserver/randr: rrmode.c.NX.original -Only in ./nx-X11/programs/Xserver/randr: rrmode.c.X.original -Only in ./nx-X11/programs/Xserver/randr: rroutput.c -Only in ./nx-X11/programs/Xserver/randr: rrpointer.c -Only in ./nx-X11/programs/Xserver/randr: rrproperty.c -Only in ./nx-X11/programs/Xserver/randr: rrscreen.c -Only in ./nx-X11/programs/Xserver/randr: rrscreen.c.NX.original -Only in ./nx-X11/programs/Xserver/randr: rrscreen.c.X.original -Only in ./nx-X11/programs/Xserver/randr: rrsdispatch.c -Only in ./nx-X11/programs/Xserver/randr: rrxinerama.c -Only in ./nx-X11/programs/Xserver/randr: rrxinerama.c.NX.original -Only in ./nx-X11/programs/Xserver/randr: rrxinerama.c.X.original |