xserver: Branch 'master' - 9 commits

Adam Jackson ajax at kemper.freedesktop.org
Mon Apr 18 15:25:16 UTC 2016


 dix/main.c                      |    3 
 hw/xfree86/common/xf86.h        |    9 --
 hw/xfree86/common/xf86Globals.c |    1 
 hw/xfree86/common/xf86Helper.c  |   81 --------------------
 hw/xfree86/common/xf86Init.c    |  158 +++++++++++-----------------------------
 hw/xfree86/common/xf86Priv.h    |    4 -
 hw/xfree86/common/xf86Privstr.h |   10 --
 hw/xfree86/ddc/ddcProperty.c    |   55 ++++++-------
 hw/xfree86/ddc/edid.h           |    1 
 hw/xfree86/doc/ddxDesign.xml    |   12 ---
 include/dix.h                   |    2 
 11 files changed, 77 insertions(+), 259 deletions(-)

New commits:
commit a1b13cda6169a98d694451fec75e63352e9d90bd
Author: Adam Jackson <ajax at redhat.com>
Date:   Wed Jan 6 09:09:21 2016 -0500

    xfree86: Remove xf86RegisterRootWindowProperty
    
    All consumers have been ported to the root window callback, so this can
    all be nuked.
    
    Reviewed-by: Michel Dänzer <michel.daenzer at amd.com>
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/hw/xfree86/common/xf86.h b/hw/xfree86/common/xf86.h
index 38b901f..adb5601 100644
--- a/hw/xfree86/common/xf86.h
+++ b/hw/xfree86/common/xf86.h
@@ -61,10 +61,6 @@ extern _X_EXPORT DevPrivateKeyRec xf86ScreenKeyRec;
 
 #define xf86ScreenKey (&xf86ScreenKeyRec)
 
-extern _X_EXPORT DevPrivateKeyRec xf86CreateRootWindowKeyRec;
-
-#define xf86CreateRootWindowKey (&xf86CreateRootWindowKeyRec)
-
 extern _X_EXPORT ScrnInfoPtr *xf86Screens;      /* List of pointers to ScrnInfoRecs */
 extern _X_EXPORT const unsigned char byte_reversed[256];
 extern _X_EXPORT Bool fbSlotClaimed;
@@ -351,9 +347,6 @@ xf86ConfigFbEntity(ScrnInfoPtr pScrn, int scrnFlag,
 
 extern _X_EXPORT Bool
 xf86IsScreenPrimary(ScrnInfoPtr pScrn);
-extern _X_EXPORT int
-xf86RegisterRootWindowProperty(int ScrnIndex, Atom property, Atom type,
-                               int format, unsigned long len, void *value);
 extern _X_EXPORT Bool
 xf86IsUnblank(int mode);
 
diff --git a/hw/xfree86/common/xf86Globals.c b/hw/xfree86/common/xf86Globals.c
index 86bf15d..07cfabf 100644
--- a/hw/xfree86/common/xf86Globals.c
+++ b/hw/xfree86/common/xf86Globals.c
@@ -201,5 +201,4 @@ Bool xf86AllowMouseOpenFail = FALSE;
 Bool xf86VidModeDisabled = FALSE;
 Bool xf86VidModeAllowNonLocal = FALSE;
 #endif
-RootWinPropPtr *xf86RegisteredPropertiesTable = NULL;
 Bool xorgHWAccess = FALSE;
diff --git a/hw/xfree86/common/xf86Helper.c b/hw/xfree86/common/xf86Helper.c
index e6dd4a6..1d4b431 100644
--- a/hw/xfree86/common/xf86Helper.c
+++ b/hw/xfree86/common/xf86Helper.c
@@ -1817,81 +1817,6 @@ xf86IsScreenPrimary(ScrnInfoPtr pScrn)
     return FALSE;
 }
 
-int
-xf86RegisterRootWindowProperty(int ScrnIndex, Atom property, Atom type,
-                               int format, unsigned long len, void *value)
-{
-    RootWinPropPtr pNewProp = NULL, pRegProp;
-    Bool existing = FALSE;
-
-    DebugF("xf86RegisterRootWindowProperty(%d, %ld, %ld, %d, %ld, %p)\n",
-           ScrnIndex, (long)property, (long)type, format, len, value);
-
-    if (ScrnIndex < 0 || ScrnIndex >= xf86NumScreens) {
-        return BadMatch;
-    }
-
-    if (xf86RegisteredPropertiesTable &&
-        xf86RegisteredPropertiesTable[ScrnIndex]) {
-        for (pNewProp = xf86RegisteredPropertiesTable[ScrnIndex];
-             pNewProp; pNewProp = pNewProp->next) {
-            if (strcmp(pNewProp->name, NameForAtom(property)) == 0)
-                break;
-        }
-    }
-
-    if (!pNewProp) {
-        if ((pNewProp = (RootWinPropPtr) malloc(sizeof(RootWinProp))) == NULL) {
-            return BadAlloc;
-        }
-        /*
-         * We will put this property at the end of the list so that
-         * the changes are made in the order they were requested.
-         */
-        pNewProp->next = NULL;
-    }
-    else {
-        free((void *) pNewProp->name);
-        existing = TRUE;
-    }
-
-    pNewProp->name = xnfstrdup(NameForAtom(property));
-    pNewProp->type = type;
-    pNewProp->format = format;
-    pNewProp->size = len;
-    pNewProp->data = value;
-
-    DebugF("new property filled\n");
-
-    if (xf86RegisteredPropertiesTable == NULL) {
-        DebugF("creating xf86RegisteredPropertiesTable[] size %d\n",
-               xf86NumScreens);
-        xf86RegisteredPropertiesTable =
-            xnfcalloc(sizeof(RootWinProp), xf86NumScreens);
-    }
-
-    DebugF("xf86RegisteredPropertiesTable %p\n",
-           (void *) xf86RegisteredPropertiesTable);
-    DebugF("xf86RegisteredPropertiesTable[%d] %p\n",
-           ScrnIndex, (void *) xf86RegisteredPropertiesTable[ScrnIndex]);
-
-    if (!existing) {
-        if (xf86RegisteredPropertiesTable[ScrnIndex] == NULL) {
-            xf86RegisteredPropertiesTable[ScrnIndex] = pNewProp;
-        }
-        else {
-            pRegProp = xf86RegisteredPropertiesTable[ScrnIndex];
-            while (pRegProp->next != NULL) {
-                DebugF("- next %p\n", (void *) pRegProp);
-                pRegProp = pRegProp->next;
-            }
-            pRegProp->next = pNewProp;
-        }
-    }
-    DebugF("xf86RegisterRootWindowProperty succeeded\n");
-    return Success;
-}
-
 Bool
 xf86IsUnblank(int mode)
 {
diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
index 744af7c..46976c1 100644
--- a/hw/xfree86/common/xf86Init.c
+++ b/hw/xfree86/common/xf86Init.c
@@ -297,50 +297,6 @@ xf86PrivsElevated(void)
     return privsElevated;
 }
 
-static Bool
-xf86CreateRootWindow(WindowPtr pWin)
-{
-    int ret = TRUE;
-    int err = Success;
-    ScreenPtr pScreen = pWin->drawable.pScreen;
-    RootWinPropPtr pProp;
-    CreateWindowProcPtr create_window = (CreateWindowProcPtr)
-        dixLookupPrivate(&pScreen->devPrivates, xf86CreateRootWindowKey);
-
-    DebugF("xf86CreateRootWindow(%p)\n", pWin);
-
-    /* Unhook this function ... */
-    pScreen->CreateWindow = create_window;
-    dixSetPrivate(&pScreen->devPrivates, xf86CreateRootWindowKey, NULL);
-
-    /* ... and call the previous CreateWindow fuction, if any */
-    if (NULL != pScreen->CreateWindow) {
-        ret = (*pScreen->CreateWindow) (pWin);
-    }
-
-    /* Now do our stuff */
-    if (xf86RegisteredPropertiesTable != NULL) {
-        if (pWin->parent == NULL && xf86RegisteredPropertiesTable != NULL) {
-            for (pProp = xf86RegisteredPropertiesTable[pScreen->myNum];
-                 pProp != NULL && err == Success; pProp = pProp->next) {
-                Atom prop;
-
-                prop = MakeAtom(pProp->name, strlen(pProp->name), TRUE);
-                err = dixChangeWindowProperty(serverClient, pWin,
-                                              prop, pProp->type,
-                                              pProp->format, PropModeReplace,
-                                              pProp->size, pProp->data, FALSE);
-            }
-
-            /* Look at err */
-            ret &= (err == Success);
-
-        }
-    }
-
-    return ret;
-}
-
 static void
 InstallSignalHandlers(void)
 {
@@ -815,8 +771,7 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv)
         if (!xf86ColormapAllocatePrivates(xf86Screens[i]))
             FatalError("Cannot register DDX private keys");
 
-    if (!dixRegisterPrivateKey(&xf86ScreenKeyRec, PRIVATE_SCREEN, 0) ||
-        !dixRegisterPrivateKey(&xf86CreateRootWindowKeyRec, PRIVATE_SCREEN, 0))
+    if (!dixRegisterPrivateKey(&xf86ScreenKeyRec, PRIVATE_SCREEN, 0))
         FatalError("Cannot register DDX private keys");
 
     for (i = 0; i < xf86NumGPUScreens; i++) {
@@ -887,11 +842,6 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv)
         DebugF("xf86Screens[%d]->pScreen->CreateWindow = %p\n",
                i, xf86Screens[i]->pScreen->CreateWindow);
 
-        dixSetPrivate(&screenInfo.screens[scr_index]->devPrivates,
-                      xf86CreateRootWindowKey,
-                      xf86Screens[i]->pScreen->CreateWindow);
-        xf86Screens[i]->pScreen->CreateWindow = xf86CreateRootWindow;
-
         if (PictureGetSubpixelOrder(xf86Screens[i]->pScreen) == SubPixelUnknown) {
             xf86MonPtr DDC = (xf86MonPtr) (xf86Screens[i]->monitor->DDC);
 
diff --git a/hw/xfree86/common/xf86Priv.h b/hw/xfree86/common/xf86Priv.h
index ad3f2b9..81f7294 100644
--- a/hw/xfree86/common/xf86Priv.h
+++ b/hw/xfree86/common/xf86Priv.h
@@ -92,8 +92,6 @@ extern _X_EXPORT const char *xf86VisualNames[];
 extern _X_EXPORT int xf86Verbose;       /* verbosity level */
 extern _X_EXPORT int xf86LogVerbose;    /* log file verbosity level */
 
-extern _X_EXPORT RootWinPropPtr *xf86RegisteredPropertiesTable;
-
 extern ScrnInfoPtr *xf86GPUScreens;      /* List of pointers to ScrnInfoRecs */
 extern int xf86NumGPUScreens;
 #ifndef DEFAULT_VERBOSE
diff --git a/hw/xfree86/common/xf86Privstr.h b/hw/xfree86/common/xf86Privstr.h
index 4830fb3..ad86138 100644
--- a/hw/xfree86/common/xf86Privstr.h
+++ b/hw/xfree86/common/xf86Privstr.h
@@ -115,16 +115,6 @@ typedef struct {
 } DPMSRec, *DPMSPtr;
 #endif
 
-/* Information for root window properties. */
-typedef struct _RootWinProp {
-    struct _RootWinProp *next;
-    const char *name;
-    Atom type;
-    short format;
-    long size;
-    void *data;
-} RootWinProp, *RootWinPropPtr;
-
 /* ISC's cc can't handle ~ of UL constants, so explicitly type cast them. */
 #define XLED1   ((unsigned long) 0x00000001)
 #define XLED2   ((unsigned long) 0x00000002)
commit e89c7f1c2a0ea3480b21446e413073c1427285ae
Author: Adam Jackson <ajax at redhat.com>
Date:   Wed Jan 6 09:04:15 2016 -0500

    xfree86: Create EDID atom from the root window callback (v2)
    
    v2: Fix swapped callback args
    
    Reviewed-by: Michel Dänzer <michel.daenzer at amd.com>
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/hw/xfree86/ddc/ddcProperty.c b/hw/xfree86/ddc/ddcProperty.c
index 53446b8..e68672e 100644
--- a/hw/xfree86/ddc/ddcProperty.c
+++ b/hw/xfree86/ddc/ddcProperty.c
@@ -57,29 +57,13 @@ setRootWindowEDID(ScreenPtr pScreen, xf86MonPtr DDC)
 }
 
 static void
-edidMakeAtom(int i, const char *name, xf86MonPtr DDC)
+addEDIDProp(CallbackListPtr *pcbl, void *scrn, void *screen)
 {
-    Atom atom;
-    unsigned char *atom_data;
-    int size = edidSize(DDC);
+    ScreenPtr pScreen = screen;
+    ScrnInfoPtr pScrn = scrn;
 
-    if (!(atom_data = malloc(size * sizeof(CARD8))))
-        return;
-
-    atom = MakeAtom(name, strlen(name), TRUE);
-    memcpy(atom_data, DDC->rawData, size);
-    xf86RegisterRootWindowProperty(i, atom, XA_INTEGER, 8, size, atom_data);
-}
-
-static void
-addRootWindowProperties(ScrnInfoPtr pScrn, xf86MonPtr DDC)
-{
-    int scrnIndex = pScrn->scrnIndex;
-
-    if (xf86Initialising)
-        edidMakeAtom(scrnIndex, EDID1_ATOM_NAME, DDC);
-    else
-        setRootWindowEDID(pScrn->pScreen, DDC);
+    if (xf86ScreenToScrn(pScreen) == pScrn)
+        setRootWindowEDID(pScreen, pScrn->monitor->DDC);
 }
 
 Bool
@@ -90,7 +74,10 @@ xf86SetDDCproperties(ScrnInfoPtr pScrn, xf86MonPtr DDC)
 
     xf86EdidMonitorSet(pScrn->scrnIndex, pScrn->monitor, DDC);
 
-    addRootWindowProperties(pScrn, DDC);
+    if (xf86Initialising)
+        AddCallback(&RootWindowFinalizeCallback, addEDIDProp, pScrn);
+    else
+        setRootWindowEDID(pScrn->pScreen, DDC);
 
     return TRUE;
 }
commit 8e3010d7d8e8c49c8859b576de1808ae7b2859be
Author: Adam Jackson <ajax at redhat.com>
Date:   Wed Jan 6 08:54:47 2016 -0500

    xfree86: Remove a never-hit diagnostic message
    
    Practically speaking, the EDID major version is never not 1.
    
    Reviewed-by: Michel Dänzer <michel.daenzer at amd.com>
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/hw/xfree86/ddc/ddcProperty.c b/hw/xfree86/ddc/ddcProperty.c
index e1b37db..53446b8 100644
--- a/hw/xfree86/ddc/ddcProperty.c
+++ b/hw/xfree86/ddc/ddcProperty.c
@@ -76,17 +76,10 @@ addRootWindowProperties(ScrnInfoPtr pScrn, xf86MonPtr DDC)
 {
     int scrnIndex = pScrn->scrnIndex;
 
-    if (DDC->ver.version == 1) {
-        if (xf86Initialising)
-            edidMakeAtom(scrnIndex, EDID1_ATOM_NAME, DDC);
-        else
-            setRootWindowEDID(pScrn->pScreen, DDC);
-    }
-    else {
-        xf86DrvMsg(scrnIndex, X_PROBED, "unexpected EDID version %d.%d\n",
-                   DDC->ver.version, DDC->ver.revision);
-        return;
-    }
+    if (xf86Initialising)
+        edidMakeAtom(scrnIndex, EDID1_ATOM_NAME, DDC);
+    else
+        setRootWindowEDID(pScrn->pScreen, DDC);
 }
 
 Bool
commit 7961377567f15dfad9d96c5c0a0992b38013d973
Author: Adam Jackson <ajax at redhat.com>
Date:   Wed Jan 6 08:47:37 2016 -0500

    xfree86: Make xf86SetDDCproperties work more than once (v2)
    
    We can call this more than once via xf86OutputSetEDID since hotplug is
    actually a thing in RANDR 1.2, but xf86RegisterRootWindowProperty merely
    adds the data to a list to be applied to the root at CreateWindow time,
    so calls past the first (for a given screen) would have no effect until
    server regen.
    
    Once we've initialised pScrn->pScreen is filled in, so we can just set
    the property directly.
    
    v2: Removed pointless version check, deobfuscate math (Walter Harms)
    
    Reviewed-by: Michel Dänzer <michel.daenzer at amd.com>
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/hw/xfree86/ddc/ddcProperty.c b/hw/xfree86/ddc/ddcProperty.c
index c51c3e6..e1b37db 100644
--- a/hw/xfree86/ddc/ddcProperty.c
+++ b/hw/xfree86/ddc/ddcProperty.c
@@ -27,6 +27,7 @@
 
 #include "xf86.h"
 #include "xf86DDC.h"
