Rebased ref, commits from common ancestor: commit f91df55b5a09a81e0424a8b732bfda0245ff5414 Author: Jeremy Huddleston Sequoia <jeremyhu@apple.com> Date: Sat Nov 2 11:00:23 2013 -0700 Use old miTrapezoids and miTriangles routines Reverts commits: 788ccb9a8bcf6a4fb4054c507111eec3338fb969 566f1931ee2916269e164e114bffaf2da1d039d1 http://xquartz.macosforge.org/trac/ticket/525 Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com> diff --git a/fb/fbpict.c b/fb/fbpict.c index dc0ca3c..276ff06 100644 --- a/fb/fbpict.c +++ b/fb/fbpict.c @@ -326,10 +326,8 @@ fbPictureInit(ScreenPtr pScreen, PictFormatPtr formats, int nformats) ps->Glyphs = miGlyphs; ps->CompositeRects = miCompositeRects; ps->RasterizeTrapezoid = fbRasterizeTrapezoid; - ps->Trapezoids = fbTrapezoids; ps->AddTraps = fbAddTraps; ps->AddTriangles = fbAddTriangles; - ps->Triangles = fbTriangles; return TRUE; } diff --git a/render/mipict.c b/render/mipict.c index 2e64b20..d21b58a 100644 --- a/render/mipict.c +++ b/render/mipict.c @@ -595,8 +595,8 @@ miPictureInit(ScreenPtr pScreen, PictFormatPtr formats, int nformats) ps->Composite = 0; /* requires DDX support */ ps->Glyphs = miGlyphs; ps->CompositeRects = miCompositeRects; - ps->Trapezoids = 0; - ps->Triangles = 0; + ps->Trapezoids = miTrapezoids; + ps->Triangles = miTriangles; ps->RasterizeTrapezoid = 0; /* requires DDX support */ ps->AddTraps = 0; /* requires DDX support */ diff --git a/render/mipict.h b/render/mipict.h index 9436228..7ee2991 100644 --- a/render/mipict.h +++ b/render/mipict.h @@ -122,6 +122,16 @@ miCompositeRects(CARD8 op, xRenderColor * color, int nRect, xRectangle *rects); extern _X_EXPORT void +miTriangles (CARD8 op, + PicturePtr pSrc, + PicturePtr pDst, + PictFormatPtr maskFormat, + INT16 xSrc, + INT16 ySrc, + int ntri, + xTriangle *tris); + +extern _X_EXPORT void miTriStrip(CARD8 op, PicturePtr pSrc, @@ -137,10 +147,27 @@ miTriFan(CARD8 op, PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int npoints, xPointFixed * points); +extern _X_EXPORT PicturePtr +miCreateAlphaPicture (ScreenPtr pScreen, + PicturePtr pDst, + PictFormatPtr pPictFormat, + CARD16 width, + CARD16 height); + extern _X_EXPORT void miTrapezoidBounds(int ntrap, xTrapezoid * traps, BoxPtr box); extern _X_EXPORT void +miTrapezoids (CARD8 op, + PicturePtr pSrc, + PicturePtr pDst, + PictFormatPtr maskFormat, + INT16 xSrc, + INT16 ySrc, + int ntrap, + xTrapezoid *traps); + +extern _X_EXPORT void miPointFixedBounds(int npoint, xPointFixed * points, BoxPtr bounds); extern _X_EXPORT void diff --git a/render/mitrap.c b/render/mitrap.c index 17b6dcd..71c1857 100644 --- a/render/mitrap.c +++ b/render/mitrap.c @@ -34,6 +34,55 @@ #include "picturestr.h" #include "mipict.h" +PicturePtr +miCreateAlphaPicture (ScreenPtr pScreen, + PicturePtr pDst, + PictFormatPtr pPictFormat, + CARD16 width, + CARD16 height) +{ + PixmapPtr pPixmap; + PicturePtr pPicture; + GCPtr pGC; + int error; + xRectangle rect; + + if (width > 32767 || height > 32767) + return 0; + + if (!pPictFormat) + { + if (pDst->polyEdge == PolyEdgeSharp) + pPictFormat = PictureMatchFormat (pScreen, 1, PICT_a1); + else + pPictFormat = PictureMatchFormat (pScreen, 8, PICT_a8); + if (!pPictFormat) + return 0; + } + + pPixmap = (*pScreen->CreatePixmap) (pScreen, width, height, + pPictFormat->depth, 0); + if (!pPixmap) + return 0; + pGC = GetScratchGC (pPixmap->drawable.depth, pScreen); + if (!pGC) + { + (*pScreen->DestroyPixmap) (pPixmap); + return 0; + } + ValidateGC (&pPixmap->drawable, pGC); + rect.x = 0; + rect.y = 0; + rect.width = width; + rect.height = height; + (*pGC->ops->PolyFillRect)(&pPixmap->drawable, pGC, 1, &rect); + FreeScratchGC (pGC); + pPicture = CreatePicture (0, &pPixmap->drawable, pPictFormat, + 0, 0, serverClient, &error); + (*pScreen->DestroyPixmap) (pPixmap); + return pPicture; +} + static xFixed miLineFixedX(xLineFixed * l, xFixed y, Bool ceil) { @@ -79,3 +128,65 @@ miTrapezoidBounds(int ntrap, xTrapezoid * traps, BoxPtr box) box->x2 = x2; } } + + +void +miTrapezoids (CARD8 op, + PicturePtr pSrc, + PicturePtr pDst, + PictFormatPtr maskFormat, + INT16 xSrc, + INT16 ySrc, + int ntrap, + xTrapezoid *traps) +{ + ScreenPtr pScreen = pDst->pDrawable->pScreen; + PictureScreenPtr ps = GetPictureScreen(pScreen); + + /* + * Check for solid alpha add + */ + if (op == PictOpAdd && miIsSolidAlpha (pSrc)) + { + for (; ntrap; ntrap--, traps++) + (*ps->RasterizeTrapezoid) (pDst, traps, 0, 0); + } + else if (maskFormat) + { + PicturePtr pPicture; + BoxRec bounds; + INT16 xDst, yDst; + INT16 xRel, yRel; + + xDst = traps[0].left.p1.x >> 16; + yDst = traps[0].left.p1.y >> 16; + + miTrapezoidBounds (ntrap, traps, &bounds); + if (bounds.y1 >= bounds.y2 || bounds.x1 >= bounds.x2) + return; + pPicture = miCreateAlphaPicture (pScreen, pDst, maskFormat, + bounds.x2 - bounds.x1, + bounds.y2 - bounds.y1); + if (!pPicture) + return; + for (; ntrap; ntrap--, traps++) + (*ps->RasterizeTrapezoid) (pPicture, traps, + -bounds.x1, -bounds.y1); + xRel = bounds.x1 + xSrc - xDst; + yRel = bounds.y1 + ySrc - yDst; + CompositePicture (op, pSrc, pPicture, pDst, + xRel, yRel, 0, 0, bounds.x1, bounds.y1, + bounds.x2 - bounds.x1, + bounds.y2 - bounds.y1); + FreePicture (pPicture, 0); + } + else + { + if (pDst->polyEdge == PolyEdgeSharp) + maskFormat = PictureMatchFormat (pScreen, 1, PICT_a1); + else + maskFormat = PictureMatchFormat (pScreen, 8, PICT_a8); + for (; ntrap; ntrap--, traps++) + miTrapezoids (op, pSrc, pDst, maskFormat, xSrc, ySrc, 1, traps); + } +} diff --git a/render/mitri.c b/render/mitri.c index 922f22a..bdca9ca 100644 --- a/render/mitri.c +++ b/render/mitri.c @@ -65,3 +65,64 @@ miTriangleBounds(int ntri, xTriangle * tris, BoxPtr bounds) { miPointFixedBounds(ntri * 3, (xPointFixed *) tris, bounds); } + + +void +miTriangles (CARD8 op, + PicturePtr pSrc, + PicturePtr pDst, + PictFormatPtr maskFormat, + INT16 xSrc, + INT16 ySrc, + int ntri, + xTriangle *tris) +{ + ScreenPtr pScreen = pDst->pDrawable->pScreen; + PictureScreenPtr ps = GetPictureScreen(pScreen); + + /* + * Check for solid alpha add + */ + if (op == PictOpAdd && miIsSolidAlpha (pSrc)) + { + (*ps->AddTriangles) (pDst, 0, 0, ntri, tris); + } + else if (maskFormat) + { + BoxRec bounds; + PicturePtr pPicture; + INT16 xDst, yDst; + INT16 xRel, yRel; + + xDst = tris[0].p1.x >> 16; + yDst = tris[0].p1.y >> 16; + + miTriangleBounds (ntri, tris, &bounds); + if (bounds.x2 <= bounds.x1 || bounds.y2 <= bounds.y1) + return; + pPicture = miCreateAlphaPicture (pScreen, pDst, maskFormat, + bounds.x2 - bounds.x1, + bounds.y2 - bounds.y1); + if (!pPicture) + return; + (*ps->AddTriangles) (pPicture, -bounds.x1, -bounds.y1, ntri, tris); + + xRel = bounds.x1 + xSrc - xDst; + yRel = bounds.y1 + ySrc - yDst; + CompositePicture (op, pSrc, pPicture, pDst, + xRel, yRel, 0, 0, bounds.x1, bounds.y1, + bounds.x2 - bounds.x1, bounds.y2 - bounds.y1); + FreePicture (pPicture, 0); + } + else + { + if (pDst->polyEdge == PolyEdgeSharp) + maskFormat = PictureMatchFormat (pScreen, 1, PICT_a1); + else + maskFormat = PictureMatchFormat (pScreen, 8, PICT_a8); + + for (; ntri; ntri--, tris++) + miTriangles (op, pSrc, pDst, maskFormat, xSrc, ySrc, 1, tris); + } +} + commit 77465d4a59c79c890bdbd0e794bf28b72efab7c2 Author: Jeremy Huddleston Sequoia <jeremyhu@apple.com> Date: Tue Dec 18 01:03:38 2012 -0800 fb: Revert fb changes that broke XQuartz http://bugs.freedesktop.org/show_bug.cgi?id=26124 Revert "Use new pixman_glyph_cache_t API that will be in pixman 0.28.0" This reverts commit 9cbcb5bd6a5360a128d15b77a02d8d3351f74366. diff --git a/configure.ac b/configure.ac index 3860f9d..5983067 100644 --- a/configure.ac +++ b/configure.ac @@ -811,7 +811,7 @@ LIBPCIACCESS="pciaccess >= 0.12.901" LIBUDEV="libudev >= 143" LIBSELINUX="libselinux >= 2.0.86" LIBDBUS="dbus-1 >= 1.0" -LIBPIXMAN="pixman-1 >= 0.27.2" +LIBPIXMAN="pixman-1 >= 0.21.8" dnl Pixman is always required, but we separate it out so we can link dnl specific modules against it diff --git a/fb/fb.h b/fb/fb.h index 895b148..cc5759c 100644 --- a/fb/fb.h +++ b/fb/fb.h @@ -1344,9 +1344,6 @@ extern _X_EXPORT void extern _X_EXPORT Bool fbPictureInit(ScreenPtr pScreen, PictFormatPtr formats, int nformats); -extern _X_EXPORT void -fbDestroyGlyphCache(void); - /* * fbpixmap.c */ diff --git a/fb/fbpict.c b/fb/fbpict.c index 80c2a91..dc0ca3c 100644 --- a/fb/fbpict.c +++ b/fb/fbpict.c @@ -65,156 +65,6 @@ fbComposite(CARD8 op, free_pixman_pict(pDst, dest); } -static pixman_glyph_cache_t *glyphCache; - -void -fbDestroyGlyphCache(void) -{ - if (glyphCache) - { - pixman_glyph_cache_destroy (glyphCache); - glyphCache = NULL; - } -} - -static void -fbUnrealizeGlyph(ScreenPtr pScreen, - GlyphPtr pGlyph) -{ - if (glyphCache) - pixman_glyph_cache_remove (glyphCache, pGlyph, NULL); -} - -static void -fbGlyphs(CARD8 op, - PicturePtr pSrc, - PicturePtr pDst, - PictFormatPtr maskFormat, - INT16 xSrc, - INT16 ySrc, int nlist, - GlyphListPtr list, - GlyphPtr *glyphs) -{ -#define N_STACK_GLYPHS 512 - ScreenPtr pScreen = pDst->pDrawable->pScreen; - pixman_glyph_t stack_glyphs[N_STACK_GLYPHS]; - pixman_glyph_t *pglyphs = stack_glyphs; - pixman_image_t *srcImage, *dstImage; - int srcXoff, srcYoff, dstXoff, dstYoff; - GlyphPtr glyph; - int n_glyphs; - int x, y; - int i, n; - int xDst = list->xOff, yDst = list->yOff; - - miCompositeSourceValidate(pSrc); - - n_glyphs = 0; - for (i = 0; i < nlist; ++i) - n_glyphs += list[i].len; - - if (!glyphCache) - glyphCache = pixman_glyph_cache_create(); - - pixman_glyph_cache_freeze (glyphCache); - - if (n_glyphs > N_STACK_GLYPHS) { - if (!(pglyphs = malloc (n_glyphs * sizeof (pixman_glyph_t)))) - goto out; - } - - i = 0; - x = y = 0; - while (nlist--) { - x += list->xOff; - y += list->yOff; - n = list->len; - while (n--) { - const void *g; - - glyph = *glyphs++; - - if (!(g = pixman_glyph_cache_lookup (glyphCache, glyph, NULL))) { - pixman_image_t *glyphImage; - PicturePtr pPicture; - int xoff, yoff; - - pPicture = GetGlyphPicture(glyph, pScreen); - if (!pPicture) { - n_glyphs--; - goto next; - } - - if (!(glyphImage = image_from_pict(pPicture, FALSE, &xoff, &yoff))) - goto out; - - g = pixman_glyph_cache_insert(glyphCache, glyph, NULL, - glyph->info.x, - glyph->info.y, - glyphImage); - - free_pixman_pict(pPicture, glyphImage); - - if (!g) - goto out; - } - - pglyphs[i].x = x; - pglyphs[i].y = y; - pglyphs[i].glyph = g; - i++; - - next: - x += glyph->info.xOff; - y += glyph->info.yOff; - } - list++; - } - - if (!(srcImage = image_from_pict(pSrc, FALSE, &srcXoff, &srcYoff))) - goto out; - - if (!(dstImage = image_from_pict(pDst, TRUE, &dstXoff, &dstYoff))) - goto out_free_src; - - if (maskFormat) { - pixman_format_code_t format; - pixman_box32_t extents; - int x, y; - - format = maskFormat->format | (maskFormat->depth << 24); - - pixman_glyph_get_extents(glyphCache, n_glyphs, pglyphs, &extents); - - x = extents.x1; - y = extents.y1; - - pixman_composite_glyphs(op, srcImage, dstImage, format, - xSrc + srcXoff + xDst, ySrc + srcYoff + yDst, - x, y, - x + dstXoff, y + dstYoff, - extents.x2 - extents.x1, - extents.y2 - extents.y1, - glyphCache, n_glyphs, pglyphs); - } - else { - pixman_composite_glyphs_no_mask(op, srcImage, dstImage, - xSrc + srcXoff - xDst, ySrc + srcYoff - yDst, - dstXoff, dstYoff, - glyphCache, n_glyphs, pglyphs); - } - - free_pixman_pict(pDst, dstImage); - -out_free_src: - free_pixman_pict(pSrc, srcImage); - -out: - pixman_glyph_cache_thaw(glyphCache); - if (pglyphs != stack_glyphs) - free(pglyphs); -} - static pixman_image_t * create_solid_fill_image(PicturePtr pict) { @@ -473,8 +323,7 @@ fbPictureInit(ScreenPtr pScreen, PictFormatPtr formats, int nformats) return FALSE; ps = GetPictureScreen(pScreen); ps->Composite = fbComposite; - ps->Glyphs = fbGlyphs; - ps->UnrealizeGlyph = fbUnrealizeGlyph; + ps->Glyphs = miGlyphs; ps->CompositeRects = miCompositeRects; ps->RasterizeTrapezoid = fbRasterizeTrapezoid; ps->Trapezoids = fbTrapezoids; diff --git a/fb/fbscreen.c b/fb/fbscreen.c index f9080a4..7c7d656 100644 --- a/fb/fbscreen.c +++ b/fb/fbscreen.c @@ -32,7 +32,6 @@ fbCloseScreen(ScreenPtr pScreen) int d; DepthPtr depths = pScreen->allowedDepths; - fbDestroyGlyphCache(); for (d = 0; d < pScreen->numDepths; d++) free(depths[d].vids); free(depths); commit 21a03c586ac79e4d0398dbb3834eb8779619261b Author: Jeremy Huddleston <jeremyhu@apple.com> Date: Fri Feb 12 19:48:52 2010 -0800 fb: Revert fb changes that broke XQuartz http://bugs.freedesktop.org/show_bug.cgi?id=26124 Revert "Fix source pictures getting random transforms after 2d6a8f668342a5190cdf43b5." Revert "fb: Adjust transform or composite coordinates for pixman operations" http://bugs.freedesktop.org/26124 This reverts commit a72c65e9176c51de95db2fdbf4c5d946a4911695. This reverts commit a6bd5d2e482a5aa84acb3d4932e2a166d8670ef1. Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com> diff --git a/fb/fb.h b/fb/fb.h index b869d12..895b148 100644 --- a/fb/fb.h +++ b/fb/fb.h @@ -1686,8 +1686,7 @@ fbFillRegionSolid(DrawablePtr pDrawable, RegionPtr pRegion, FbBits and, FbBits xor); extern _X_EXPORT pixman_image_t *image_from_pict(PicturePtr pict, - Bool has_clip, - int *xoff, int *yoff); + Bool has_clip); extern _X_EXPORT void free_pixman_pict(PicturePtr, pixman_image_t *); diff --git a/fb/fbpict.c b/fb/fbpict.c index 2804ff4..80c2a91 100644 --- a/fb/fbpict.c +++ b/fb/fbpict.c @@ -46,23 +46,18 @@ fbComposite(CARD8 op, INT16 yMask, INT16 xDst, INT16 yDst, CARD16 width, CARD16 height) { pixman_image_t *src, *mask, *dest; - int src_xoff, src_yoff; - int msk_xoff, msk_yoff; - int dst_xoff, dst_yoff; - miCompositeSourceValidate(pSrc); if (pMask) miCompositeSourceValidate(pMask); - src = image_from_pict(pSrc, FALSE, &src_xoff, &src_yoff); - mask = image_from_pict(pMask, FALSE, &msk_xoff, &msk_yoff); - dest = image_from_pict(pDst, TRUE, &dst_xoff, &dst_yoff); + src = image_from_pict(pSrc, TRUE); + mask = image_from_pict(pMask, TRUE); + dest = image_from_pict(pDst, TRUE); if (src && dest && !(pMask && !mask)) { pixman_image_composite(op, src, mask, dest, - xSrc + src_xoff, ySrc + src_yoff, - xMask + msk_xoff, yMask + msk_yoff, - xDst + dst_xoff, yDst + dst_yoff, width, height); + xSrc, ySrc, xMask, yMask, xDst, yDst, + width, height); } free_pixman_pict(pSrc, src); @@ -293,20 +288,22 @@ create_conical_gradient_image(PictGradient * gradient) } static pixman_image_t * -create_bits_picture(PicturePtr pict, Bool has_clip, int *xoff, int *yoff) +create_bits_picture(PicturePtr pict, Bool has_clip) { - PixmapPtr pixmap; FbBits *bits; FbStride stride; - int bpp; + int bpp, xoff, yoff; pixman_image_t *image; - fbGetDrawablePixmap(pict->pDrawable, pixmap, *xoff, *yoff); - fbGetPixmapBitsData(pixmap, bits, stride, bpp); + fbGetDrawable (pict->pDrawable, bits, stride, bpp, xoff, yoff); + + bits = (FbBits*)((CARD8*)bits + + (pict->pDrawable->y + yoff) * stride * sizeof(FbBits) + + (pict->pDrawable->x + xoff) * (bpp / 8)); image = pixman_image_create_bits((pixman_format_code_t) pict->format, - pixmap->drawable.width, - pixmap->drawable.height, (uint32_t *) bits, + pict->pDrawable->width, + pict->pDrawable->height, (uint32_t *) bits, stride * sizeof(FbStride)); if (!image) @@ -333,57 +330,31 @@ create_bits_picture(PicturePtr pict, Bool has_clip, int *xoff, int *yoff) if (pict->clientClipType != CT_NONE) pixman_image_set_has_client_clip(image, TRUE); - if (*xoff || *yoff) - pixman_region_translate(pict->pCompositeClip, *xoff, *yoff); + pixman_region_translate (pict->pCompositeClip, - pict->pDrawable->x, - pict->pDrawable->y); pixman_image_set_clip_region(image, pict->pCompositeClip); - if (*xoff || *yoff) - pixman_region_translate(pict->pCompositeClip, -*xoff, -*yoff); + pixman_region_translate (pict->pCompositeClip, pict->pDrawable->x, pict->pDrawable->y); } /* Indexed table */ if (pict->pFormat->index.devPrivate) pixman_image_set_indexed(image, pict->pFormat->index.devPrivate); - /* Add in drawable origin to position within the image */ - *xoff += pict->pDrawable->x; - *yoff += pict->pDrawable->y; - return image; } static pixman_image_t *image_from_pict_internal(PicturePtr pict, Bool has_clip, - int *xoff, int *yoff, Bool is_alpha_map); static void -set_image_properties(pixman_image_t * image, PicturePtr pict, Bool has_clip, - int *xoff, int *yoff, Bool is_alpha_map) +set_image_properties(pixman_image_t * image, PicturePtr pict, Bool is_alpha_map) { pixman_repeat_t repeat; pixman_filter_t filter; if (pict->transform) { - /* For source images, adjust the transform to account - * for the drawable offset within the pixman image, - * then set the offset to 0 as it will be used - * to compute positions within the transformed image. - */ - if (!has_clip) { - struct pixman_transform adjusted; - - adjusted = *pict->transform; - pixman_transform_translate(&adjusted, - NULL, - pixman_int_to_fixed(*xoff), - pixman_int_to_fixed(*yoff)); - pixman_image_set_transform(image, &adjusted); - *xoff = 0; - *yoff = 0; - } - else - pixman_image_set_transform(image, pict->transform); + pixman_image_set_transform(image, pict->transform); } switch (pict->repeatType) { @@ -411,10 +382,8 @@ set_image_properties(pixman_image_t * image, PicturePtr pict, Bool has_clip, * as the alpha map for this operation */ if (pict->alphaMap && !is_alpha_map) { - int alpha_xoff, alpha_yoff; pixman_image_t *alpha_map = - image_from_pict_internal(pict->alphaMap, FALSE, &alpha_xoff, - &alpha_yoff, TRUE); + image_from_pict_internal(pict->alphaMap, TRUE, TRUE); pixman_image_set_alpha_map(image, alpha_map, pict->alphaOrigin.x, pict->alphaOrigin.y); @@ -448,8 +417,7 @@ set_image_properties(pixman_image_t * image, PicturePtr pict, Bool has_clip, } static pixman_image_t * -image_from_pict_internal(PicturePtr pict, Bool has_clip, int *xoff, int *yoff, - Bool is_alpha_map) +image_from_pict_internal(PicturePtr pict, Bool has_clip, Bool is_alpha_map) { pixman_image_t *image = NULL; @@ -457,7 +425,7 @@ image_from_pict_internal(PicturePtr pict, Bool has_clip, int *xoff, int *yoff, return NULL; if (pict->pDrawable) { - image = create_bits_picture(pict, has_clip, xoff, yoff); + image = create_bits_picture(pict, has_clip); } else if (pict->pSourcePict) { SourcePict *sp = pict->pSourcePict; @@ -475,19 +443,17 @@ image_from_pict_internal(PicturePtr pict, Bool has_clip, int *xoff, int *yoff, else if (sp->type == SourcePictTypeConical) image = create_conical_gradient_image(gradient); } - *xoff = *yoff = 0; } if (image) - set_image_properties(image, pict, has_clip, xoff, yoff, is_alpha_map); - + set_image_properties (image, pict, is_alpha_map); return image; } pixman_image_t * -image_from_pict(PicturePtr pict, Bool has_clip, int *xoff, int *yoff) +image_from_pict (PicturePtr pict, Bool has_clip) { - return image_from_pict_internal(pict, has_clip, xoff, yoff, FALSE); + return image_from_pict_internal (pict, has_clip, FALSE); } void diff --git a/fb/fbtrap.c b/fb/fbtrap.c index bf82f8f..0145ce9 100644 --- a/fb/fbtrap.c +++ b/fb/fbtrap.c @@ -36,13 +36,12 @@ fbAddTraps(PicturePtr pPicture, INT16 x_off, INT16 y_off, int ntrap, xTrap * traps) { pixman_image_t *image; - int dst_xoff, dst_yoff; - if (!(image = image_from_pict(pPicture, FALSE, &dst_xoff, &dst_yoff))) - return; - - pixman_add_traps(image, x_off + dst_xoff, y_off + dst_yoff, - ntrap, (pixman_trap_t *) traps); + if (!(image = image_from_pict (pPicture, FALSE))) + return; + + pixman_add_traps(image, x_off, y_off, + ntrap, (pixman_trap_t *)traps); free_pixman_pict(pPicture, image); } @@ -52,13 +51,12 @@ fbRasterizeTrapezoid(PicturePtr pPicture, xTrapezoid * trap, int x_off, int y_off) { pixman_image_t *image; - int dst_xoff, dst_yoff; - if (!(image = image_from_pict(pPicture, FALSE, &dst_xoff, &dst_yoff))) + if (!(image = image_from_pict (pPicture, FALSE))) return; - pixman_rasterize_trapezoid(image, (pixman_trapezoid_t *) trap, - x_off + dst_xoff, y_off + dst_yoff); + pixman_rasterize_trapezoid(image, (pixman_trapezoid_t *)trap, + x_off, y_off); free_pixman_pict(pPicture, image); } @@ -68,14 +66,12 @@ fbAddTriangles(PicturePtr pPicture, INT16 x_off, INT16 y_off, int ntri, xTriangle * tris) { pixman_image_t *image; - int dst_xoff, dst_yoff; - if (!(image = image_from_pict(pPicture, FALSE, &dst_xoff, &dst_yoff))) + if (!(image = image_from_pict (pPicture, FALSE))) return; - - pixman_add_triangles(image, - dst_xoff + x_off, dst_yoff + y_off, - ntri, (pixman_triangle_t *) tris); + + pixman_add_triangles(image, x_off, y_off, ntri, + (pixman_triangle_t *)tris); free_pixman_pict(pPicture, image); } @@ -98,13 +94,11 @@ fbShapes(CompositeShapesFunc composite, int16_t ySrc, int nshapes, int shape_size, const uint8_t * shapes) { pixman_image_t *src, *dst; - int src_xoff, src_yoff; - int dst_xoff, dst_yoff; miCompositeSourceValidate(pSrc); - src = image_from_pict(pSrc, FALSE, &src_xoff, &src_yoff); - dst = image_from_pict(pDst, TRUE, &dst_xoff, &dst_yoff); + src = image_from_pict(pSrc, FALSE); + dst = image_from_pict(pDst, TRUE); if (src && dst) { pixman_format_code_t format; @@ -121,9 +115,8 @@ fbShapes(CompositeShapesFunc composite, for (i = 0; i < nshapes; ++i) { composite(op, src, dst, format, - xSrc + src_xoff, - ySrc + src_yoff, - dst_xoff, dst_yoff, 1, shapes + i * shape_size); + xSrc, ySrc, 0, 0, + 1, shapes + i * shape_size); } } else { @@ -143,8 +136,8 @@ fbShapes(CompositeShapesFunc composite, } composite(op, src, dst, format, - xSrc + src_xoff, - ySrc + src_yoff, dst_xoff, dst_yoff, nshapes, shapes); + xSrc, ySrc, 0, 0, + nshapes, shapes); } DamageRegionProcessPending(pDst->pDrawable); commit 102eed2fd4e5a04399c4696b9d6b69dc8d74fa3e Author: Jeremy Huddleston <jeremyhu@apple.com> Date: Fri Apr 30 13:08:25 2010 -0700 Workaround the GC clipping problem in miPaintWindow and add some debugging output. Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com> diff --git a/mi/miexpose.c b/mi/miexpose.c index 8b7c93f..3e972f7 100644 --- a/mi/miexpose.c +++ b/mi/miexpose.c @@ -489,7 +489,8 @@ void RootlessSetPixmapOfAncestors(WindowPtr pWin); void RootlessStartDrawing(WindowPtr pWin); void RootlessDamageRegion(WindowPtr pWin, RegionPtr prgn); Bool IsFramedWindow(WindowPtr pWin); -#endif +#include "../fb/fb.h" +#endif void miPaintWindow(WindowPtr pWin, RegionPtr prgn, int what) @@ -518,23 +519,37 @@ miPaintWindow(WindowPtr pWin, RegionPtr prgn, int what) Bool solid = TRUE; DrawablePtr drawable = &pWin->drawable; +#ifdef XQUARTZ_CLIP_DEBUG + ErrorF("START %d BS %d (pR = %ld)\n", what, pWin->backgroundState, ParentRelative); + ErrorF(" Rgn: %d %d %d %d\n", prgn->extents.x1, prgn->extents.y1, + prgn->extents.x2 - prgn->extents.x1, + prgn->extents.y2 - prgn->extents.y1); + ErrorF(" Win: %d %d (%d %d) %d %d\n", pWin->origin.x, pWin->origin.y, + pWin->winSize.extents.x1, pWin->winSize.extents.y1, + pWin->winSize.extents.x2 - pWin->winSize.extents.x1, + pWin->winSize.extents.y2 - pWin->winSize.extents.y1); + ErrorF(" Draw: %d %d %d %d\n", pWin->drawable.x, pWin->drawable.y, + pWin->drawable.width, pWin->drawable.height); +#endif + #ifdef ROOTLESS if (!drawable || drawable->type == UNDRAWABLE_WINDOW) return; +#endif + + if (what == PW_BACKGROUND) + { +#ifdef ROOTLESS + if(IsFramedWindow(pWin)) { + RootlessStartDrawing(pWin); + RootlessDamageRegion(pWin, prgn); - if (IsFramedWindow(pWin)) { - RootlessStartDrawing(pWin); - RootlessDamageRegion(pWin, prgn); - - if (pWin->backgroundState == ParentRelative) { - if ((what == PW_BACKGROUND) || - (what == PW_BORDER && !pWin->borderIsPixel)) + if(pWin->backgroundState == ParentRelative) { RootlessSetPixmapOfAncestors(pWin); + } } - } #endif - if (what == PW_BACKGROUND) { while (pWin->backgroundState == ParentRelative) pWin = pWin->parent; @@ -559,6 +574,18 @@ miPaintWindow(WindowPtr pWin, RegionPtr prgn, int what) else { PixmapPtr pixmap; +#ifdef ROOTLESS + if(IsFramedWindow(pWin)) { + RootlessStartDrawing(pWin); + RootlessDamageRegion(pWin, prgn); + + if(!pWin->borderIsPixel && + pWin->backgroundState == ParentRelative) { + RootlessSetPixmapOfAncestors(pWin); + } + } +#endif + tile_x_off = drawable->x; tile_y_off = drawable->y; @@ -567,6 +594,12 @@ miPaintWindow(WindowPtr pWin, RegionPtr prgn, int what) return; pixmap = (*pScreen->GetWindowPixmap) ((WindowPtr) drawable); drawable = &pixmap->drawable; + +#ifdef XQUARTZ_CLIP_DEBUG + ErrorF(" Draw: %d %d %d %d\n", + drawable->x, drawable->y, drawable->width, drawable->height); +#endif + #ifdef COMPOSITE draw_x_off = pixmap->screen_x; draw_y_off = pixmap->screen_y; @@ -629,6 +662,57 @@ miPaintWindow(WindowPtr pWin, RegionPtr prgn, int what) ChangeGC(NullClient, pGC, gcmask, gcval); ValidateGC(drawable, pGC); +#ifdef XQUARTZ_CLIP_DEBUG + ErrorF(" GC: %d %d %d %d\n", + pGC->pCompositeClip->extents.x1, pGC->pCompositeClip->extents.y1, + pGC->pCompositeClip->extents.x2 - pGC->pCompositeClip->extents.x1, + pGC->pCompositeClip->extents.y2 - pGC->pCompositeClip->extents.y1); +#endif + +#ifdef XQUARTZ + /* Looks like our clipping isn't set right for some reason: + * http://xquartz.macosforge.org/trac/ticket/290 + */ + if(what == PW_BORDER) { + +#if 0 + if(solid) { +#if 1 + fbFillRegionSolid(&pWin->drawable, + prgn, + 0, + fbReplicatePixel(fill.pixel, + pWin->drawable.bitsPerPixel)); +#else + fbFillRegionSolid(drawable, + prgn, + 0, + fbReplicatePixel(fill.pixel, + drawable->bitsPerPixel)); +#endif + return; + } +#endif + + pGC->pCompositeClip->extents.x1 += prgn->extents.x1; + pGC->pCompositeClip->extents.y1 += prgn->extents.y1; + pGC->pCompositeClip->extents.x2 += prgn->extents.x1; + pGC->pCompositeClip->extents.y2 += prgn->extents.y1; + + if(pGC->pCompositeClip->extents.x2 > drawable->pScreen->width) + pGC->pCompositeClip->extents.x2 = drawable->pScreen->width; + if(pGC->pCompositeClip->extents.y2 > drawable->pScreen->height) + pGC->pCompositeClip->extents.y2 = drawable->pScreen->height; + } +#endif + +#ifdef XQUARTZ_CLIP_DEBUG + ErrorF(" GC: %d %d %d %d\n", + pGC->pCompositeClip->extents.x1, pGC->pCompositeClip->extents.y1, + pGC->pCompositeClip->extents.x2 - pGC->pCompositeClip->extents.x1, + pGC->pCompositeClip->extents.y2 - pGC->pCompositeClip->extents.y1); +#endif + numRects = RegionNumRects(prgn); pbox = RegionRects(prgn); for (i = numRects; --i >= 0; pbox++, prect++) { commit 63be396a1657a1b5356be5285199d43bdf773d9f Author: Jeremy Huddleston <jeremyhu@apple.com> Date: Fri Jan 13 12:00:57 2012 -0800 sdksyms.sh: Use CPPFLAGS, not CFLAGS CFLAGS can include flags which are not useful to the preprocessor or can even cause it to fail. This fixes a build issue on darwin when building for more than one architecture. Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com> Reviewed-by: Keith Packard <keithp@keithp.com> diff --git a/hw/xfree86/Makefile.am b/hw/xfree86/Makefile.am index c3899b5..4f48b85 100644 --- a/hw/xfree86/Makefile.am +++ b/hw/xfree86/Makefile.am @@ -38,7 +38,7 @@ DIST_SUBDIRS = common ddc i2c x86emu int10 fbdevhw os-support \ bin_PROGRAMS = Xorg nodist_Xorg_SOURCES = sdksyms.c -AM_CFLAGS = $(DIX_CFLAGS) @XORG_CFLAGS@ +AM_CPPFLAGS = $(DIX_CFLAGS) @XORG_CFLAGS@ INCLUDES = $(XORG_INCS) -I$(srcdir)/parser -I$(top_srcdir)/miext/cw \ -I$(srcdir)/ddc -I$(srcdir)/i2c -I$(srcdir)/modes -I$(srcdir)/ramdac \ -I$(srcdir)/dri -I$(srcdir)/dri2 @@ -115,7 +115,7 @@ CLEANFILES = sdksyms.c sdksyms.dep EXTRA_DIST += sdksyms.sh sdksyms.dep sdksyms.c: sdksyms.sh - $(AM_V_GEN)CPP='$(CPP)' AWK='$(AWK)' $(SHELL) $(srcdir)/sdksyms.sh $(top_srcdir) $(CFLAGS) $(AM_CFLAGS) $(INCLUDES) + $(AM_V_GEN)CPP='$(CPP)' AWK='$(AWK)' $(SHELL) $(srcdir)/sdksyms.sh $(top_srcdir) $(CPPFLAGS) $(AM_CPPFLAGS) $(INCLUDES) SDKSYMS_DEP = sdksyms.dep include $(SDKSYMS_DEP) commit 1310ca18e354bf26797a9c19a6469a23c97d9a2b Author: Matt Dew <marcoz@osource.org> Date: Fri Mar 21 22:35:06 2014 -0600 bump rev to 1.14.5.901 diff --git a/configure.ac b/configure.ac index b06fb14..3860f9d 100644 --- a/configure.ac +++ b/configure.ac @@ -26,9 +26,9 @@ dnl dnl Process this file with autoconf to create configure. AC_PREREQ(2.60) -AC_INIT([xorg-server], 1.14.5, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server) -RELEASE_DATE="2013-12-12" -RELEASE_NAME="November Rain" +AC_INIT([xorg-server], 1.14.5.901, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server) +RELEASE_DATE="2014-03-21" +RELEASE_NAME="Purple Haze-rc1" AC_CONFIG_SRCDIR([Makefile.am]) AM_INIT_AUTOMAKE([foreign dist-bzip2]) commit 4ab897c03389d5e6e23a4ef7f3f6a4fda1837a53 Author: Jeremy Huddleston Sequoia <jeremyhu@apple.com> Date: Wed Jan 1 11:10:41 2014 -0800 XQuartz: Avoid passing uninitialized pointers to X11ApplicationSetWindowMenu in AppleWMSetWindowMenu Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com> (cherry picked from commit 77df653ae3d8448be21221711851acde12c6bc1a) diff --git a/hw/xquartz/applewm.c b/hw/xquartz/applewm.c index c4e5f4a..0d734bd 100644 --- a/hw/xquartz/applewm.c +++ b/hw/xquartz/applewm.c @@ -398,6 +398,15 @@ ProcAppleWMSetWindowMenu(register ClientPtr client) break; } } + + /* Check if we bailed out of the above loop due to a request that was too long */ + if (j < nitems) { + free(items); + free(shortcuts); + + return BadRequest; + } + X11ApplicationSetWindowMenu(nitems, items, shortcuts); free(items); free(shortcuts); commit bb315485b451e573a53f04e2281e79f21d33bd02 Author: Jeremy Huddleston Sequoia <jeremyhu@apple.com> Date: Wed Jan 1 11:04:07 2014 -0800 XQuartz: Check for allocated memory before using it in AppleWMSetWindowMenu Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com> (cherry picked from commit 3bc608a361a01043b226fb9aaebf88f6fd852925) diff --git a/hw/xquartz/applewm.c b/hw/xquartz/applewm.c index aea0a45..c4e5f4a 100644 --- a/hw/xquartz/applewm.c +++ b/hw/xquartz/applewm.c @@ -378,6 +378,13 @@ ProcAppleWMSetWindowMenu(register ClientPtr client) items = malloc(sizeof(char *) * nitems); shortcuts = malloc(sizeof(char) * nitems); + if (!items || !shortcuts) { + free(items); + free(shortcuts); + + return BadAlloc; + } + max_len = (stuff->length << 2) - sizeof(xAppleWMSetWindowMenuReq); bytes = (char *)&stuff[1]; commit a3d19856c6b4d323340a98a8c7bf1cfc4b92c83d Author: Jeremy Huddleston Sequoia <jeremyhu@apple.com> Date: Wed Jan 1 11:00:40 2014 -0800 XQuartz: Silence a clang static analysis warning about a memory leak It seems the alanyzer can't comprehend dixSetPrivate(). quartz.c:119:12: warning: Potential leak of memory pointed to by 'displayInfo' return quartzProcs->AddScreen(index, pScreen); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com> (cherry picked from commit 64327226ddfba8f0653615cd678d2d4336fb993d) diff --git a/hw/xquartz/quartz.c b/hw/xquartz/quartz.c index 5b977c7..bc6c8d0 100644 --- a/hw/xquartz/quartz.c +++ b/hw/xquartz/quartz.c @@ -109,11 +109,14 @@ Bool QuartzAddScreen(int index, ScreenPtr pScreen) { + // The clang static analyzer thinks we leak displayInfo here +#ifndef __clang_analyzer__ // allocate space for private per screen Quartz specific storage QuartzScreenPtr displayInfo = calloc(sizeof(QuartzScreenRec), 1); // QUARTZ_PRIV(pScreen) = displayInfo; dixSetPrivate(&pScreen->devPrivates, quartzScreenKey, displayInfo); +#endif /* __clang_analyzer__ */ // do Quartz mode specific initialization return quartzProcs->AddScreen(index, pScreen); commit b915cbb6bf489e8ceb20d1053d1c94ebc981e0dd Author: Jeremy Huddleston Sequoia <jeremyhu@apple.com> Date: Wed Jan 1 10:55:10 2014 -0800 XQuartz: Silence a clang static analysis warning about a possible memory leak on exit stub.c:356:9: warning: Potential leak of memory pointed to by 'newargv' asl_log(aslc, NULL, ASL_LEVEL_ERR, ^~~~~~~ stub.c:356:9: warning: Potential leak of memory pointed to by 'newenvp' asl_log(aslc, NULL, ASL_LEVEL_ERR, ^~~~~~~ 2 warnings generated. Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com> (cherry picked from commit b2f6b3497c33a4897afae80a2cf69c596b9f81e8) diff --git a/hw/xquartz/mach-startup/stub.c b/hw/xquartz/mach-startup/stub.c index b5a3168..756e4ef 100644 --- a/hw/xquartz/mach-startup/stub.c +++ b/hw/xquartz/mach-startup/stub.c @@ -353,6 +353,10 @@ main(int argc, char **argv, char **envp) newenvp = (string_array_t)calloc((1 + envpc), sizeof(string_t)); if (!newargv || !newenvp) { + /* Silence the clang static analyzer */ + free(newargv); + free(newenvp); + asl_log(aslc, NULL, ASL_LEVEL_ERR, "Xquartz: Memory allocation failure"); return EXIT_FAILURE; commit f218c147c2bb77ab3b5dc091ddb62839fa165254 Author: Jeremy Huddleston Sequoia <jeremyhu@apple.com> Date: Wed Jan 1 10:47:52 2014 -0800 XQuartz: Validate length in appledri before swapping Avoids potential memory corruption from bad requests Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com> (cherry picked from commit a03f096a85537d9e881cedaa6cb71aca43a97086) diff --git a/hw/xquartz/xpr/appledri.c b/hw/xquartz/xpr/appledri.c index d7e9844..7757465 100644 --- a/hw/xquartz/xpr/appledri.c +++ b/hw/xquartz/xpr/appledri.c @@ -406,6 +406,7 @@ SProcAppleDRIQueryDirectRenderingCapable(register ClientPtr client) { REQUEST(xAppleDRIQueryDirectRenderingCapableReq); swaps(&stuff->length); + REQUEST_SIZE_MATCH(xAppleDRIQueryDirectRenderingCapableReq); swapl(&stuff->screen); return ProcAppleDRIQueryDirectRenderingCapable(client); } @@ -415,6 +416,7 @@ SProcAppleDRIAuthConnection(register ClientPtr client) { REQUEST(xAppleDRIAuthConnectionReq); swaps(&stuff->length); + REQUEST_SIZE_MATCH(xAppleDRIAuthConnectionReq); swapl(&stuff->screen); swapl(&stuff->magic); return ProcAppleDRIAuthConnection(client); @@ -425,6 +427,7 @@ SProcAppleDRICreateSurface(register ClientPtr client) { REQUEST(xAppleDRICreateSurfaceReq); swaps(&stuff->length); + REQUEST_SIZE_MATCH(xAppleDRICreateSurfaceReq); swapl(&stuff->screen); swapl(&stuff->drawable); swapl(&stuff->client_id); @@ -436,6 +439,7 @@ SProcAppleDRIDestroySurface(register ClientPtr client) { REQUEST(xAppleDRIDestroySurfaceReq); swaps(&stuff->length); + REQUEST_SIZE_MATCH(xAppleDRIDestroySurfaceReq); swapl(&stuff->screen); swapl(&stuff->drawable); return ProcAppleDRIDestroySurface(client); @@ -446,6 +450,7 @@ SProcAppleDRICreatePixmap(register ClientPtr client) { REQUEST(xAppleDRICreatePixmapReq); swaps(&stuff->length); + REQUEST_SIZE_MATCH(xAppleDRICreatePixmapReq); swapl(&stuff->screen); swapl(&stuff->drawable); return ProcAppleDRICreatePixmap(client); @@ -456,6 +461,7 @@ SProcAppleDRIDestroyPixmap(register ClientPtr client) { REQUEST(xAppleDRIDestroyPixmapReq); swaps(&stuff->length); + REQUEST_SIZE_MATCH(xAppleDRIDestroyPixmapReq); swapl(&stuff->drawable); return ProcAppleDRIDestroyPixmap(client); } commit 2599b3a42b9d637534b0ed5018aa4bc692c0f5e5 Author: Jeremy Huddleston Sequoia <jeremyhu@apple.com> Date: Wed Jan 1 10:39:56 2014 -0800 XQuartz: Validate screen in AppleDRIQueryDirectRenderingCapable requests Return an error to the caller rather than crashing the server on invalid screens. Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com> (cherry picked from commit b3572c0d1ab7888ac26d6b2b8be6d1d19ed9af3f) diff --git a/hw/xquartz/xpr/appledri.c b/hw/xquartz/xpr/appledri.c index 9aac072..d7e9844 100644 --- a/hw/xquartz/xpr/appledri.c +++ b/hw/xquartz/xpr/appledri.c @@ -123,6 +123,10 @@ ProcAppleDRIQueryDirectRenderingCapable(register ClientPtr client) rep.length = 0; rep.sequenceNumber = client->sequence; + if (stuff->screen >= screenInfo.numScreens) { + return BadValue; + } + if (!DRIQueryDirectRenderingCapable(screenInfo.screens[stuff->screen], &isCapable)) { return BadValue; commit 448dd77224ba4d019be7b9139c4ebead3f24001e Author: Jeremy Huddleston Sequoia <jeremyhu@apple.com> Date: Sun Dec 29 12:45:23 2013 -0800 XQuartz: Simplify hook_run to quiet static analyzer x-hook.c:96:9: warning: Called function pointer is an uninitalized pointer value (*fun[i])(arg, data[i]); ^~~~~~~~~~~~~~~~~~~~~~~ 1 warning generated. Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com> (cherry picked from commit 959e8f23af7850fcaf40d6c67f5228241a36a9ab) diff --git a/hw/xquartz/xpr/x-hook.c b/hw/xquartz/xpr/x-hook.c index b5d8ab9..3922bb8 100644 --- a/hw/xquartz/xpr/x-hook.c +++ b/hw/xquartz/xpr/x-hook.c @@ -70,34 +70,19 @@ X_PFX(hook_remove) (x_list * lst, x_hook_function * fun, void *data) { X_EXTERN void X_PFX(hook_run) (x_list * lst, void *arg) { - x_list *node, *cell; - x_hook_function **fun; - void **data; - int length, i; + x_list *node; if (!lst) return; - length = X_PFX(list_length) (lst); - fun = malloc(sizeof(x_hook_function *) * length); - data = malloc(sizeof(void *) * length); - - if (!fun || !data) { - FatalError("Failed to allocate memory in %s\n", __func__); - } + for (node = lst; node != NULL; node = node->next) { + x_list *cell = node->data; - for (i = 0, node = lst; node != NULL; node = node->next, i++) { - cell = node->data; - fun[i] = CELL_FUN(cell); - data[i] = CELL_DATA(cell); - } + x_hook_function *fun = CELL_FUN(cell); + void *data = CELL_DATA(cell); - for (i = 0; i < length; i++) { - (*fun[i])(arg, data[i]); + (*fun)(arg, data); } - - free(fun); - free(data); } X_EXTERN void commit daaada9113d6bbfd6ffbf4c8c76f3176ca2899c6 Author: Jeremy Huddleston Sequoia <jeremyhu@apple.com> Date: Sun Dec 29 12:41:18 2013 -0800 XQuartz: Mark applicationWillTerminate: noreturn X11Controller.m:938:1: warning: method 'applicationWillTerminate:' could be declared with attribute 'noreturn' [-Wmissing-noreturn,Semantic Issue] { ^ Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com> (cherry picked from commit f79af1941776fd6f1ec26c50603fcc35ca7d514b) diff --git a/hw/xquartz/X11Controller.m b/hw/xquartz/X11Controller.m index 752bda3..5445c6f 100644 --- a/hw/xquartz/X11Controller.m +++ b/hw/xquartz/X11Controller.m @@ -934,7 +934,7 @@ extern char *bundle_id_prefix; == NSAlertDefaultReturn) ? NSTerminateNow : NSTerminateCancel; } -- (void) applicationWillTerminate:(NSNotification *)aNotification +- (void) applicationWillTerminate:(NSNotification *)aNotification _X_NORETURN { int remain; [X11App prefs_synchronize]; commit 9ec1c29d75e5795557bf209dc690aed18b503545 Author: Jeremy Huddleston Sequoia <jeremyhu@apple.com> Date: Sun Dec 29 12:31:23 2013 -0800 XQuartz: Fix darwinfb.h header guard ./darwinfb.h:28:9: warning: '_DARWIN_FB_H' is used as a header guard here, followed by #define of a different macro [-Wheader-guard,Lexical or Preprocessor Issue] ^~~~~~~~~~~~ ./darwinfb.h:29:9: note: '_DARWIN_DB_H' is defined here; did you mean '_DARWIN_FB_H'? [Lexical or Preprocessor Issue] ^~~~~~~~~~~~ _DARWIN_FB_H Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com> (cherry picked from commit 2e3ebec9520719a8e5c3c92390e83bcb5216f978) diff --git a/hw/xquartz/darwinfb.h b/hw/xquartz/darwinfb.h index 5de360d..541128b 100644 --- a/hw/xquartz/darwinfb.h +++ b/hw/xquartz/darwinfb.h @@ -26,7 +26,7 @@ */ #ifndef _DARWIN_FB_H -#define _DARWIN_DB_H +#define _DARWIN_FB_H #include "scrnintstr.h" commit af520d671089dbf96271bc97484113ea2f18113e Author: Jeremy Huddleston Sequoia <jeremyhu@apple.com> Date: Sun Dec 29 12:22:55 2013 -0800 XQuartz: Silence some static analyzer warnings by annotating referencing counts Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com> (cherry picked from commit 9da6c0918f40359f28fe8889d5b7cae7efcc8377) diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m index 1f9b05d..2efbd65 100644 --- a/hw/xquartz/X11Application.m +++ b/hw/xquartz/X11Application.m @@ -70,6 +70,18 @@ xpbproxy_run(void); static dispatch_queue_t eventTranslationQueue; #endif +#ifndef __has_feature +#define __has_feature(x) 0 +#endif + +#ifndef CF_RETURNS_RETAINED +#if __has_feature(attribute_cf_returns_retained) +#define CF_RETURNS_RETAINED __attribute__((cf_returns_retained)) +#else +#define CF_RETURNS_RETAINED +#endif +#endif + extern Bool noTestExtensions; extern Bool noRenderExtension; extern BOOL serverRunning; @@ -526,6 +538,7 @@ cfrelease(CFAllocatorRef a, const void *b) CFRelease(b); } +CF_RETURNS_RETAINED static CFMutableArrayRef nsarray_to_cfarray(NSArray *in) {
participants (1)
-
jeremyhu@freedesktop.org