[Xquartz-changes] xserver: Branch 'server-1.13-branch' - 14 commits

Jeremy Huddleston jeremyhu at freedesktop.org
Tue Dec 18 00:33:09 PST 2012


Rebased ref, commits from common ancestor:
commit 34fb39a960898f5a0bcc67f76f385ba8a91ea2ba
Author: Jeremy Huddleston Sequoia <jeremyhu at apple.com>
Date:   Thu Sep 20 21:11:21 2012 -0700

    XQuartz: Add some verbose logging to debug xp_lock_window being unbalanced
    
    Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu at apple.com>
    (cherry picked from commit f54987de97720200ee94eba1c7a737d4ad8c55c8)

diff --git a/hw/xquartz/xpr/xprFrame.c b/hw/xquartz/xpr/xprFrame.c
index 01f1def..aad375b 100644
--- a/hw/xquartz/xpr/xprFrame.c
+++ b/hw/xquartz/xpr/xprFrame.c
@@ -49,6 +49,10 @@
 #include <pthread.h>
 #endif
 
+#ifdef DEBUG_XP_LOCK_WINDOW
+#include <execinfo.h>
+#endif
+
 #define DEFINE_ATOM_HELPER(func, atom_name)                      \
     static Atom func(void) {                                       \
         static int generation;                                      \
@@ -376,6 +380,18 @@ xprStartDrawing(RootlessFrameID wid, char **pixelData, int *bytesPerRow)
     unsigned int rowbytes[2];
     xp_error err;
 
+#ifdef DEBUG_XP_LOCK_WINDOW
+    void* callstack[128];
+    int i, frames = backtrace(callstack, 128);
+    char** strs = backtrace_symbols(callstack, frames);
+
+    ErrorF("=== LOCK %d ===\n", (int)x_cvt_vptr_to_uint(wid));
+    for (i = 0; i < frames; ++i) {
+        ErrorF("    %s\n", strs[i]);
+    }
+    free(strs);
+#endif
+
     err = xp_lock_window(x_cvt_vptr_to_uint(
                              wid), NULL, NULL, data, rowbytes, NULL);
     if (err != Success)
@@ -395,6 +411,18 @@ xprStopDrawing(RootlessFrameID wid, Bool flush)
 {
     xp_error err;
 
+#ifdef DEBUG_XP_LOCK_WINDOW
+    void* callstack[128];
+    int i, frames = backtrace(callstack, 128);
+    char** strs = backtrace_symbols(callstack, frames);
+
+    ErrorF("=== UNLOCK %d ===\n", (int)x_cvt_vptr_to_uint(wid));
+    for (i = 0; i < frames; ++i) {
+        ErrorF("    %s\n", strs[i]);
+    }
+    free(strs);
+#endif
+
     err = xp_unlock_window(x_cvt_vptr_to_uint(wid), flush);
     /* This should be a FatalError, but we started tripping over it.  Make it a
      * FatalError after http://xquartz.macosforge.org/trac/ticket/482 is fixed.
commit 06e2ecd0df9b81dd518ae6017ec42765520e2e93
Author: Jeremy Huddleston Sequoia <jeremyhu at apple.com>
Date:   Thu Sep 20 21:49:40 2012 -0700

    XQuartz: Avoid a possible deadlock with DRI on OS X 10.7.5 and OS X 10.8.2
    
    <rdar://problem/12338921>
    http://bugs.winehq.org/show_bug.cgi?id=31751
    
    Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu at apple.com>
    (cherry picked from commit 25d26875bc9bd6fd23ae1b5280f015abf1b033b7)

diff --git a/hw/xquartz/xpr/dri.c b/hw/xquartz/xpr/dri.c
index 03af163..adba69c 100644
--- a/hw/xquartz/xpr/dri.c
+++ b/hw/xquartz/xpr/dri.c
@@ -64,6 +64,7 @@
 #include "mi.h"
 #include "mipointer.h"
 #include "rootless.h"
+#include "rootlessCommon.h"
 #include "x-hash.h"
 #include "x-hook.h"
 #include "driWrap.h"
@@ -380,6 +381,11 @@ DRICreateSurface(ScreenPtr pScreen, Drawable id,
     DRIDrawablePrivPtr pDRIDrawablePriv;
 
     if (pDrawable->type == DRAWABLE_WINDOW) {
+        /* <rdar://problem/12338921>
+         * http://bugs.winehq.org/show_bug.cgi?id=31751
+         */
+        RootlessStopDrawing((WindowPtr)pDrawable, FALSE);
+
         pDRIDrawablePriv = CreateSurfaceForWindow(pScreen,
                                                   (WindowPtr)pDrawable, &wid);
 
commit 92ecbf5f0f516aacb7f0034e3786c4454a07fe8d
Author: Matt Dew <marcoz at osource.org>
Date:   Thu Dec 13 21:05:24 2012 -0700

    No changes from 1.13.0.902 (rc2)
    
    Bump version to 1.13.1

diff --git a/configure.ac b/configure.ac
index ffd8a97..67b1eb4 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.13.0.902, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
-RELEASE_DATE="2012-12-06"
-RELEASE_NAME="Jasmine Tea"
+AC_INIT([xorg-server], 1.13.1, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
+RELEASE_DATE="2012-12-13"
+RELEASE_NAME="Chrysanthemum Tea"
 AC_CONFIG_SRCDIR([Makefile.am])
 AM_INIT_AUTOMAKE([foreign dist-bzip2])
 AM_MAINTAINER_MODE
commit ede07c1af35926c77c4e766cc02c00333b498460
Author: Matt Dew <marcoz at osource.org>
Date:   Thu Dec 6 22:46:46 2012 -0700

    Bump version

diff --git a/configure.ac b/configure.ac
index 590b773..ffd8a97 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.13.0.901, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
-RELEASE_DATE="2012-11-22"
-RELEASE_NAME="Puer Tea"
+AC_INIT([xorg-server], 1.13.0.902, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
+RELEASE_DATE="2012-12-06"
+RELEASE_NAME="Jasmine Tea"
 AC_CONFIG_SRCDIR([Makefile.am])
 AM_INIT_AUTOMAKE([foreign dist-bzip2])
 AM_MAINTAINER_MODE
commit e2369dd404024415853108848c8d052e73e95461
Merge: d71a17c 79220f4
Author: Matt Dew <marcoz at osource.org>
Date:   Thu Dec 6 21:53:42 2012 -0700

    Merge branch 'server-1.13-branch' of git://people.freedesktop.org/~whot/xserver into server-1.13-branch

commit 79220f4390127d9971cbcf378530bf36172ef35a
Author: Daniel Martin <consume.noise at gmail.com>
Date:   Wed Nov 7 11:31:01 2012 +0100

    Xi: Fix modifier swapping in XIPassiveGrabDevice
    
    XIPassiveGrabDevice uses a list of uint32_t as modifier sets.
    
    The ModifierInfo struct represents the current modifier states and is
    therefor used in XIQueryPointer and various events.
    
    Signed-off-by: Daniel Martin <consume.noise at gmail.com>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    (cherry picked from commit aa9a9ad08b8a6e7e95de7c2bf45d93dd50f9ca87)

diff --git a/Xi/xipassivegrab.c b/Xi/xipassivegrab.c
index ddab53d..62a3a46 100644
--- a/Xi/xipassivegrab.c
+++ b/Xi/xipassivegrab.c
@@ -50,7 +50,7 @@ int
 SProcXIPassiveGrabDevice(ClientPtr client)
 {
     int i;
-    xXIModifierInfo *mods;
+    uint32_t *mods;
 
     REQUEST(xXIPassiveGrabDeviceReq);
 
@@ -63,12 +63,10 @@ SProcXIPassiveGrabDevice(ClientPtr client)
     swaps(&stuff->mask_len);
     swaps(&stuff->num_modifiers);
 
-    mods = (xXIModifierInfo *) &stuff[1];
+    mods = (uint32_t *) &stuff[1];
 
     for (i = 0; i < stuff->num_modifiers; i++, mods++) {
-        swapl(&mods->base_mods);
-        swapl(&mods->latched_mods);
-        swapl(&mods->locked_mods);
+        swapl(mods);
     }
 
     return ProcXIPassiveGrabDevice(client);
commit 521f3fb566e67330a486874928a21ce201dba02b
Author: Sybren van Elderen <sowmestno at msn.com>
Date:   Tue Nov 27 19:27:10 2012 +0100

    hw/dmx: add update_desktop_dimensions() call
    
    The Xdmx server did not update the desktop dimensions when computing screen
    origins.
    
    Signed-off-by: Sybren van Elderen <sowmestno at msn.com>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    (cherry picked from commit 6e18599d691036eca6ff082c17727d9ffb926984)

diff --git a/hw/dmx/dmxcursor.c b/hw/dmx/dmxcursor.c
index 1a77c7d..35aca81 100644
--- a/hw/dmx/dmxcursor.c
+++ b/hw/dmx/dmxcursor.c
@@ -346,6 +346,8 @@ dmxComputeScreenOrigins(void)
             screenInfo.screens[i]->y -= minY;
         }
     }
+
+    update_desktop_dimensions();
 }
 
 /** Recompute origin information in the #dmxScreens list.  This is
commit 73bd33b4d4e3df4a8097826695a8dbdc2fb5c920
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Jun 26 10:30:35 2012 +1000

    xkb: fill in keycode and event type for slow keys enablement
    
    eventType is set for the type that triggered a XkbControlsNotify event.
    Technically, SlowKeys is triggered by a timer which doesn't have a matching
    core event type. So we used to use 0 here.
    
    Practically, the timer is triggered by a key press + hold and cancelled when
    the key is released before the timeout expires. So we might as well set
    KeyPress (keycode) in the ControlsNotify to give clients a chance to differ
    between timer-triggered SlowKeys and client-triggered ones.
    
    This is a chance in behaviour, though I suspect with little impact.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Acked-by: Daniel Stone <daniel at fooishbar.org>
    (cherry picked from commit 2c4388a00ec308bc2d48ba751ff510cd5c1b2384)

diff --git a/include/xkbsrv.h b/include/xkbsrv.h
index d584785..78b8f5a 100644
--- a/include/xkbsrv.h
+++ b/include/xkbsrv.h
@@ -171,6 +171,7 @@ typedef struct _XkbSrvInfo {
     KeyCode mouseKey;
     KeyCode inactiveKey;
     KeyCode slowKey;
+    KeyCode slowKeyEnableKey;
     KeyCode repeatKey;
     CARD8 krgTimerActive;
     CARD8 beepType;
diff --git a/xkb/xkbAccessX.c b/xkb/xkbAccessX.c
index c1af32e..21df85d 100644
--- a/xkb/xkbAccessX.c
+++ b/xkb/xkbAccessX.c
@@ -291,8 +291,8 @@ AccessXKRGExpire(OsTimerPtr timer, CARD32 now, pointer arg)
         return 4000;
     }
     xkbi->krgTimerActive = _OFF_TIMER;
-    cn.keycode = 0;
-    cn.eventType = 0;
+    cn.keycode = xkbi->slowKeyEnableKey;
+    cn.eventType = KeyPress;
     cn.requestMajor = 0;
     cn.requestMinor = 0;
     if (xkbi->desc->ctrls->enabled_ctrls & XkbSlowKeysMask) {
@@ -304,6 +304,7 @@ AccessXKRGExpire(OsTimerPtr timer, CARD32 now, pointer arg)
         LogMessage(X_INFO, "XKB SlowKeys are now enabled. Hold shift to disable.\n");
     }
 
+    xkbi->slowKeyEnableKey = 0;
     return 0;
 }
 
@@ -462,6 +463,7 @@ AccessXFilterPressEvent(DeviceEvent *event, DeviceIntPtr keybd)
     if (ctrls->enabled_ctrls & XkbAccessXKeysMask) {
         /* check for magic sequences */
         if ((sym[0] == XK_Shift_R) || (sym[0] == XK_Shift_L)) {
+            xkbi->slowKeyEnableKey = key;
             if (XkbAX_NeedFeedback(ctrls, XkbAX_SlowWarnFBMask)) {
                 xkbi->krgTimerActive = _KRG_WARN_TIMER;
                 xkbi->krgTimer = TimerSet(xkbi->krgTimer, 0, 4000,
commit 2def985466683cf3746c03f9ac318e5941d22f86
Author: Jasper St. Pierre <jstpierre at mecheye.net>
Date:   Tue Nov 20 14:50:41 2012 -0500

    cursor: Revise edge cases for the pointer moving towards barriers
    
    Since barriers block the invisible line between pixels, that means
    that we need to explicitly check the boundaries, or else we'll have
    a potential off-by-one error. This fixes issues when trying to move
    down or right across a barrier and having the pointer visibly bounce.
    
    Signed-off-by: Jasper St. Pierre <jstpierre at mecheye.net>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    (cherry picked from commit a51b2c3913fc8556f6bd1c76805d045fc424c4bb)

diff --git a/xfixes/cursor.c b/xfixes/cursor.c
index 4eee592..4d4a75e 100644
--- a/xfixes/cursor.c
+++ b/xfixes/cursor.c
@@ -1090,7 +1090,11 @@ barrier_is_blocking(const struct PointerBarrier * barrier,
         if (dir & BarrierNegativeX && x1 == (barrier->x1 - 1))
             return FALSE;
         /* startpoint adjacent to barrier, moving towards -> block */
-        if (x1 == barrier->x1 && y1 >= barrier->y1 && y1 <= barrier->y2) {
+        if (dir & BarrierPositiveX && x1 == (barrier->x1 - 1) && y1 >= barrier->y1 && y1 <= barrier->y2) {
+            *distance = 0;
+            return TRUE;
+        }
+        if (dir & BarrierNegativeX && x1 == barrier->x1 && y1 >= barrier->y1 && y1 <= barrier->y2) {
             *distance = 0;
             return TRUE;
         }
@@ -1102,7 +1106,11 @@ barrier_is_blocking(const struct PointerBarrier * barrier,
         if (dir & BarrierNegativeY && y1 == (barrier->y1 - 1))
             return FALSE;
         /* startpoint adjacent to barrier, moving towards -> block */
-        if (y1 == barrier->y1 && x1 >= barrier->x1 && x1 <= barrier->x2) {
+        if (dir & BarrierPositiveY && y1 == (barrier->y1 - 1) && x1 >= barrier->x1 && x1 <= barrier->x2) {
+            *distance = 0;
+            return TRUE;
+        }
+        if (dir & BarrierNegativeY && y1 == barrier->y1 && x1 >= barrier->x1 && x1 <= barrier->x2) {
             *distance = 0;
             return TRUE;
         }
commit 4a957c9e81233344da0b5b9388ca2d97eedde7d5
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Thu Nov 15 14:00:57 2012 +1000

    When resetting device idle time, reset XIAll(Master)Devices too (#56649)
    
    When the screen saver is forcibly deactivated, the idle time counter is
    reset for all devices but not for the fake XIAllDevices and
    XIAllMasterDevices. XScreenSaverQueryInfo uses XIAlldevices to fill the
    "idle" field, thus returning the wrong value.
    
    Regression introduced in
    commit 6aef209ebc2e54f5465da505a780f7b4cc273ee0
    Author: Peter Hutterer <peter.hutterer at who-t.net>
    Date:   Mon Mar 12 13:51:02 2012 +1000
    
        Change lastDeviceIdleTime to be per-device
    
    X.Org Bug 56649 <http://bugs.freedesktop.org/show_bug.cgi?id=56649>
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Tested-by: Giacomo Perale <ghepeu at virgilio.it>
    Reviewed-by: Keith Packard <keithp at keithp.com>
    (cherry picked from commit 2dc6d9228456cbc274a1fcea478258e5ae4dc629)

diff --git a/Xext/saver.c b/Xext/saver.c
index ac4a633..f73e2a2 100644
--- a/Xext/saver.c
+++ b/Xext/saver.c
@@ -393,6 +393,8 @@ ScreenSaverFreeSuspend(pointer value, XID id)
             UpdateCurrentTimeIf();
             nt_list_for_each_entry(dev, inputInfo.devices, next)
                 lastDeviceEventTime[dev->id] = currentTime;
+            lastDeviceEventTime[XIAllDevices] = currentTime;
+            lastDeviceEventTime[XIAllMasterDevices] = currentTime;
             SetScreenSaverTimer();
         }
     }
diff --git a/dix/window.c b/dix/window.c
index cdd12dc..49ef4a0 100644
--- a/dix/window.c
+++ b/dix/window.c
@@ -3132,6 +3132,8 @@ dixSaveScreens(ClientPtr client, int on, int mode)
             UpdateCurrentTimeIf();
             nt_list_for_each_entry(dev, inputInfo.devices, next)
                 lastDeviceEventTime[dev->id] = currentTime;
+            lastDeviceEventTime[XIAllDevices] = currentTime;
+            lastDeviceEventTime[XIAllMasterDevices] = currentTime;
         }
         SetScreenSaverTimer();
     }
commit d71a17cfab6536df9df46a342a24dd415c020192
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Sat Nov 10 10:26:08 2012 +0000

    xf86: select a fake output for headless servers
    
    Following commit 37d956e3ac9513b74078882dff489f9b0a7a5a28
    Author: Keith Packard <keithp at keithp.com>
    Date:   Mon Sep 10 11:14:20 2012 +1000
    
        xf86: fix compat output selection for no output GPUs
    
    headless servers can no longer startup as we no longer select a compat
    output for the fake framebuffer.
    
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=56343
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
    Reviewed-by: Dave Airlie <airlied at redhat.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>
    (cherry picked from commit e54f71a2c7a1677a5c5032d1e7dc099d5204144b)

diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index 177f7ac..13251cf 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -1847,6 +1847,10 @@ SetCompatOutput(xf86CrtcConfigPtr config)
         output = config->output[config->compat_output];
     }
 
+    /* All outputs are disconnected, select one to fake */
+    if (!output && config->num_output)
+        output = config->output[0];
+
     return output;
 }
 
commit 72ef659874ffe88e88d2f2a35a6e404782cefe9f
Author: Keith Packard <keithp at keithp.com>
Date:   Mon Sep 10 11:14:20 2012 +1000

    xf86: fix compat output selection for no output GPUs
    
    This should work properly with dynamic outputs.
    
    Reviewed-by: Dave Airlie <airlied at redhat.com>
    Signed-off-by: Dave Airlie <airlied at redhat.com>
    (cherry picked from commit 37d956e3ac9513b74078882dff489f9b0a7a5a28)

diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index e3eaf5f..177f7ac 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -66,6 +66,7 @@ xf86CrtcConfigInit(ScrnInfoPtr scrn, const xf86CrtcConfigFuncsRec * funcs)
     config = xnfcalloc(1, sizeof(xf86CrtcConfigRec));
 
     config->funcs = funcs;
+    config->compat_output = -1;
 
     scrn->privates[xf86CrtcConfigPrivateIndex].ptr = config;
 }
@@ -1841,7 +1842,7 @@ SetCompatOutput(xf86CrtcConfigPtr config)
     if (compat >= 0) {
         config->compat_output = compat;
     }
-    else {
+    else if (config->compat_output >= 0 && config->compat_output < config->num_output) {
         /* Don't change the compat output when no valid outputs found */
         output = config->output[config->compat_output];
     }
commit a2748aa6bde13b447a246606767535a30090cd02
Author: Dave Airlie <airlied at gmail.com>
Date:   Fri Nov 30 20:54:38 2012 +1000

    randr: call RRProviderInit in the proper place.
    
    No idea where this got lost across development cycles, but its
    definitely missing.
    
    Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=57448
    
    Signed-off-by: Dave Airlie <airlied at redhat.com>
    Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>
    (cherry picked from commit e9ea96d6a88f197928c82b008953f1810de6f792)

diff --git a/randr/randr.c b/randr/randr.c
index da48c3f..f0decfc 100644
--- a/randr/randr.c
+++ b/randr/randr.c
@@ -264,6 +264,8 @@ RRInit(void)
             return FALSE;
         if (!RROutputInit())
             return FALSE;
+        if (!RRProviderInit())
+            return FALSE;
         RRGeneration = serverGeneration;
     }
     if (!dixRegisterPrivateKey(&rrPrivKeyRec, PRIVATE_SCREEN, 0))
commit c0e68f8e70e0b0fbb00992228c4651d5b0902759
Author: Matt Dew <marcoz at osource.org>
Date:   Thu Nov 22 21:37:57 2012 -0700

    Bump release info for this RC1.

diff --git a/configure.ac b/configure.ac
index ac3bf26..590b773 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.13.0, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
-RELEASE_DATE="2012-09-05"
-RELEASE_NAME="Iced Tea"
+AC_INIT([xorg-server], 1.13.0.901, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
+RELEASE_DATE="2012-11-22"
+RELEASE_NAME="Puer Tea"
 AC_CONFIG_SRCDIR([Makefile.am])
 AM_INIT_AUTOMAKE([foreign dist-bzip2])
 AM_MAINTAINER_MODE


More information about the Xquartz-changes mailing list