+#include "xf86Priv.h"
 #include <X11/Xatom.h>
 #include "property.h"
 #include "propertyst.h"
@@ -34,17 +35,39 @@
 
 #define EDID1_ATOM_NAME         "XFree86_DDC_EDID1_RAWDATA"
 
+static int
+edidSize(const xf86MonPtr DDC)
+{
+    int ret = 128;
+
+    if (DDC->flags & EDID_COMPLETE_RAWDATA)
+       ret += DDC->no_sections * 128;
+
+    return ret;
+}
+
 static void
-edidMakeAtom(int i, const char *name, CARD8 *data, int size)
+setRootWindowEDID(ScreenPtr pScreen, xf86MonPtr DDC)
+{
+    Atom atom = MakeAtom(EDID1_ATOM_NAME, strlen(EDID1_ATOM_NAME), TRUE);
+
+    dixChangeWindowProperty(serverClient, pScreen->root, atom, XA_INTEGER,
+                            8, PropModeReplace, edidSize(DDC), DDC->rawData,
+                            FALSE);
+}
+
+static void
+edidMakeAtom(int i, const char *name, xf86MonPtr DDC)
 {
     Atom atom;
     unsigned char *atom_data;
+    int size = edidSize(DDC);
 
     if (!(atom_data = malloc(size * sizeof(CARD8))))
         return;
 
     atom = MakeAtom(name, strlen(name), TRUE);
-    memcpy(atom_data, data, size);
+    memcpy(atom_data, DDC->rawData, size);
     xf86RegisterRootWindowProperty(i, atom, XA_INTEGER, 8, size, atom_data);
 }
 
