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