[Xquartz-changes] xserver: Branch 'server-1.12-apple' - 12 commits
Jeremy Huddleston
jeremyhu at freedesktop.org
Tue May 29 13:21:07 PDT 2012
Rebased ref, commits from common ancestor:
commit a9ec4c113c13a17d18d6b75de852b611323c7100
Author: Jeremy Huddleston <jeremyhu at 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 at apple.com>
(cherry picked from commit e6fa592a74104aa9d0081387823314833526f306)
diff --git a/fb/fb.h b/fb/fb.h
index b327ce6..53a6c1a 100644
--- a/fb/fb.h
+++ b/fb/fb.h
@@ -1683,8 +1683,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 097a1a6..dc0ca3c 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);
@@ -143,20 +138,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)
@@ -183,57 +180,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) {
@@ -261,10 +232,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);
@@ -298,8 +267,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;
@@ -307,7 +275,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;
@@ -325,19 +293,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 b43e0f9acf33dd0b84cc4a717bdf538a496ddeb9
Author: Jeremy Huddleston <jeremyhu at 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 at apple.com>
(cherry picked from commit d7e56959401ce32120af67b01632442c52f2cf85)
diff --git a/mi/miexpose.c b/mi/miexpose.c
index dbb29ca..93fd8a1 100644
--- a/mi/miexpose.c
+++ b/mi/miexpose.c
@@ -490,7 +490,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)
@@ -519,23 +520,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;
@@ -560,6 +575,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;
@@ -568,6 +595,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;
@@ -630,6 +663,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 29fe2a0278887db14ecc0f40cf12c9147fc72c22
Author: Jeremy Huddleston <jeremyhu at 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 at apple.com>
Reviewed-by: Keith Packard <keithp at keithp.com>
(cherry picked from commit 290d366d4c6b6e051f0e337a1a6ee76f42d28003)
diff --git a/hw/xfree86/Makefile.am b/hw/xfree86/Makefile.am
index 72be889..c0b81c3 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
@@ -109,7 +109,7 @@ CLEANFILES = sdksyms.c sdksyms.dep
EXTRA_DIST += sdksyms.sh
sdksyms.dep sdksyms.c: sdksyms.sh
- CPP='$(CPP)' AWK='$(AWK)' $(SHELL) $(srcdir)/sdksyms.sh $(top_srcdir) $(CFLAGS) $(AM_CFLAGS) $(INCLUDES)
+ CPP='$(CPP)' AWK='$(AWK)' $(SHELL) $(srcdir)/sdksyms.sh $(top_srcdir) $(CPPFLAGS) $(AM_CPPFLAGS) $(INCLUDES)
SDKSYMS_DEP = sdksyms.dep
include $(SDKSYMS_DEP)
commit f8ddfcae638e35ca5e0390dcfc25a5967d09978a
Author: Jeremy Huddleston <jeremyhu at apple.com>
Date: Fri Feb 17 13:15:12 2012 -0800
XQuartz: Detect FatalErrors on startup to prevent tight crash loops
If a FatalError occurs before the server finishes launching, it will
not have drained the launchd-owned DISPLAY socket, so launchd will
just relaunch it. This can cause the server to crash in a tight loop
which will spam the user with CrashReporter windows that claim focus on
appearance.
This allows users stuck in this loop to "deal" with the problem without
popping up a crash report every 10 seconds.
Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
(cherry picked from commit 3505e1faadddeeec85a0d3f823c877ea33f86e00)
Conflicts:
hw/xquartz/X11Application.h
diff --git a/hw/xquartz/X11Application.h b/hw/xquartz/X11Application.h
index 740a807..5ea6129 100644
--- a/hw/xquartz/X11Application.h
+++ b/hw/xquartz/X11Application.h
@@ -89,6 +89,9 @@ X11ApplicationCanEnterRandR(void);
void
X11ApplicationMain(int argc, char **argv, char **envp);
+void
+X11ApplicationFatalError(const char *f, va_list args) __printflike(1, 0);
+
#define PREFS_APPSMENU "apps_menu"
#define PREFS_FAKEBUTTONS "enable_fake_buttons"
#define PREFS_KEYEQUIVS "enable_key_equivalents"
diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index 339a93f..cd6bad6 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -72,6 +72,7 @@ static dispatch_queue_t eventTranslationQueue;
extern Bool noTestExtensions;
extern Bool noRenderExtension;
+extern BOOL serverRunning;
#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1050
static TISInputSourceRef last_key_layout;
@@ -1073,6 +1074,50 @@ X11ApplicationCanEnterRandR(void)
}
}
+void
+X11ApplicationFatalError(const char *f, va_list args)
+{
+#ifdef HAVE_LIBDISPATCH
+ NSString *title, *msg;
+ char *error_msg;
+
+ /* This is called by FatalError() in the server thread just before
+ * we would abort. If the server never got off the ground, We should
+ * inform the user of the error rather than letting the ever-so-friendly
+ * CrashReporter do it for us.
+ *
+ * This also has the benefit of forcing user interaction rather than
+ * allowing an infinite throttled-restart if the crash occurs before
+ * we can drain the launchd socket.
+ */
+
+ if (serverRunning) {
+ return;
+ }
+
+ title = NSLocalizedString(@"The application X11 could not be opened.",
+ @"Dialog title when encountering a fatal error");
+ msg = NSLocalizedString(@"An error occurred while starting the X11 server: \"%s\"\n\nClick Quit to quit X11. Click Report to see more details or send a report to Apple.",
+ @"Dialog when encountering a fatal error");
+
+ vasprintf(&error_msg, f, args);
+ msg = [NSString stringWithFormat:msg, error_msg];
+
+ /* We want the AppKit thread to actually service the alert or we will race [NSApp run] and create an
+ * 'NSInternalInconsistencyException', reason: 'NSApp with wrong _running count'
+ */
+ dispatch_sync(dispatch_get_main_queue(), ^{
+ if (NSAlertDefaultReturn == NSRunAlertPanel(title, msg, NSLocalizedString(@"Quit", @""),
+ NSLocalizedString (@"Report...", @""), nil)) {
+ exit(EXIT_FAILURE);
+ }
+ });
+
+ /* fall back to caller to do the abort() in the DIX */
+#endif
+}
+
+
static void
check_xinitrc(void)
{
diff --git a/hw/xquartz/bundle/Resources/English.lproj/Localizable.strings b/hw/xquartz/bundle/Resources/English.lproj/Localizable.strings
index bf2089c..36ae0ff 100644
Binary files a/hw/xquartz/bundle/Resources/English.lproj/Localizable.strings and b/hw/xquartz/bundle/Resources/English.lproj/Localizable.strings differ
diff --git a/hw/xquartz/darwin.c b/hw/xquartz/darwin.c
index e2ab057..41db72a 100644
--- a/hw/xquartz/darwin.c
+++ b/hw/xquartz/darwin.c
@@ -78,6 +78,8 @@
#include "quartzKeyboard.h"
#include "quartz.h"
+#include "X11Application.h"
+
aslclient aslc;
void
@@ -672,7 +674,7 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
void
OsVendorFatalError(const char *f, va_list args)
{
- ErrorF(" OsVendorFatalError\n");
+ X11ApplicationFatalError(f, args);
}
/*
commit 3076810a85922a1605ff7bb203fb8e365361c41f
Author: Jeremy Huddleston <jeremyhu at apple.com>
Date: Thu Apr 19 16:39:23 2012 -0700
os: Annotate OsVendorFatalError as _X_ATTRIBUTE_PRINTF
Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
Tested-By: Michal Suchanek <hramrach at gmail.com>
(cherry picked from commit d97868d934fd1a00f9e9ef23a1154a70c7bc0464)
diff --git a/include/os.h b/include/os.h
index 970ff02..8b58d7a 100644
--- a/include/os.h
+++ b/include/os.h
@@ -321,7 +321,8 @@ extern _X_EXPORT void
OsCleanup(Bool);
extern _X_EXPORT void
-OsVendorFatalError(const char *f, va_list args);
+OsVendorFatalError(const char *f, va_list args)
+_X_ATTRIBUTE_PRINTF(1, 0);
extern _X_EXPORT void
OsVendorInit(void);
commit 45b87d9c2e6d356a606170aefb7469df01f8e106
Author: Jeremy Huddleston <jeremyhu at apple.com>
Date: Wed Mar 28 15:07:51 2012 -0700
os: Fix regression with FatalError not calling va_start
Regression From: a818b305989bbcde4e585112a7ee70cbc0b14a92
Found-by: Colin Harrison <colin.harrison at virgin.net>
Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
(cherry picked from commit 817cec8ffd6cdb1abbcc00decd43569d44801764)
diff --git a/os/log.c b/os/log.c
index 315ba1e..e8dcf02 100644
--- a/os/log.c
+++ b/os/log.c
@@ -591,6 +591,8 @@ FatalError(const char *f, ...)
else
ErrorF("\nFatal server error:\n");
+ va_start(args, f);
+
/* Make a copy for OsVendorFatalError */
va_copy(args2, args);
commit 9cbe32888e110aa974c8b8fab88770b112fd83ee
Author: Jeremy Huddleston <jeremyhu at apple.com>
Date: Fri Feb 17 12:35:02 2012 -0800
os: Pass the FatalError message to OsVendorFatalError
Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
Reviewed-by: Jon TURNEY <jon.turney at dronecode.org.uk>
(cherry picked from commit a818b305989bbcde4e585112a7ee70cbc0b14a92)
diff --git a/hw/dmx/dmxinit.c b/hw/dmx/dmxinit.c
index 09e3d74..5804353 100644
--- a/hw/dmx/dmxinit.c
+++ b/hw/dmx/dmxinit.c
@@ -905,7 +905,7 @@ OsVendorInit(void)
* two routines mentioned here, as well as by others) to use the
* referenced routine instead of \a vfprintf().) */
void
-OsVendorFatalError(void)
+OsVendorFatalError(const char *f, va_list args)
{
}
diff --git a/hw/dmx/dmxlog.c b/hw/dmx/dmxlog.c
index 151f672..3249c48 100644
--- a/hw/dmx/dmxlog.c
+++ b/hw/dmx/dmxlog.c
@@ -114,9 +114,6 @@ VFatalError(const char *format, va_list args)
{
VErrorF(format, args);
ErrorF("\n");
-#ifdef DDXOSFATALERROR
- OsVendorFatalError();
-#endif
AbortServer();
/*NOTREACHED*/}
#endif
diff --git a/hw/kdrive/src/kdrive.c b/hw/kdrive/src/kdrive.c
index f65ab96..ecdae19 100644
--- a/hw/kdrive/src/kdrive.c
+++ b/hw/kdrive/src/kdrive.c
@@ -1104,7 +1104,7 @@ KdInitOutput(ScreenInfo * pScreenInfo, int argc, char **argv)
}
void
-OsVendorFatalError(void)
+OsVendorFatalError(const char *f, va_list args)
{
}
diff --git a/hw/vfb/InitOutput.c b/hw/vfb/InitOutput.c
index 2d679a5..e2cd96c 100644
--- a/hw/vfb/InitOutput.c
+++ b/hw/vfb/InitOutput.c
@@ -219,7 +219,7 @@ OsVendorInit(void)
}
void
-OsVendorFatalError(void)
+OsVendorFatalError(const char *f, va_list args)
{
}
diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
index 0974893..2a7d0a3 100644
--- a/hw/xfree86/common/xf86Init.c
+++ b/hw/xfree86/common/xf86Init.c
@@ -1053,7 +1053,7 @@ AbortDDX(enum ExitCode error)
}
void
-OsVendorFatalError(void)
+OsVendorFatalError(const char *f, va_list args)
{
#ifdef VENDORSUPPORT
ErrorF("\nPlease refer to your Operating System Vendor support pages\n"
diff --git a/hw/xnest/Init.c b/hw/xnest/Init.c
index 0909826..330b8ca 100644
--- a/hw/xnest/Init.c
+++ b/hw/xnest/Init.c
@@ -142,7 +142,7 @@ OsVendorInit(void)
}
void
-OsVendorFatalError(void)
+OsVendorFatalError(const char *f, va_list args)
{
return;
}
diff --git a/hw/xquartz/darwin.c b/hw/xquartz/darwin.c
index 74e11fe..e2ab057 100644
--- a/hw/xquartz/darwin.c
+++ b/hw/xquartz/darwin.c
@@ -670,7 +670,7 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
* OsVendorFatalError
*/
void
-OsVendorFatalError(void)
+OsVendorFatalError(const char *f, va_list args)
{
ErrorF(" OsVendorFatalError\n");
}
diff --git a/hw/xwin/winerror.c b/hw/xwin/winerror.c
index 4049e97..a25307c 100644
--- a/hw/xwin/winerror.c
+++ b/hw/xwin/winerror.c
@@ -70,7 +70,7 @@ OsVendorVErrorF(const char *pszFormat, va_list va_args)
* Attempt to do last-ditch, safe, important cleanup here.
*/
void
-OsVendorFatalError(void)
+OsVendorFatalError(const char *f, va_list args)
{
/* Don't give duplicate warning if UseMsg was called */
if (g_fSilentFatalError)
diff --git a/include/os.h b/include/os.h
index 4b5b440..970ff02 100644
--- a/include/os.h
+++ b/include/os.h
@@ -321,7 +321,7 @@ extern _X_EXPORT void
OsCleanup(Bool);
extern _X_EXPORT void
-OsVendorFatalError(void);
+OsVendorFatalError(const char *f, va_list args);
extern _X_EXPORT void
OsVendorInit(void);
diff --git a/os/log.c b/os/log.c
index 0e49572..315ba1e 100644
--- a/os/log.c
+++ b/os/log.c
@@ -583,6 +583,7 @@ void
FatalError(const char *f, ...)
{
va_list args;
+ va_list args2;
static Bool beenhere = FALSE;
if (beenhere)
@@ -590,22 +591,25 @@ FatalError(const char *f, ...)
else
ErrorF("\nFatal server error:\n");
- va_start(args, f);
+ /* Make a copy for OsVendorFatalError */
+ va_copy(args2, args);
+
#ifdef __APPLE__
{
- va_list args2;
+ va_list apple_args;
- va_copy(args2, args);
- (void) vsnprintf(__crashreporter_info_buff__,
- sizeof(__crashreporter_info_buff__), f, args2);
- va_end(args2);
+ va_copy(apple_args, args);
+ (void)vsnprintf(__crashreporter_info_buff__,
+ sizeof(__crashreporter_info_buff__), f, apple_args);
+ va_end(apple_args);
}
#endif
VErrorF(f, args);
va_end(args);
ErrorF("\n");
if (!beenhere)
- OsVendorFatalError();
+ OsVendorFatalError(f, args2);
+ va_end(args2);
if (!beenhere) {
beenhere = TRUE;
AbortServer();
diff --git a/test/ddxstubs.c b/test/ddxstubs.c
index a214b96..3647dc5 100644
--- a/test/ddxstubs.c
+++ b/test/ddxstubs.c
@@ -50,7 +50,7 @@ OsVendorInit(void)
}
void
-OsVendorFatalError(void)
+OsVendorFatalError(const char *f, va_list args)
{
}
commit 19126c0b36843f7c0e81631d1a1228d18e39eb62
Author: Jeremy Huddleston <jeremyhu at apple.com>
Date: Thu May 17 10:08:02 2012 -0700
XQuartz: Avoid a race in initialization of darwinPointer
http://xquartz.macosforge.org/trac/ticket/579
Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
(cherry picked from commit acdc4f54ee5784d26c251ff8c941b4360ae80e9b)
diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index 3108399..339a93f 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -1281,6 +1281,11 @@ untrusted_str(NSEvent *e)
}
#endif
+extern void
+darwinEvents_lock(void);
+extern void
+darwinEvents_unlock(void);
+
- (void) sendX11NSEvent:(NSEvent *)e
{
NSPoint location = NSZeroPoint;
@@ -1293,18 +1298,15 @@ untrusted_str(NSEvent *e)
int modifierFlags;
BOOL isMouseOrTabletEvent, isTabletEvent;
-#ifdef HAVE_LIBDISPATCH
- static dispatch_once_t once_pred;
- dispatch_once(&once_pred, ^{
- tilt = NSZeroPoint;
- darwinTabletCurrent = darwinTabletStylus;
- });
-#else
if (!darwinTabletCurrent) {
+ /* Ensure that the event system is initialized */
+ darwinEvents_lock();
+ darwinEvents_unlock();
+ assert(darwinTabletStylus);
+
tilt = NSZeroPoint;
darwinTabletCurrent = darwinTabletStylus;
}
-#endif
isMouseOrTabletEvent = [e type] == NSLeftMouseDown ||
[e type] == NSOtherMouseDown ||
commit 198a876e34b880be5f7da683ec3ff21a53edcec5
Author: Jeremy Huddleston <jeremyhu at apple.com>
Date: Mon May 7 17:07:27 2012 -0700
XQuartz: Provide fls implementation for Tiger
Regression-from: 30623d6ff7bca223f9e1a825e86bd317eef8bf16
Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
(cherry picked from commit f5fc5334116ad2b0c8930ac68c52bf0f7a2f1417)
diff --git a/hw/xquartz/console_redirect.c b/hw/xquartz/console_redirect.c
index 1e0e56b..91d693b 100644
--- a/hw/xquartz/console_redirect.c
+++ b/hw/xquartz/console_redirect.c
@@ -310,6 +310,20 @@ xq_asl_init(void)
atexit(redirect_atexit);
}
+#if MAC_OS_X_VERSION_MIN_REQUIRED < 1050
+#define fls(v) xq_fls(v)
+
+static inline int fls(int value) {
+ unsigned int b, v;
+
+ v = *((unsigned int *)&value);
+
+ for(b=0 ; v ; v >>= 1 , b++);
+
+ return b;
+}
+#endif
+
int
xq_asl_log_fd(aslclient asl, aslmsg msg, int level, int fd)
{
commit 300970f8f80ef15614fef78215476a8011895000
Author: Jeremy Huddleston <jeremyhu at apple.com>
Date: Mon May 7 16:31:38 2012 -0700
XQuartz: Tiger build fix
http://trac.macports.org/ticket/34364
Regression-from: 662d41acdde1dcb9774fbe4054e251c708acaffe
Reported-by: Peter Dyballa <Peter_Dyballa at Freenet.DE>
Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
(cherry picked from commit e0097ce9719f9b0aeccf7102630c0299f8acdf93)
diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index b686b00..3108399 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -1593,6 +1593,11 @@ handle_mouse:
case NSScrollWheel:
{
+#if MAC_OS_X_VERSION_MAX_ALLOWED < 1050
+ float deltaX = [e deltaX];
+ float deltaY = [e deltaY];
+ BOOL isContinuous = NO;
+#else
CGFloat deltaX = [e deltaX];
CGFloat deltaY = [e deltaY];
CGEventRef cge = [e CGEvent];
@@ -1614,6 +1619,7 @@ handle_mouse:
deltaY *= lineHeight / 5.0;
}
#endif
+#endif
#if !defined(XPLUGIN_VERSION) || XPLUGIN_VERSION == 0
/* If we're in the background, we need to send a MotionNotify event
commit 21956e2f8e506dd167f188be0d3b18e052c6913d
Author: Jeremy Huddleston <jeremyhu at apple.com>
Date: Mon May 7 16:16:20 2012 -0700
XQuartz: Workaround an SDK bug on Leopard/x86_64
Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
(cherry picked from commit 4acbaa3027d89728ed932616f6ef66d93537b101)
diff --git a/hw/xquartz/quartz.c b/hw/xquartz/quartz.c
index ebaa567..62a2852 100644
--- a/hw/xquartz/quartz.c
+++ b/hw/xquartz/quartz.c
@@ -69,6 +69,12 @@
#include <rootlessCommon.h>
#include <Xplugin.h>
+/* Work around a bug on Leopard's headers */
+#if defined (__LP64__) && MAC_OS_X_VERSION_MAX_ALLOWED >= 1050 && MAC_OS_X_VERSION_MAX_ALLOWED < 1060
+extern OSErr UpdateSystemActivity(UInt8 activity);
+#define OverallAct 0
+#endif
+
DevPrivateKeyRec quartzScreenKeyRec;
int aquaMenuBarHeight = 0;
QuartzModeProcsPtr quartzProcs = NULL;
commit 131fe8fbd17edb05084cd7cddc3c4d3d3b393d73
Author: Jeremy Huddleston <jeremyhu at apple.com>
Date: Tue May 29 13:05:02 2012 -0700
configure.ac: Version bump to 1.12.2
Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
diff --git a/configure.ac b/configure.ac
index 5e38d50..d7c59ed 100644
--- a/configure.ac
+++ b/configure.ac
@@ -26,8 +26,8 @@ dnl
dnl Process this file with autoconf to create configure.
AC_PREREQ(2.60)
-AC_INIT([xorg-server], 1.12.1.902, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
-RELEASE_DATE="2012-05-19"
+AC_INIT([xorg-server], 1.12.2, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
+RELEASE_DATE="2012-05-29"
AC_CONFIG_SRCDIR([Makefile.am])
AM_INIT_AUTOMAKE([foreign dist-bzip2])
AM_MAINTAINER_MODE
More information about the Xquartz-changes
mailing list