@@ -54,10 +77,10 @@ addRootWindowProperties(ScrnInfoPtr pScrn, xf86MonPtr DDC)
     int scrnIndex = pScrn->scrnIndex;
 
     if (DDC->ver.version == 1) {
-        int size = 128 +
-            (DDC->flags & EDID_COMPLETE_RAWDATA ? DDC->no_sections * 128 : 0);
-
-        edidMakeAtom(scrnIndex, EDID1_ATOM_NAME, DDC->rawData, size);
+        if (xf86Initialising)
+            edidMakeAtom(scrnIndex, EDID1_ATOM_NAME, DDC);
+        else
+            setRootWindowEDID(pScrn->pScreen, DDC);
     }
     else {
         xf86DrvMsg(scrnIndex, X_PROBED, "unexpected EDID version %d.%d\n",
commit 8be83fff04a009109a956837ca983a96fd279711
Author: Adam Jackson <ajax at redhat.com>
Date:   Wed Jan 6 08:35:43 2016 -0500

    xfree86: Remove some leftovers from DisplayID support
    
    Reviewed-by: Michel Dänzer <michel.daenzer at amd.com>
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/hw/xfree86/ddc/ddcProperty.c b/hw/xfree86/ddc/ddcProperty.c
index fc63f0e..c51c3e6 100644
--- a/hw/xfree86/ddc/ddcProperty.c
+++ b/hw/xfree86/ddc/ddcProperty.c
@@ -53,11 +53,7 @@ addRootWindowProperties(ScrnInfoPtr pScrn, xf86MonPtr DDC)
 {
     int scrnIndex = pScrn->scrnIndex;
 
-    if (DDC->flags & MONITOR_DISPLAYID) {
-        /* Don't bother, use RANDR already */
-        return;
-    }
-    else if (DDC->ver.version == 1) {
+    if (DDC->ver.version == 1) {
         int size = 128 +
             (DDC->flags & EDID_COMPLETE_RAWDATA ? DDC->no_sections * 128 : 0);
 
@@ -76,9 +72,7 @@ xf86SetDDCproperties(ScrnInfoPtr pScrn, xf86MonPtr DDC)
     if (!pScrn || !pScrn->monitor || !DDC)
         return FALSE;
 
-    if (DDC->flags & MONITOR_DISPLAYID);
-    else
-        xf86EdidMonitorSet(pScrn->scrnIndex, pScrn->monitor, DDC);
+    xf86EdidMonitorSet(pScrn->scrnIndex, pScrn->monitor, DDC);
 
     addRootWindowProperties(pScrn, DDC);
 
diff --git a/hw/xfree86/ddc/edid.h b/hw/xfree86/ddc/edid.h
index 4c2da51..750e427 100644
--- a/hw/xfree86/ddc/edid.h
+++ b/hw/xfree86/ddc/edid.h
@@ -537,7 +537,6 @@ struct detailed_monitor_section {
 #define MONITOR_EDID_COMPLETE_RAWDATA	0x01
 /* old, don't use */
 #define EDID_COMPLETE_RAWDATA		0x01
-#define MONITOR_DISPLAYID		0x02
 
 /*
  * For DisplayID devices, only the scrnIndex, flags, and rawData fields
commit 0cd2a24b61ef1583fc6b3fec7d01c7481cc97d52
Author: Adam Jackson <ajax at redhat.com>
Date:   Wed Jan 6 08:30:07 2016 -0500

    xfree86: Unexport xf86Initialising, remove xf86ServerIsInitialising
    
    Neither of these are used from outside the server.
    
    Reviewed-by: Michel Dänzer <michel.daenzer at amd.com>
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/hw/xfree86/common/xf86.h b/hw/xfree86/common/xf86.h
index 1cde478..38b901f 100644
--- a/hw/xfree86/common/xf86.h
+++ b/hw/xfree86/common/xf86.h
@@ -306,8 +306,6 @@ xf86ServerIsExiting(void);
 extern _X_EXPORT Bool
 xf86ServerIsResetting(void);
 extern _X_EXPORT Bool
-xf86ServerIsInitialising(void);
-extern _X_EXPORT Bool
 xf86ServerIsOnlyDetecting(void);
 extern _X_EXPORT Bool
 xf86CaughtSignal(void);
diff --git a/hw/xfree86/common/xf86Helper.c b/hw/xfree86/common/xf86Helper.c
index 3b01a49..e6dd4a6 100644
--- a/hw/xfree86/common/xf86Helper.c
+++ b/hw/xfree86/common/xf86Helper.c
@@ -1516,12 +1516,6 @@ xf86ServerIsResetting(void)
 }
 
 Bool
-xf86ServerIsInitialising(void)
-{
-    return xf86Initialising;
-}
-
-Bool
 xf86ServerIsOnlyDetecting(void)
 {
     return xf86DoConfigure;
diff --git a/hw/xfree86/common/xf86Priv.h b/hw/xfree86/common/xf86Priv.h
index 6e374eb..ad3f2b9 100644
--- a/hw/xfree86/common/xf86Priv.h
+++ b/hw/xfree86/common/xf86Priv.h
@@ -86,7 +86,7 @@ extern _X_EXPORT serverLayoutRec xf86ConfigLayout;
 extern _X_EXPORT DriverPtr *xf86DriverList;
 extern _X_EXPORT int xf86NumDrivers;
 extern _X_EXPORT Bool xf86Resetting;
-extern _X_EXPORT Bool xf86Initialising;
+extern Bool xf86Initialising;
 extern _X_EXPORT int xf86NumScreens;
 extern _X_EXPORT const char *xf86VisualNames[];
 extern _X_EXPORT int xf86Verbose;       /* verbosity level */
diff --git a/hw/xfree86/doc/ddxDesign.xml b/hw/xfree86/doc/ddxDesign.xml
index 53647d0..f7d6628 100644
--- a/hw/xfree86/doc/ddxDesign.xml
+++ b/hw/xfree86/doc/ddxDesign.xml
@@ -2054,18 +2054,6 @@ functions is as follows:
 
       <blockquote><para>
 	  <programlisting>
-    Bool xf86ServerIsInitialising();
-	  </programlisting>
-	  <blockquote><para>
-      Returns <constant>TRUE</constant> if the server is at the beginning of
-      a generation and is in the process of initialising, and
-      <constant>FALSE</constant> otherwise.
-	    </para></blockquote>
-
-	</para></blockquote>
-
-      <blockquote><para>
-	  <programlisting>
     Bool xf86ServerIsOnlyProbing();
 	  </programlisting>
 	  <blockquote><para>
commit e70ee11a39b957141fbc565d79d128a46fac5f34
Author: Adam Jackson <ajax at redhat.com>
Date:   Tue Jan 5 16:27:41 2016 -0500

    xfree86: Create VT atoms from the root window callback (v2)
    
    v2: Fix swapped callback args
    
    Reviewed-by: Michel Dänzer <michel.daenzer at amd.com>
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
index f5f407e..744af7c 100644
--- a/hw/xfree86/common/xf86Init.c
+++ b/hw/xfree86/common/xf86Init.c
@@ -381,10 +381,28 @@ AddSeatId(CallbackListPtr *pcbl, void *data, void *screen)
                    "Failed to register seat property\n");
 }
 
-/* The memory storing the initial value of the XFree86_has_VT root window
- * property.  This has to remain available until server start-up, so we just
- * use a global. */
-static CARD32 HasVTValue = 1;
+static void
+AddVTAtoms(CallbackListPtr *pcbl, void *data, void *screen)
+{
+#define VT_ATOM_NAME         "XFree86_VT"
+    int err, HasVT = 1;
+    ScreenPtr pScreen = screen;
+    Atom VTAtom = MakeAtom(VT_ATOM_NAME, sizeof(VT_ATOM_NAME) - 1, TRUE);
+    Atom HasVTAtom = MakeAtom(HAS_VT_ATOM_NAME, sizeof(HAS_VT_ATOM_NAME) - 1,
+                              TRUE);
+
+    err = dixChangeWindowProperty(serverClient, pScreen->root, VTAtom,
+                                  XA_INTEGER, 32, PropModeReplace, 1,
+                                  &xf86Info.vtno, FALSE);
+
+    err |= dixChangeWindowProperty(serverClient, pScreen->root, HasVTAtom,
+                                   XA_INTEGER, 32, PropModeReplace, 1,
+                                   &HasVT, FALSE);
+
+    if (err != Success)
+        xf86DrvMsg(pScreen->myNum, X_WARNING,
+                   "Failed to register VT properties\n");
+}
 
 /*
  * InitOutput --
@@ -727,44 +745,6 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv)
         }
         formatsDone = TRUE;
 
-        if (xf86Info.vtno >= 0) {
-#define VT_ATOM_NAME         "XFree86_VT"
-            Atom VTAtom = -1;
-            Atom HasVTAtom = -1;
-            CARD32 *VT = NULL;
-            CARD32 *HasVT = &HasVTValue;
-            int ret;
-
-            /* This memory needs to stay available until the screen has been
-               initialized, and we can create the property for real.
-             */
-            if ((VT = malloc(sizeof(CARD32))) == NULL) {
-                FatalError
-                    ("Unable to make VT property - out of memory. Exiting...\n");
-            }
-            *VT = xf86Info.vtno;
-
-            VTAtom = MakeAtom(VT_ATOM_NAME, sizeof(VT_ATOM_NAME) - 1, TRUE);
-            HasVTAtom = MakeAtom(HAS_VT_ATOM_NAME,
-                                 sizeof(HAS_VT_ATOM_NAME) - 1, TRUE);
-
-            for (i = 0, ret = Success; i < xf86NumScreens && ret == Success;
-                 i++) {
-                ret =
-                    xf86RegisterRootWindowProperty(xf86Screens[i]->scrnIndex,
-                                                   VTAtom, XA_INTEGER, 32, 1,
-                                                   VT);
-                if (ret == Success)
-                    ret = xf86RegisterRootWindowProperty(xf86Screens[i]
-                                                             ->scrnIndex,
-                                                         HasVTAtom, XA_INTEGER,
-                                                         32, 1, HasVT);
-                if (ret != Success)
-                    xf86DrvMsg(xf86Screens[i]->scrnIndex, X_WARNING,
-                               "Failed to register VT properties\n");
-            }
-        }
-
         /* If a screen uses depth 24, show what the pixmap format is */
         for (i = 0; i < xf86NumScreens; i++) {
             if (xf86Screens[i]->depth == 24) {
@@ -798,6 +778,9 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv)
             xf86EnableIO();
     }
 
+    if (xf86Info.vtno >= 0)
+        AddCallback(&RootWindowFinalizeCallback, AddVTAtoms, NULL);
+
     if (SeatId)
         AddCallback(&RootWindowFinalizeCallback, AddSeatId, SeatId);
 
commit da9ee1eddd65d00788cef8a3becfad948c0a2168
Author: Adam Jackson <ajax at redhat.com>
Date:   Tue Jan 5 16:11:42 2016 -0500

    xfree86: Create seat atom from the root window callback (v2)
    
    v2: Fix swapped callback args
    
    Reviewed-by: Michel Dänzer <michel.daenzer at amd.com>
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
index de51497..f5f407e 100644
--- a/hw/xfree86/common/xf86Init.c
+++ b/hw/xfree86/common/xf86Init.c
@@ -365,6 +365,22 @@ InstallSignalHandlers(void)
     }
 }
 
+static void
+AddSeatId(CallbackListPtr *pcbl, void *data, void *screen)
+{
+    ScreenPtr pScreen = screen;
+    Atom SeatAtom = MakeAtom(SEAT_ATOM_NAME, sizeof(SEAT_ATOM_NAME) - 1, TRUE);
+    int err;
+
+    err = dixChangeWindowProperty(serverClient, pScreen->root, SeatAtom,
+                                  XA_STRING, 8, PropModeReplace,
+                                  strlen(data) + 1, data, FALSE);
+
+    if (err != Success)
+        xf86DrvMsg(pScreen->myNum, X_WARNING,
+                   "Failed to register seat property\n");
+}
+
 /* The memory storing the initial value of the XFree86_has_VT root window
  * property.  This has to remain available until server start-up, so we just
  * use a global. */
@@ -749,26 +765,6 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv)
             }
         }
 
