From 4f333b168a04b1d5b00eccc6b36c7405966ad84a Mon Sep 17 00:00:00 2001 From: matthieu Date: Fri, 11 Jul 2014 08:13:43 +0000 Subject: [PATCH] Update to xorg-server 1.15.2. bug fixes. --- xserver/ChangeLog | 296 +++++++++++++++++++++++ xserver/Xi/exevents.c | 4 + xserver/configure | 24 +- xserver/configure.ac | 6 +- xserver/fb/fbpict.c | 2 +- xserver/hw/xfree86/xorgconf.cpp | 2 +- xserver/hw/xquartz/X11Controller.m | 5 +- xserver/hw/xquartz/bundle/Info.plist.cpp | 4 +- xserver/hw/xquartz/darwin.c | 16 -- xserver/hw/xquartz/xpr/xprScreen.c | 16 +- xserver/include/misc.h | 18 +- xserver/man/Xserver.man | 5 +- xserver/test-driver | 127 ++++++++++ 13 files changed, 474 insertions(+), 51 deletions(-) create mode 100644 xserver/test-driver diff --git a/xserver/ChangeLog b/xserver/ChangeLog index 83ced7328..0c74197ba 100644 --- a/xserver/ChangeLog +++ b/xserver/ChangeLog @@ -1,3 +1,299 @@ +commit a0e938baa3ab51c8f42d62522da15d1fd56d7d1c +Author: Peter Hutterer +Date: Fri Jun 27 10:57:48 2014 +1000 + + Bump version to 1.15.2 + + Signed-off-by: Peter Hutterer + +commit 2abbf56493bb8636ae1ef6de2cbb412ac79c717f +Author: Steven McDonald +Date: Sun May 18 13:42:08 2014 +0200 + + Xi: block SIGIOs while copying device classes around + + I've been seeing sporadic (anywhere from once every few days to 3-4 + times a day) crashes and freezes in X. The problematic behaviour isn't + always the same, but I chose a particular incident to debug, and found + that X was segfaulting in updateMotionHistory, on line 575 of + dix/getevents.c. + + After some further investigation, I found that the bug was being + triggered when a SIGIO was received in DeepCopyPointerClasses, between + the AllocValuatorClass call (line 540) and updating the to->valuator + pointer (line 545). AllocValuatorClass calls realloc() on to->valuator, + so between these lines, it's not guaranteed to point to allocated + memory. + + It seems the SIGIO handler is calling updateMotionHistory, which is + reading the memory pointed to by to->valuator and getting a wrong value + for last_motion, which updates buff to point to wildly the wrong place + and thus generates a segfault when a memcpy() is done into buff. + + I am attaching a patch which I've been running on that machine for the + past three days, and haven't yet observed any more crashing or freezing + behaviour. The patch simply calls OsBlockSIGIO while + DeepCopyDeviceClasses is in progress, as the state of the X server's + device data structures is not guaranteed to be in a consistent state + during that time. + + Debian bug#744303 + + Signed-off-by: Julien Cristau + Reviewed-by: Peter Hutterer + Signed-off-by: Peter Hutterer + (cherry picked from commit d7a2df0a7499864cb005b098b79c1bdf884f6600) + +commit 2ceb44827f86d9f5f995448c3cf603ee9459fef3 +Author: Robert Ancell +Date: Thu May 22 10:43:52 2014 +1200 + + Fix overflow checking extension versions + + The easiest way to check for the version of an extension is to send the maximum + possible version numbers in the QueryVersion request. The X server overflows on + these as it assumes you will send a reasonable version number. + + Signed-off-by: Peter Hutterer + Reviewed-by: Keith Packard + (cherry picked from commit 548fc937b22d4dfe7f96e0bd77522261603a2c2f) + +commit 416ea95d8018875ed77a46634e5ab4d8b6e94dec +Author: Peter Hutterer +Date: Sat May 24 20:05:53 2014 +1000 + + man: drop specific mention of DontZap in -retro (#71113) + + DontZap off is the default anyway, don't mention it specifically to avoid + confusion + + X.Org Bug 71113 + + Signed-off-by: Peter Hutterer + (cherry picked from commit cfaf2abbac3f01e57d00845d8908bf01559263f9) + +commit 18f3471a05a7fba19713c788ed92e5e2ea7a4452 +Author: Peter Hutterer +Date: Sat May 24 20:02:56 2014 +1000 + + xfree86: fix wrong DontZap documentation (#71113) + + X.Org Bug 71113 + + Signed-off-by: Peter Hutterer + (cherry picked from commit e48a132b6d187f355abd7021be47edde972e7091) + +commit 57a042682029d009094a59914d6044b57ebf209b +Author: Matt Dew +Date: Sun Jun 22 22:11:48 2014 -0600 + + Bump version # to 1.15.1.901 + +commit 268eb961c9c58fc7cc26e514661b5f8304c1c08f +Author: Jeremy Huddleston Sequoia +Date: Sat May 31 17:45:02 2014 -0700 + + XQuartz: Update logic to account for title bar on every display in Mavericks + + + http://xquartz.macosforge.org/trac/ticket/832 + + Signed-off-by: Jeremy Huddleston Sequoia + (cherry picked from commit 1c10b37380d228b35db8a8616a6312ac54f5e59b) + +commit 624461797e05da711212329a5c7677df2544fb21 +Author: Jeremy Huddleston Sequoia +Date: Sat May 31 17:22:51 2014 -0700 + + XQuartz: Dead code removal (ENABLE_DEBUG_LOG) + + Signed-off-by: Jeremy Huddleston Sequoia + (cherry picked from commit ad0ff649c68b18c4b95b078c2d1d1e7de71a7c6f) + +commit 77ab9ca61717054b1c8c09594b01f04c3f4681f3 +Author: Jeremy Huddleston Sequoia +Date: Sat May 31 13:04:43 2014 -0700 + + XQuartz: Bump to 2.7.7 + + Signed-off-by: Jeremy Huddleston Sequoia + (cherry picked from commit e281288d5afedb154f52c31f70a350a013ecfb06) + +commit 6e31a3e4b51b89180ddbcdb40308e4192a64301f +Author: Peter Harris +Date: Fri Apr 11 17:44:59 2014 -0400 + + fb: Fix origin of source picture in fbGlyphs + + If a source picture doesn't repeat and a mask format is specified, the + incorrect calulation of the origin of the glyphs caused the glyphs to + not be drawn at all. + + Noticed when running gtk-demo from RHEL 6.5 and selecting "Rotated + Text". + + Signed-off-by: Peter Harris + Reviewed-by: Keith Packard + Signed-off-by: Keith Packard + + /* Test for this bug + + cc -std=c99 -o glyph glyph.c `pkg-config --cflags --libs xcb-render` + + */ + + // 16 x 16 pictfmt_a8 "glyph" + static const char glyph[] = { + 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, + 0, 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0, + 0, 0, 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0, 0, + 0, 0, 0, 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0, 0, 0, + 0, 0, 0, 0, 0xff, 0, 0, 0, 0, 0, 0, 0xff, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0xff, 0, 0, 0, 0, 0xff, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0xff, 0, 0, 0xff, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0xff, 0, 0, 0xff, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0xff, 0, 0, 0, 0, 0xff, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0xff, 0, 0, 0, 0, 0, 0, 0xff, 0, 0, 0, 0, + 0, 0, 0, 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0, 0, 0, + 0, 0, 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0, 0, + 0, 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0, + 0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, + }; + + static struct { + uint8_t len; + uint8_t pad[3]; + uint16_t deltax, deltay; + uint8_t glyph; + uint8_t pad2[3]; + } elt = { len:1, glyph:1, deltax:WIN_SIZE/2 - GLYPH_SIZE/2, deltay:WIN_SIZE/2 - GLYPH_SIZE/2 }; + + int main(int argc, char *argv[]) + { + int screen; + xcb_connection_t *c = xcb_connect(NULL, &screen); + if (!c || xcb_connection_has_error(c)) { + fprintf(stderr, "Cannot open default display \"%s\"\n", getenv("DISPLAY")); + return EXIT_FAILURE; + } + + // Find root window and depth + const xcb_setup_t *setup = xcb_get_setup(c); + if (screen >= setup->roots_len) + screen = 0; + xcb_screen_iterator_t si = xcb_setup_roots_iterator(setup); + for (int i=0; i < screen; i++) + xcb_screen_next(&si); + xcb_window_t root = si.data->root; + uint8_t depth = si.data->root_depth; + xcb_visualid_t visual = si.data->root_visual; + + // Find picture formats + xcb_render_query_pict_formats_reply_t *qpf; + qpf = xcb_render_query_pict_formats_reply(c, xcb_render_query_pict_formats(c), NULL); + if (!qpf) { + fprintf(stderr, "Cannot query RENDER picture formats\n"); + return EXIT_FAILURE; + } + xcb_render_pictformat_t fmt_a8 = 0; + xcb_render_pictforminfo_iterator_t pfi = + xcb_render_query_pict_formats_formats_iterator(qpf); + for (int i = 0; i < xcb_render_query_pict_formats_formats_length(qpf); i++) { + + if (pfi.data->depth == 8 && + pfi.data->type == XCB_RENDER_PICT_TYPE_DIRECT && + pfi.data->direct.alpha_mask == 0xFF) { + fmt_a8 = pfi.data->id; + break; + } + xcb_render_pictforminfo_next(&pfi); + } + if (!fmt_a8) { + fprintf(stderr, "Cannot find a8 RENDER picture format\n"); + return EXIT_FAILURE; + } + + xcb_render_pictformat_t fmt_visual = 0; + xcb_render_pictscreen_iterator_t psi = + xcb_render_query_pict_formats_screens_iterator(qpf); + for (int i = 0; i < xcb_render_query_pict_formats_screens_length(qpf); i++) { + xcb_render_pictdepth_iterator_t pdi = + xcb_render_pictscreen_depths_iterator(psi.data); + for (int j = 0; i < xcb_render_pictscreen_depths_length(psi.data); i++) { + xcb_render_pictvisual_iterator_t pvi = + xcb_render_pictdepth_visuals_iterator(pdi.data); + for (int k = 0; k < xcb_render_pictdepth_visuals_length(pdi.data); i++) { + if (pvi.data->visual == visual) { + fmt_visual = pvi.data->format; + goto found_visual; + } + xcb_render_pictvisual_next(&pvi); + } + xcb_render_pictdepth_next(&pdi); + } + xcb_render_pictscreen_next(&psi); + } + found_visual: + if (!fmt_visual) { + fprintf(stderr, "Cannot find visual RENDER picture format\n"); + return EXIT_FAILURE; + } + + xcb_render_glyphset_t glyphset = xcb_generate_id(c); + xcb_render_create_glyph_set(c, glyphset, fmt_a8); + uint32_t glyph_ids[] = {1}; + xcb_render_add_glyphs(c, glyphset, 1, glyph_ids, + &(xcb_render_glyphinfo_t){width:GLYPH_SIZE, height:GLYPH_SIZE}, sizeof(glyph), glyph); + + // Create window, pixmap, and gc + xcb_window_t window = xcb_generate_id(c); + uint32_t list[] = { si.data->black_pixel, XCB_EVENT_MASK_EXPOSURE }; + xcb_create_window(c, XCB_COPY_FROM_PARENT, window, root, 0, 0, WIN_SIZE, WIN_SIZE, + 0, XCB_WINDOW_CLASS_INPUT_OUTPUT, XCB_COPY_FROM_PARENT, + XCB_CW_BACK_PIXEL | XCB_CW_EVENT_MASK, list); + xcb_map_window(c, window); + xcb_render_picture_t winpic = xcb_generate_id(c); + xcb_render_create_picture(c, winpic, window, fmt_visual, 0, NULL); + + xcb_pixmap_t pixmap = xcb_generate_id(c); + xcb_create_pixmap(c, depth, pixmap, window, GLYPH_SIZE, GLYPH_SIZE); + xcb_render_picture_t pixpic = xcb_generate_id(c); + xcb_render_create_picture(c, pixpic, pixmap, fmt_visual, 0, NULL); + xcb_render_fill_rectangles(c, XCB_RENDER_PICT_OP_SRC, pixpic, + (xcb_render_color_t){green:0xFFFF, alpha:0xFFFF}, 1, + &(xcb_rectangle_t){width:GLYPH_SIZE, height:GLYPH_SIZE} ); + + xcb_flush(c); + for (xcb_generic_event_t *ev = xcb_wait_for_event(c); ev; ev = xcb_wait_for_event(c)) { + int type = ev->response_type; + free(ev); + if (type == XCB_EXPOSE) { + xcb_clear_area(c, 0, window, 0, 0, 0, 0); + xcb_render_composite_glyphs_8(c, XCB_RENDER_PICT_OP_SRC, pixpic, winpic, fmt_a8, + glyphset, 0, 0, sizeof(elt), (uint8_t *)&elt); + xcb_flush(c); + } + } + + return EXIT_SUCCESS; + } + + (cherry picked from commit 983e30361f49a67252d0b5d82630e70724d69dbf) + +commit 7b3aa3f0be8d1334dbf23bd04258a8856a4329c7 +Author: Jeremy Huddleston Sequoia +Date: Sun Apr 6 05:32:00 2014 -0700 + + XQuartz: Ensure we wait for the server thread to terminate + + AKA: XQuartz 2.7.5 doesn't delete its /tmp/.X$d-lock + + http://xquartz.macosforge.org/trac/ticket/823 + + Signed-off-by: Jeremy Huddleston Sequoia + commit 9182af8a09c326bb4b01d3645fb2936e93f02242 Author: Matt Dew Date: Sun Apr 13 20:55:40 2014 -0600 diff --git a/xserver/Xi/exevents.c b/xserver/Xi/exevents.c index ad0265093..01bdea6df 100644 --- a/xserver/Xi/exevents.c +++ b/xserver/Xi/exevents.c @@ -661,6 +661,8 @@ void DeepCopyDeviceClasses(DeviceIntPtr from, DeviceIntPtr to, DeviceChangedEvent *dce) { + OsBlockSIGIO(); + /* generic feedback classes, not tied to pointer and/or keyboard */ DeepCopyFeedbackClasses(from, to); @@ -668,6 +670,8 @@ DeepCopyDeviceClasses(DeviceIntPtr from, DeviceIntPtr to, DeepCopyKeyboardClasses(from, to); if ((dce->flags & DEVCHANGE_POINTER_EVENT)) DeepCopyPointerClasses(from, to); + + OsReleaseSIGIO(); } /** diff --git a/xserver/configure b/xserver/configure index b67428d9e..6f2217d2a 100644 --- a/xserver/configure +++ b/xserver/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for xorg-server 1.15.1. +# Generated by GNU Autoconf 2.69 for xorg-server 1.15.2. # # Report bugs to . # @@ -651,8 +651,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='xorg-server' PACKAGE_TARNAME='xorg-server' -PACKAGE_VERSION='1.15.1' -PACKAGE_STRING='xorg-server 1.15.1' +PACKAGE_VERSION='1.15.2' +PACKAGE_STRING='xorg-server 1.15.2' PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=xorg' PACKAGE_URL='' @@ -2025,7 +2025,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures xorg-server 1.15.1 to adapt to many kinds of systems. +\`configure' configures xorg-server 1.15.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -2095,7 +2095,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of xorg-server 1.15.1:";; + short | recursive ) echo "Configuration of xorg-server 1.15.2:";; esac cat <<\_ACEOF @@ -2522,7 +2522,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -xorg-server configure 1.15.1 +xorg-server configure 1.15.2 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -3231,7 +3231,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by xorg-server $as_me 1.15.1, which was +It was created by xorg-server $as_me 1.15.2, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3579,8 +3579,8 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ ac_compiler_gnu=$ac_cv_c_compiler_gnu -RELEASE_DATE="2014-04-13" -RELEASE_NAME="Heart Candy" +RELEASE_DATE="2014-06-27" +RELEASE_NAME="Malt Candy" am__api_version='1.12' @@ -4058,7 +4058,7 @@ fi # Define the identity of the package. PACKAGE='xorg-server' - VERSION='1.15.1' + VERSION='1.15.2' cat >>confdefs.h <<_ACEOF @@ -31991,7 +31991,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by xorg-server $as_me 1.15.1, which was +This file was extended by xorg-server $as_me 1.15.2, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -32057,7 +32057,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -xorg-server config.status 1.15.1 +xorg-server config.status 1.15.2 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/xserver/configure.ac b/xserver/configure.ac index 1ce8a088a..334a47a3c 100644 --- a/xserver/configure.ac +++ b/xserver/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.15.1, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server) -RELEASE_DATE="2014-04-13" -RELEASE_NAME="Heart Candy" +AC_INIT([xorg-server], 1.15.2, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server) +RELEASE_DATE="2014-06-27" +RELEASE_NAME="Malt Candy" AC_CONFIG_SRCDIR([Makefile.am]) AM_INIT_AUTOMAKE([foreign dist-bzip2]) AC_USE_SYSTEM_EXTENSIONS diff --git a/xserver/fb/fbpict.c b/xserver/fb/fbpict.c index b50385805..90178a665 100644 --- a/xserver/fb/fbpict.c +++ b/xserver/fb/fbpict.c @@ -191,7 +191,7 @@ fbGlyphs(CARD8 op, pixman_glyph_get_extents(glyphCache, n_glyphs, pglyphs, &extents); pixman_composite_glyphs(op, srcImage, dstImage, format, - xSrc + srcXoff + xDst, ySrc + srcYoff + yDst, + xSrc + srcXoff + extents.x1 - xDst, ySrc + srcYoff + extents.y1 - yDst, extents.x1, extents.y1, extents.x1 + dstXoff, extents.y1 + dstYoff, extents.x2 - extents.x1, diff --git a/xserver/hw/xfree86/xorgconf.cpp b/xserver/hw/xfree86/xorgconf.cpp index cd6d4a983..a903438b6 100644 --- a/xserver/hw/xfree86/xorgconf.cpp +++ b/xserver/hw/xfree86/xorgconf.cpp @@ -97,7 +97,7 @@ Section "ServerFlags" # Uncomment this to disable the server abort sequence # This allows clients to receive this key event. -# Option "DontZap" "false" +# Option "DontZap" "true" # Uncomment this to disable the / mode switching # sequences. This allows clients to receive these key events. diff --git a/xserver/hw/xquartz/X11Controller.m b/xserver/hw/xquartz/X11Controller.m index 5445c6f3a..022e83258 100644 --- a/xserver/hw/xquartz/X11Controller.m +++ b/xserver/hw/xquartz/X11Controller.m @@ -942,9 +942,8 @@ extern char *bundle_id_prefix; /* shutdown the X server, it will exit () for us. */ DarwinSendDDXEvent(kXquartzQuit, 0); - /* In case it doesn't, exit anyway after a while. */ - remain = 10000000; - while ((remain = usleep(remain)) > 0) ; + /* In case it doesn't, exit anyway after 5s. */ + [NSThread sleepForTimeInterval:5.0]; exit(1); } diff --git a/xserver/hw/xquartz/bundle/Info.plist.cpp b/xserver/hw/xquartz/bundle/Info.plist.cpp index 5fbb0ad55..a0d9050ac 100644 --- a/xserver/hw/xquartz/bundle/Info.plist.cpp +++ b/xserver/hw/xquartz/bundle/Info.plist.cpp @@ -19,9 +19,9 @@ CFBundlePackageType APPL CFBundleShortVersionString - 2.7.6 + 2.7.7 CFBundleVersion - 2.7.6 + 2.7.7 CFBundleSignature x11a CSResourcesFileMapped diff --git a/xserver/hw/xquartz/darwin.c b/xserver/hw/xquartz/darwin.c index e0983d6ef..29c6438a0 100644 --- a/xserver/hw/xquartz/darwin.c +++ b/xserver/hw/xquartz/darwin.c @@ -704,22 +704,6 @@ OsVendorInit(void) free(lf); DarwinPrintBanner(); -#ifdef ENABLE_DEBUG_LOG - { - char *home_dir = NULL, *log_file_path = NULL; - home_dir = getenv("HOME"); - if (home_dir) asprintf(&log_file_path, "%s/%s", home_dir, - DEBUG_LOG_NAME); - if (log_file_path) { - if (!access(log_file_path, F_OK)) { - debug_log_fp = fopen(log_file_path, "a"); - if (debug_log_fp) ErrorF("Debug logging enabled to %s\n", - log_file_path); - } - free(log_file_path); - } - } -#endif } } diff --git a/xserver/hw/xquartz/xpr/xprScreen.c b/xserver/hw/xquartz/xpr/xprScreen.c index e37601995..7aa1ae1df 100644 --- a/xserver/hw/xquartz/xpr/xprScreen.c +++ b/xserver/hw/xquartz/xpr/xprScreen.c @@ -54,6 +54,11 @@ #include "damage.h" #endif +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1090 +// From NSApplication.h +extern const double NSAppKitVersionNumber; +#endif + /* 10.4's deferred update makes X slower.. have to live with the tearing * for now.. */ #define XP_NO_DEFERRED_UPDATES 8 @@ -164,9 +169,14 @@ displayScreenBounds(CGDirectDisplayID id) (int)frame.size.width, (int)frame.size.height, (int)frame.origin.x, (int)frame.origin.y); - /* Remove menubar to help standard X11 window managers. */ - if (XQuartzIsRootless && - frame.origin.x == 0 && frame.origin.y == 0) { + /* Remove menubar to help standard X11 window managers. + * On Mavericks and later, the menu bar is on all displays. + */ + if (XQuartzIsRootless +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1090 + && (NSAppKitVersionNumber >= 1265 || (frame.origin.x == 0 && frame.origin.y == 0)) +#endif + ) { frame.origin.y += aquaMenuBarHeight; frame.size.height -= aquaMenuBarHeight; } diff --git a/xserver/include/misc.h b/xserver/include/misc.h index 17de71041..9c2f573b9 100644 --- a/xserver/include/misc.h +++ b/xserver/include/misc.h @@ -259,15 +259,19 @@ extern void FormatDouble(double dbl, char *string); * or a value greater than 0 */ static inline int -version_compare(uint16_t a_major, uint16_t a_minor, - uint16_t b_major, uint16_t b_minor) +version_compare(uint32_t a_major, uint32_t a_minor, + uint32_t b_major, uint32_t b_minor) { - int a, b; + if (a_major > b_major) + return 1; + if (a_major < b_major) + return -1; + if (a_minor > b_minor) + return 1; + if (a_minor < b_minor) + return -1; - a = a_major << 16 | a_minor; - b = b_major << 16 | b_minor; - - return (a - b); + return 0; } /* some macros to help swap requests, replies, and events */ diff --git a/xserver/man/Xserver.man b/xserver/man/Xserver.man index b103551fa..7a74e8541 100644 --- a/xserver/man/Xserver.man +++ b/xserver/man/Xserver.man @@ -223,9 +223,8 @@ turns on auto-repeat. .B -retro starts the stipple with the classic stipple and cursor visible. The default is to start with a black root window, and to suppress display of the cursor -until the first time an application calls XDefineCursor(). For the Xorg -server, this also sets the default for the DontZap option to FALSE. For -kdrive servers, this implies -zap. +until the first time an application calls XDefineCursor(). For kdrive +servers, this implies -zap. .TP 8 .B \-s \fIminutes\fP sets screen-saver timeout time in minutes. diff --git a/xserver/test-driver b/xserver/test-driver new file mode 100644 index 000000000..32bf39e83 --- /dev/null +++ b/xserver/test-driver @@ -0,0 +1,127 @@ +#! /bin/sh +# test-driver - basic testsuite driver script. + +scriptversion=2012-06-27.10; # UTC + +# Copyright (C) 2011-2013 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +# Make unconditional expansion of undefined variables an error. This +# helps a lot in preventing typo-related bugs. +set -u + +usage_error () +{ + echo "$0: $*" >&2 + print_usage >&2 + exit 2 +} + +print_usage () +{ + cat <$log_file 2>&1 +estatus=$? +if test $enable_hard_errors = no && test $estatus -eq 99; then + estatus=1 +fi + +case $estatus:$expect_failure in + 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; + 0:*) col=$grn res=PASS recheck=no gcopy=no;; + 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; + 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; + *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; + *:*) col=$red res=FAIL recheck=yes gcopy=yes;; +esac + +# Report outcome to console. +echo "${col}${res}${std}: $test_name" + +# Register the test result, and other relevant metadata. +echo ":test-result: $res" > $trs_file +echo ":global-test-result: $res" >> $trs_file +echo ":recheck: $recheck" >> $trs_file +echo ":copy-in-global-log: $gcopy" >> $trs_file + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: