[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

xorg-server: Changes to 'debian-experimental'



 ChangeLog                   |  154 ++++++++++++++++++++++++++++++++++++++++++++
 Xext/saver.c                |    2 
 Xi/xipassivegrab.c          |    8 --
 configure.ac                |    6 -
 debian/changelog            |    5 -
 debian/serverminver         |    2 
 dix/window.c                |    2 
 hw/dmx/dmxcursor.c          |    2 
 hw/xfree86/modes/xf86Crtc.c |    7 +-
 include/xkbsrv.h            |    1 
 randr/randr.c               |    2 
 xfixes/cursor.c             |   12 ++-
 xkb/xkbAccessX.c            |    6 +
 13 files changed, 192 insertions(+), 17 deletions(-)

New commits:
commit fef80d8bab86e75d2eb202b33e11e2e17584b2f6
Author: Maarten Lankhorst <maarten.lankhorst@canonical.com>
Date:   Fri Dec 7 09:17:43 2012 +0100

    Bump ABI_VIDEODRV_VERSION to 13.1
    
    xf86UpdateDesktopDimensions is newly exported for nvidia blob

diff --git a/debian/serverminver b/debian/serverminver
index 41482e2..b6b99d6 100644
--- a/debian/serverminver
+++ b/debian/serverminver
@@ -1,3 +1,3 @@
 2:1.12.99.901
-ABI_VIDEODRV_VERSION:13.0
+ABI_VIDEODRV_VERSION:13.1
 ABI_XINPUT_VERSION:18.0

commit f5e11c2d708e819fcb1f131f1fe0e8cb20b8ee0e
Author: Maarten Lankhorst <maarten.lankhorst@canonical.com>
Date:   Fri Dec 7 09:07:18 2012 +0100

    New upstream release

diff --git a/ChangeLog b/ChangeLog
index 3fed06c..8a45f13 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,157 @@
+commit ede07c1af35926c77c4e766cc02c00333b498460
+Author: Matt Dew <marcoz@osource.org>
+Date:   Thu Dec 6 22:46:46 2012 -0700
+
+    Bump version
+
+commit e2369dd404024415853108848c8d052e73e95461
+Merge: d71a17c 79220f4
+Author: Matt Dew <marcoz@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@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@gmail.com>
+    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    (cherry picked from commit aa9a9ad08b8a6e7e95de7c2bf45d93dd50f9ca87)
+
+commit 521f3fb566e67330a486874928a21ce201dba02b
+Author: Sybren van Elderen <sowmestno@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@msn.com>
+    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    (cherry picked from commit 6e18599d691036eca6ff082c17727d9ffb926984)
+
+commit 73bd33b4d4e3df4a8097826695a8dbdc2fb5c920
+Author: Peter Hutterer <peter.hutterer@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@who-t.net>
+    Acked-by: Daniel Stone <daniel@fooishbar.org>
+    (cherry picked from commit 2c4388a00ec308bc2d48ba751ff510cd5c1b2384)
+
+commit 2def985466683cf3746c03f9ac318e5941d22f86
+Author: Jasper St. Pierre <jstpierre@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@mecheye.net>
+    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    (cherry picked from commit a51b2c3913fc8556f6bd1c76805d045fc424c4bb)
+
+commit 4a957c9e81233344da0b5b9388ca2d97eedde7d5
+Author: Peter Hutterer <peter.hutterer@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@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@who-t.net>
+    Tested-by: Giacomo Perale <ghepeu@virgilio.it>
+    Reviewed-by: Keith Packard <keithp@keithp.com>
+    (cherry picked from commit 2dc6d9228456cbc274a1fcea478258e5ae4dc629)
+
+commit d71a17cfab6536df9df46a342a24dd415c020192
+Author: Chris Wilson <chris@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@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@chris-wilson.co.uk>
+    Reviewed-by: Dave Airlie <airlied@redhat.com>
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+    (cherry picked from commit e54f71a2c7a1677a5c5032d1e7dc099d5204144b)
+
+commit 72ef659874ffe88e88d2f2a35a6e404782cefe9f
+Author: Keith Packard <keithp@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@redhat.com>
+    Signed-off-by: Dave Airlie <airlied@redhat.com>
+    (cherry picked from commit 37d956e3ac9513b74078882dff489f9b0a7a5a28)
+
+commit a2748aa6bde13b447a246606767535a30090cd02
+Author: Dave Airlie <airlied@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@redhat.com>
+    Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+    (cherry picked from commit e9ea96d6a88f197928c82b008953f1810de6f792)
+
 commit c0e68f8e70e0b0fbb00992228c4651d5b0902759
 Author: Matt Dew <marcoz@osource.org>
 Date:   Thu Nov 22 21:37:57 2012 -0700
diff --git a/debian/changelog b/debian/changelog
index 23fcd94..6dec1d0 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,8 +1,7 @@
-xorg-server (2:1.13.0.901-1) UNRELEASED; urgency=low
-
-  * New upstream release
+xorg-server (2:1.13.0.902-1) UNRELEASED; urgency=low
 
   [ Maarten Lankhorst ]
+  * New upstream release
   * Bump minimum required abi, randr, dri2 and gl protos.
 
   [ Timo Aaltonen ]

commit ede07c1af35926c77c4e766cc02c00333b498460
Author: Matt Dew <marcoz@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 79220f4390127d9971cbcf378530bf36172ef35a
Author: Daniel Martin <consume.noise@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@gmail.com>
    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
    Signed-off-by: Peter Hutterer <peter.hutterer@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@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@msn.com>
    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
    Signed-off-by: Peter Hutterer <peter.hutterer@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@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@who-t.net>
    Acked-by: Daniel Stone <daniel@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@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@mecheye.net>
    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
    Signed-off-by: Peter Hutterer <peter.hutterer@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@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@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@who-t.net>
    Tested-by: Giacomo Perale <ghepeu@virgilio.it>
    Reviewed-by: Keith Packard <keithp@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@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@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@chris-wilson.co.uk>
    Reviewed-by: Dave Airlie <airlied@redhat.com>
    Signed-off-by: Keith Packard <keithp@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@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@redhat.com>
    Signed-off-by: Dave Airlie <airlied@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@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@redhat.com>
    Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Keith Packard <keithp@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))


Reply to: