From e89c7f1c2a0ea3480b21446e413073c1427285ae Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Wed, 6 Jan 2016 09:04:15 -0500 Subject: [PATCH] xfree86: Create EDID atom from the root window callback (v2) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit v2: Fix swapped callback args Reviewed-by: Michel Dänzer Signed-off-by: Adam Jackson --- hw/xfree86/ddc/ddcProperty.c | 31 +++++++++---------------------- 1 file changed, 9 insertions(+), 22 deletions(-) diff --git a/hw/xfree86/ddc/ddcProperty.c b/hw/xfree86/ddc/ddcProperty.c index 53446b8d6..e68672e43 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; }