-        if (SeatId) {
-            Atom SeatAtom;
-
-            SeatAtom =
-                MakeAtom(SEAT_ATOM_NAME, sizeof(SEAT_ATOM_NAME) - 1, TRUE);
-
-            for (i = 0; i < xf86NumScreens; i++) {
-                int ret;
-
-                ret = xf86RegisterRootWindowProperty(xf86Screens[i]->scrnIndex,
-                                                     SeatAtom, XA_STRING, 8,
-                                                     strlen(SeatId) + 1,
-                                                     SeatId);
-                if (ret != Success) {
-                    xf86DrvMsg(xf86Screens[i]->scrnIndex, X_WARNING,
-                               "Failed to register seat property\n");
-                }
-            }
-        }
-
         /* If a screen uses depth 24, show what the pixmap format is */
         for (i = 0; i < xf86NumScreens; i++) {
             if (xf86Screens[i]->depth == 24) {
@@ -802,6 +798,9 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv)
             xf86EnableIO();
     }
 
+    if (SeatId)
+        AddCallback(&RootWindowFinalizeCallback, AddSeatId, SeatId);
+
     /*
      * Use the previously collected parts to setup pScreenInfo
      */
commit 2c3a3afb5104714b637c1c4aea195df73e0fa918
Author: Adam Jackson <ajax at redhat.com>
Date:   Tue Jan 5 15:56:42 2016 -0500

    dix: Add RootWindowFinalizeCallback
    
    Reviewed-by: Michel Dänzer <michel.daenzer at amd.com>
    Signed-off-by: Adam Jackson <ajax at redhat.com>

