diff options
author | Dave Airlie <airlied@redhat.com> | 2009-09-29 11:49:09 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2009-09-30 10:00:07 +1000 |
commit | 6ffda5aae75272fabdc27d6f693ae827be119e95 (patch) | |
tree | 2ccf117a3972e9e83aa38278b25f1a6744abce0d /composite | |
parent | ad5c0d9efa47476ed5cf75c82265c73919e468b4 (diff) |
dix/glx/composite: consolidate visual resize in one place.
The previous code was copied and in both cases incorrectly fixed
up the colormaps after resizing the visuals, this patch consolidates
the visual resize + colormaps fixups in one place. This version
also consolidates the vid allocation for the DepthPtr inside the
function.
I'm not 100% sure colormap.[ch] is the correct place for this but
visuals are mostly created in fb and I know thats not the place to
be resizing them.
Fixes fd.o bug #19470.
Signed-off-by: Dave Airlie <airlied@redhat.com>
Reviewed-by: Keith Packard <keithp@keithp.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Diffstat (limited to 'composite')
-rw-r--r-- | composite/compinit.c | 59 |
1 files changed, 4 insertions, 55 deletions
diff --git a/composite/compinit.c b/composite/compinit.c index 6159e4e49..96ac70fd0 100644 --- a/composite/compinit.c +++ b/composite/compinit.c @@ -248,15 +248,9 @@ static Bool compAddAlternateVisual(ScreenPtr pScreen, CompScreenPtr cs, CompAlternateVisual *alt) { - VisualPtr visual, visuals; - int i; - int numVisuals; - XID *installedCmaps; - ColormapPtr installedCmap; - int numInstalledCmaps; + VisualPtr visual; DepthPtr depth; PictFormatPtr pPictFormat; - VisualID *vid; unsigned long alphaMask; /* @@ -277,54 +271,13 @@ compAddAlternateVisual(ScreenPtr pScreen, CompScreenPtr cs, pPictFormat->direct.red != pScreen->visuals[0].offsetRed) return FALSE; - vid = xalloc(sizeof(VisualID)); - if (!vid) - return FALSE; - - /* Find the installed colormaps */ - installedCmaps = xalloc (pScreen->maxInstalledCmaps * sizeof (XID)); - if (!installedCmaps) { - xfree(vid); - return FALSE; - } - numInstalledCmaps = pScreen->ListInstalledColormaps(pScreen, - installedCmaps); - - /* realloc the visual array to fit the new one in place */ - numVisuals = pScreen->numVisuals; - visuals = xrealloc(pScreen->visuals, (numVisuals + 1) * sizeof(VisualRec)); - if (!visuals) { - xfree(vid); - xfree(installedCmaps); - return FALSE; + if (ResizeVisualArray(pScreen, 1, depth) == FALSE) { + return FALSE; } - /* - * Fix up any existing installed colormaps -- we'll assume that - * the only ones created so far have been installed. If this - * isn't true, we'll have to walk the resource database looking - * for all colormaps. - */ - for (i = 0; i < numInstalledCmaps; i++) { - int j, rc; - - rc = dixLookupResourceByType((pointer *)&installedCmap, - installedCmaps[i], RT_COLORMAP, - serverClient, DixReadAccess); - if (rc != Success) - continue; - j = installedCmap->pVisual - pScreen->visuals; - installedCmap->pVisual = &visuals[j]; - } - - xfree(installedCmaps); - - pScreen->visuals = visuals; - visual = visuals + pScreen->numVisuals; /* the new one */ - pScreen->numVisuals++; + visual = pScreen->visuals + (pScreen->numVisuals - 1); /* the new one */ /* Initialize the visual */ - visual->vid = FakeClientID (0); visual->bitsPerRGBValue = 8; if (PICT_FORMAT_TYPE(alt->format) == PICT_TYPE_COLOR) { visual->class = PseudoColor; @@ -357,10 +310,6 @@ compAddAlternateVisual(ScreenPtr pScreen, CompScreenPtr cs, /* remember the visual ID to detect auto-update windows */ compRegisterAlternateVisuals(cs, &visual->vid, 1); - /* Fix up the depth */ - *vid = visual->vid; - depth->numVids = 1; - depth->vids = vid; return TRUE; } |