diff --git a/dix/main.c b/dix/main.c
index 661ab03..77e0f2e 100644
--- a/dix/main.c
+++ b/dix/main.c
@@ -129,6 +129,8 @@ pthread_cond_t serverRunningCond = PTHREAD_COND_INITIALIZER;
 
 #endif
 
+CallbackListPtr RootWindowFinalizeCallback = NULL;
+
 int
 dix_main(int argc, char *argv[], char *envp[])
 {
@@ -230,6 +232,7 @@ dix_main(int argc, char *argv[], char *envp[])
                 FatalError("failed to create default stipple");
             if (!CreateRootWindow(pScreen))
                 FatalError("failed to create root window");
+            CallCallbacks(&RootWindowFinalizeCallback, pScreen);
         }
 
         if (SetDefaultFontPath(defaultFontPath) != Success) {
diff --git a/include/dix.h b/include/dix.h
index d49d055..f63606a 100644
--- a/include/dix.h
+++ b/include/dix.h
@@ -594,6 +594,8 @@ typedef struct {
     DeviceIntPtr device;
 } DeviceEventInfoRec;
 
+extern _X_EXPORT CallbackListPtr RootWindowFinalizeCallback;
+
 extern int
 XItoCoreType(int xi_type);
 extern Bool


More information about the xorg-commit mailing list