summaryrefslogtreecommitdiff
path: root/xserver
diff options
context:
space:
mode:
authorMatthieu Herrb <matthieu@cvs.openbsd.org>2013-12-28 14:40:03 +0000
committerMatthieu Herrb <matthieu@cvs.openbsd.org>2013-12-28 14:40:03 +0000
commitfc3a735d42a0dcd748b6b8dc2c63bafde01effd0 (patch)
tree9b40fc63ccdb80ebec638a8c31e73c17f8dbbaeb /xserver
parentda8308393b93d5c87075d65ace98cd249643e165 (diff)
Update to xserver 1.14.5
Diffstat (limited to 'xserver')
-rw-r--r--xserver/ChangeLog428
-rw-r--r--xserver/Xext/sync.c11
-rw-r--r--xserver/configure24
-rw-r--r--xserver/configure.ac6
-rw-r--r--xserver/glx/glxdricommon.c24
-rw-r--r--xserver/hw/xfree86/common/xf86Bus.c5
-rw-r--r--xserver/hw/xfree86/common/xf86platformBus.c6
-rw-r--r--xserver/hw/xfree86/modes/xf86RandR12.c21
-rw-r--r--xserver/hw/xquartz/X11Controller.m2
-rw-r--r--xserver/hw/xquartz/bundle/Info.plist.cpp8
-rw-r--r--xserver/miext/damage/damage.c5
-rw-r--r--xserver/randr/randr.c120
-rw-r--r--xserver/randr/randrstr.h12
-rw-r--r--xserver/randr/rrcrtc.c6
-rw-r--r--xserver/randr/rrinfo.c2
-rw-r--r--xserver/randr/rroutput.c7
-rw-r--r--xserver/randr/rrpointer.c2
-rw-r--r--xserver/randr/rrprovider.c25
-rw-r--r--xserver/randr/rrscreen.c2
19 files changed, 680 insertions, 36 deletions
diff --git a/xserver/ChangeLog b/xserver/ChangeLog
index 0ad7f7215..5aabd0e52 100644
--- a/xserver/ChangeLog
+++ b/xserver/ChangeLog
@@ -1,9 +1,437 @@
+commit 200f98894a43114586eb2d4405e766e8a4a59221
+Author: Matt Dew <marcoz@osource.org>
+Date: Thu Dec 12 20:51:27 2013 -0700
+
+ bump version from 1.14.4.901 to 1.14.5
+
+commit c30db601a619b741260f02aa08ccec57ab9d43ba
+Author: Matt Dew <marcoz@osource.org>
+Date: Thu Nov 21 21:55:35 2013 -0700
+
+ bump version to 1.14.4.901
+
+commit 384588bd8408d50b1b29b174af75c7b1cd3ff60d
+Merge: 6cc5efa 7ddc6f7
+Author: Matt Dew <marcoz@osource.org>
+Date: Sat Nov 16 15:27:35 2013 -0700
+
+ Merge commit '7ddc6f7f1ed0e0f85b2d617c59d75d5de1cd2d5a' into server-1.14-branch
+
+commit 6cc5efa68e5fdc301ab9a381bffe88fe5c7865e2
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Wed Oct 30 15:40:58 2013 +1000
+
+ sync: fix corner-case in triggering idle alarms
+
+ ProcessInputEvent() resets the device idle times. If idle time was higher than
+ the lower bracket, this should trigger an event in the idle time wakeup
+ handler.
+
+ If processing is slow, the idle time may advance past the lower bracket
+ between the reset and the time the BlockHandler is called. In that case, we'd
+ never schedule a wakeup to handle the event, causing us to randomly miss
+ events.
+
+ Ran tests with a neg transition trigger on 5ms with 200 repeats of the test
+ and it succeeded. Anything below that gets a bit tricky to make sure the
+ server sees the same idle time as the client usleeps for.
+
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+ Reviewed-by: Keith Packard <keithp@keithp.com>
+ (cherry picked from commit f36f5a65f639b6524191d888d5bf89e73027156c)
+
+commit 7ddc6f7f1ed0e0f85b2d617c59d75d5de1cd2d5a
+Author: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
+Date: Fri Nov 8 14:55:33 2013 -0800
+
+ xfree86: Fix build without libpciaccess
+
+ Regression fix from commit 04ab07ca19236d6c9a947e065fb69b0dd0d16639
+
+ Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
+ Reviewed-by: Connor Behan <connor.behan@gmail.com>
+ (cherry picked from commit 4a251f5883b042cd902c192060a0be2b11148f2b)
+
+commit c6fd9c11f7302f4ac77bce37687c8bbffbf8ed65
+Author: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
+Date: Sun Nov 10 11:40:27 2013 -0800
+
+ XQuartz: Don't sleep forever on exit if usleep() returns an error
+
+ Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
+ (cherry picked from commit f70a8bf3714d89bccaad36841ef9149e91ad3bba)
+
+commit c82a90815cef2d92f6aabb2b0991b3cda71d23c4
+Author: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
+Date: Sun Nov 10 11:26:49 2013 -0800
+
+ XQuartz: Update Info.plist copyright years
+
+ Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
+ (cherry picked from commit ebcc1c214c466582d7b92826b4860256fd9c582a)
+
+commit 339af2ae943d943f8ce986fc7bdcb8aa52b44922
+Author: Eric Anholt <eric@anholt.net>
+Date: Tue Oct 22 14:22:04 2013 -0700
+
+ glx: Add support for the new DRI loader entrypoint.
+
+ This is going to be exposed (and not the old entrypoint) for some DRI
+ drivers once the megadrivers series lands, and the plan is to
+ eventually transition all drivers to that. Hopefully this is
+ unobtrusive enough to merge to stable X servers so that they can be
+ compatible with new Mesa versions.
+
+ v2: typo fix in the comment
+
+ Signed-off-by: Eric Anholt <eric@anholt.net>
+ Reviewed-by: Adam Jackson <ajax@redhat.com>
+ Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 833639d2653a869c2ec8692640213e2ffa16fbb4
+Merge: cf684f0 94b7f26
+Author: Matt Dew <marcoz@osource.org>
+Date: Tue Nov 5 20:06:28 2013 -0700
+
+ Merge commit '94b7f26aeda31cf55ff9b7c04f390ba6d35977e4' into server-1.14-branch
+
+commit cf684f05180e8b3eb29ca94bbab84abb99f0f578
+Author: Michal Srb <msrb@suse.com>
+Date: Wed Oct 30 13:33:51 2013 +0200
+
+ randr: deliver Output and Crtc events of attached output providers.
+
+ Consider all attached output providers when looking for changed outputs and
+ crtcs.
+
+ Reviewed-by: Dave Airlie <airlied@redhat.com>
+ Signed-off-by: Michal Srb <msrb@suse.com>
+ Signed-off-by: Keith Packard <keithp@keithp.com>
+ (cherry picked from commit 85ae44f07fa21b4a48d95d736dc8135bd4f751d0)
+
+commit 87d66ccfec6808fd753da04254c096fa4a3d14cb
+Author: Michal Srb <msrb@suse.com>
+Date: Wed Oct 30 13:33:50 2013 +0200
+
+ randr: send RRResourceChangeNotify event (abi unbreak)
+
+ Send RRResourceChangeNotify event when provider, output or crtc was created or
+ destroyed. I.e. when the list of resources returned by RRGetScreenResources and
+ RRGetProviders changes.
+
+ [airlied: move structure member to avoid ABI breakage]
+
+ Reviewed-by: Dave Airlie <airlied@redhat.com>
+ Signed-off-by: Michal Srb <msrb@suse.com>
+ Signed-off-by: Keith Packard <keithp@keithp.com>
+ (cherry picked from commit a9ca93dcf9a711b3d60fbad31cbd44e0c82b6f42)
+
+commit 9cc5d700b1e963284992ea3be7c93d425120c713
+Author: Michal Srb <msrb@suse.com>
+Date: Wed Oct 30 13:33:49 2013 +0200
+
+ randr: send RRProviderChangeNotify event (abi unbreak)
+
+ Send RRProviderChangeNotify event when a provider becomes output source or
+ offload sink.
+
+ [airlied: unbreak the ABI for 1.14 backport.]
+
+ Reviewed-by: Dave Airlie <airlied@redhat.com>
+ Signed-off-by: Michal Srb <msrb@suse.com>
+ Signed-off-by: Keith Packard <keithp@keithp.com>
+ (cherry picked from commit 4b39ea8a918fe6117bf34dc1cba67a4e56d0d1fb)
+
+commit 4cd0af4bb2662554e9bf3c044b8233019515e758
+Author: Dave Airlie <airlied@redhat.com>
+Date: Wed Jan 9 14:26:35 2013 +1000
+
+ randr: report changes when we disconnect a GPU slave
+
+ When we disconnect an output/offload slave set the changed bits,
+ so a later TellChanged can do something.
+
+ Then when we remove a GPU slave device, sent change notification
+ to the protocol screen.
+
+ This allows hot unplugged USB devices to disappear in clients.
+
+ Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+ Signed-off-by: Dave Airlie <airlied@redhat.com>
+ (cherry picked from commit 9d26e8eaf5a2d7c3e65670ac20254c60f665c463)
+
+commit 33b110d2dd74d4474c13f529b36fe30019fabcfc
+Author: Dave Airlie <airlied@redhat.com>
+Date: Wed Jan 9 14:25:43 2013 +1000
+
+ randr: only respected changed on the protocol screen
+
+ We don't want to know about changes on the non-protocol screen,
+ we will fix up setchanged to make sure non-protocol screens update
+ the protocol screens when they have a change.
+
+ Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+ Signed-off-by: Dave Airlie <airlied@redhat.com>
+ (cherry picked from commit e233bda3e7c68234b34a8b7ad04b27c6e2009a8f)
+
+commit 8d923f090fd793a52b2a9a84353a242b30b12b99
+Author: Dave Airlie <airlied@redhat.com>
+Date: Wed Jan 9 14:29:47 2013 +1000
+
+ randr: make SetChanged modify the main protocol screen not the gpu screen
+
+ When SetChanged is called we now modify the main protocol screen,
+ not the the gpu screen. Since changed stuff should work at the protocol level.
+
+ Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+ Signed-off-by: Dave Airlie <airlied@redhat.com>
+ (cherry picked from commit b3f70f38edebac87afe9351538365292f1aaaff3)
+
+commit cc9579aee3b44e43a69fbf8c24ef88dfabe7f16d
+Author: Dave Airlie <airlied@redhat.com>
+Date: Wed Jan 9 14:23:57 2013 +1000
+
+ randr: don't directly set changed bits in randr screen
+
+ Introduce a wrapper interface so we can fix things up for multi-gpu
+ situations later.
+
+ This just introduces the API for now.
+
+ Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+ Signed-off-by: Dave Airlie <airlied@redhat.com>
+ (cherry picked from commit f9c8248b8326ad01f33f31531c6b2479baf80f02)
+
+commit 98ef5bc9aa421961e6c1654963af86d5ff3092db
+Author: Adam Jackson <ajax@redhat.com>
+Date: Wed Aug 21 14:12:52 2013 -0400
+
+ randr: Fix a copypasta bug in CRTC confinement
+
+ Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
+ Signed-off-by: Adam Jackson <ajax@redhat.com>
+ (cherry picked from commit 1c8beedfe4343377fa3504f8ab71430cc137b22c)
+
+commit 2bea21ea7e6d474d2a075dd7d37464929ff5855b
+Author: Aaron Plattner <aplattner@nvidia.com>
+Date: Tue Apr 30 14:14:23 2013 -0700
+
+ xfree86: detach scanout pixmaps when detaching output GPUs
+
+ Commit 8f4640bdb9d3988148e09a08d2c7e3bab1d538d6 fixed a bit of a
+ chicken-and-egg problem by detaching GPU screens when their providers
+ are destroyed, which happens before CloseScreen is called. However,
+ this created a new problem: the GPU screen tears down its RandR crtc
+ objects during CloseScreen and if one of them is active, it tries to
+ detach the scanout pixmap then. This crashes because
+ RRCrtcDetachScanoutPixmap tries to get the master screen's screen
+ pixmap, but crtc->pScreen->current_master is already NULL at that
+ point.
+
+ It doesn't make sense for an unbound GPU screen to still be scanning
+ out its former master screen's pixmap, so detach them first when the
+ provider is destroyed.
+
+ Signed-off-by: Aaron Plattner <aplattner@nvidia.com>
+ Reviewed-by: Dave Airlie <airlied@redhat.com>
+ Signed-off-by: Keith Packard <keithp@keithp.com>
+ (cherry picked from commit bdd1e22cbde9ea2324e4e1991c9e152f22f88151)
+
+commit 9fbbea8cda199c5efdf3d3ae7485eb9ba62cde8b
+Author: Dave Airlie <airlied@redhat.com>
+Date: Tue Nov 5 13:19:41 2013 +1000
+
+ Revert "Merge commit 'f98d6cfa0de41cf33e7555342753897c07af84ef' into server-1.14-branch"
+
+ This reverts commit ad2fa50b5371f6e71a66d47e73304599c90f9118, reversing
+ changes made to bab4908579f6b034ea38f8df2f8dc1f9f026f5e1.
+
+ oops i broke ABI.
+
+ Signed-off-by: Dave Airlie <airlied@redhat.com>
+
+commit 94b7f26aeda31cf55ff9b7c04f390ba6d35977e4
+Author: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
+Date: Thu Oct 31 08:57:56 2013 -0700
+
+ miext/damage: Partial revert of "Only wrap into the GC ops chain if there's a listener (v3)"
+
+ Fixes regression from: 4dc2a76740d921c824a4d8193f39dd373475f02a
+
+ http://lists.x.org/archives/xorg-devel/2013-May/036241.html
+ https://trac.macports.org/ticket/38993
+
+ Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
+ Reviewed-by: Adam Jackson <ajax@redhat.com>
+ Signed-off-by: Keith Packard <keithp@keithp.com>
+ (cherry picked from commit abf5d5ac12437ebe156b4dd500c2acd69eea3654)
+
+commit 0a1628bca7b6c85054041312987b73e701aecb80
+Author: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
+Date: Tue Oct 29 11:06:55 2013 -0700
+
+ XQuartz: Bump bundle version to 2.7.5
+
+ Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
+
+commit ad2fa50b5371f6e71a66d47e73304599c90f9118
+Merge: bab4908 f98d6cf
+Author: Matt Dew <marcoz@osource.org>
+Date: Thu Oct 31 23:53:04 2013 -0600
+
+ Merge commit 'f98d6cfa0de41cf33e7555342753897c07af84ef' into server-1.14-branch
+
+commit bab4908579f6b034ea38f8df2f8dc1f9f026f5e1
+Author: Connor Behan <connor.behan@gmail.com>
+Date: Thu Oct 17 18:26:28 2013 -0700
+
+ xfree86: Find primary entity when bus types are nominally different
+
+ As of server 1.13, systems with DRM and Udev will have BUS_PLATFORM as
+ their primary bus type. However, drivers not implementing a
+ platformProbe function will still create entities of type BUS_PCI. We
+ need to account for this when checking for the primary entity.
+
+ Signed-off-by: Connor Behan <connor.behan@gmail.com>
+ Acked-by: Tormod Volden <debian.tormod@gmail.com>
+ Reviewed-by: Adam Jackson <ajax@redhat.com>
+ Signed-off-by: Keith Packard <keithp@keithp.com>
+
commit 4c40d9c4e4e4b39e81097cf6152d9940422fb5ab
Author: Matt Dew <marcoz@osource.org>
Date: Thu Oct 31 23:09:03 2013 -0600
bump version from 1.14.3.901, to 1.14.4
+commit f98d6cfa0de41cf33e7555342753897c07af84ef
+Author: Michal Srb <msrb@suse.com>
+Date: Wed Oct 30 13:33:51 2013 +0200
+
+ randr: deliver Output and Crtc events of attached output providers.
+
+ Consider all attached output providers when looking for changed outputs and
+ crtcs.
+
+ Reviewed-by: Dave Airlie <airlied@redhat.com>
+ Signed-off-by: Michal Srb <msrb@suse.com>
+ Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 14f89fb291f058a39e45cef012607a43edc5c9fe
+Author: Michal Srb <msrb@suse.com>
+Date: Wed Oct 30 13:33:50 2013 +0200
+
+ randr: send RRResourceChangeNotify event
+
+ Send RRResourceChangeNotify event when provider, output or crtc was created or
+ destroyed. I.e. when the list of resources returned by RRGetScreenResources and
+ RRGetProviders changes.
+
+ Reviewed-by: Dave Airlie <airlied@redhat.com>
+ Signed-off-by: Michal Srb <msrb@suse.com>
+ Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 4c79ea71a11c705a654a49f3edc2f01b4cdc61e2
+Author: Michal Srb <msrb@suse.com>
+Date: Wed Oct 30 13:33:49 2013 +0200
+
+ randr: send RRProviderChangeNotify event
+
+ Send RRProviderChangeNotify event when a provider becomes output source or
+ offload sink.
+
+ Reviewed-by: Dave Airlie <airlied@redhat.com>
+ Signed-off-by: Michal Srb <msrb@suse.com>
+ Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit d94e40f0498b998c89e396a024d9a7bdc326cc41
+Author: Dave Airlie <airlied@redhat.com>
+Date: Wed Jan 9 14:26:35 2013 +1000
+
+ randr: report changes when we disconnect a GPU slave
+
+ When we disconnect an output/offload slave set the changed bits,
+ so a later TellChanged can do something.
+
+ Then when we remove a GPU slave device, sent change notification
+ to the protocol screen.
+
+ This allows hot unplugged USB devices to disappear in clients.
+
+ Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+ Signed-off-by: Dave Airlie <airlied@redhat.com>
+
+commit e233bda3e7c68234b34a8b7ad04b27c6e2009a8f
+Author: Dave Airlie <airlied@redhat.com>
+Date: Wed Jan 9 14:25:43 2013 +1000
+
+ randr: only respected changed on the protocol screen
+
+ We don't want to know about changes on the non-protocol screen,
+ we will fix up setchanged to make sure non-protocol screens update
+ the protocol screens when they have a change.
+
+ Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+ Signed-off-by: Dave Airlie <airlied@redhat.com>
+
+commit 61df3350d000e32ea60f6b1cd222c5adc2e35617
+Author: Dave Airlie <airlied@redhat.com>
+Date: Wed Jan 9 14:29:47 2013 +1000
+
+ randr: make SetChanged modify the main protocol screen not the gpu screen
+
+ When SetChanged is called we now modify the main protocol screen,
+ not the the gpu screen. Since changed stuff should work at the protocol level.
+
+ Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+ Signed-off-by: Dave Airlie <airlied@redhat.com>
+
+commit 0454e4485186953195dc48d7b403eb610102d0a5
+Author: Dave Airlie <airlied@redhat.com>
+Date: Wed Jan 9 14:23:57 2013 +1000
+
+ randr: don't directly set changed bits in randr screen
+
+ Introduce a wrapper interface so we can fix things up for multi-gpu
+ situations later.
+
+ This just introduces the API for now.
+
+ Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+ Signed-off-by: Dave Airlie <airlied@redhat.com>
+
+commit c635df3a7dcc1eaa0dbd3c3e1b02adcfcfb74e0a
+Author: Adam Jackson <ajax@redhat.com>
+Date: Wed Aug 21 14:12:52 2013 -0400
+
+ randr: Fix a copypasta bug in CRTC confinement
+
+ Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
+ Signed-off-by: Adam Jackson <ajax@redhat.com>
+
+commit c856013cd2ca361dfa1b808071b7869c81224ec5
+Author: Aaron Plattner <aplattner@nvidia.com>
+Date: Tue Apr 30 14:14:23 2013 -0700
+
+ xfree86: detach scanout pixmaps when detaching output GPUs
+
+ Commit 8f4640bdb9d3988148e09a08d2c7e3bab1d538d6 fixed a bit of a
+ chicken-and-egg problem by detaching GPU screens when their providers
+ are destroyed, which happens before CloseScreen is called. However,
+ this created a new problem: the GPU screen tears down its RandR crtc
+ objects during CloseScreen and if one of them is active, it tries to
+ detach the scanout pixmap then. This crashes because
+ RRCrtcDetachScanoutPixmap tries to get the master screen's screen
+ pixmap, but crtc->pScreen->current_master is already NULL at that
+ point.
+
+ It doesn't make sense for an unbound GPU screen to still be scanning
+ out its former master screen's pixmap, so detach them first when the
+ provider is destroyed.
+
+ Signed-off-by: Aaron Plattner <aplattner@nvidia.com>
+ Reviewed-by: Dave Airlie <airlied@redhat.com>
+ Signed-off-by: Keith Packard <keithp@keithp.com>
+
commit ca11bdc890f14fbe2ab4c32fb7a36ae50672b81a
Author: Matt Dew <marcoz@osource.org>
Date: Sat Oct 26 13:51:05 2013 -0600
diff --git a/xserver/Xext/sync.c b/xserver/Xext/sync.c
index 1e3d43ee6..4ed60fdb6 100644
--- a/xserver/Xext/sync.c
+++ b/xserver/Xext/sync.c
@@ -2654,7 +2654,16 @@ IdleTimeBlockHandler(pointer pCounter, struct timeval **wt, pointer LastSelectMa
IdleTimeQueryValue(counter, &idle);
counter->value = idle; /* push, so CheckTrigger works */
- if (less && XSyncValueLessOrEqual(idle, *less)) {
+ /**
+ * There's an indefinite amount of time between ProcessInputEvents()
+ * where the idle time is reset and the time we actually get here. idle
+ * may be past the lower bracket if we dawdled with the events, so
+ * check for whether we did reset and bomb out of select immediately.
+ */
+ if (less && XSyncValueGreaterThan(idle, *less) &&
+ LastEventTimeWasReset(priv->deviceid)) {
+ AdjustWaitForDelay(wt, 0);
+ } else if (less && XSyncValueLessOrEqual(idle, *less)) {
/*
* We've been idle for less than the threshold value, and someone
* wants to know about that, but now we need to know whether they
diff --git a/xserver/configure b/xserver/configure
index 7dce172ec..7e9ad33e9 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.14.4.
+# Generated by GNU Autoconf 2.69 for xorg-server 1.14.5.
#
# Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg>.
#
@@ -651,8 +651,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='xorg-server'
PACKAGE_TARNAME='xorg-server'
-PACKAGE_VERSION='1.14.4'
-PACKAGE_STRING='xorg-server 1.14.4'
+PACKAGE_VERSION='1.14.5'
+PACKAGE_STRING='xorg-server 1.14.5'
PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=xorg'
PACKAGE_URL=''
@@ -1992,7 +1992,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.14.4 to adapt to many kinds of systems.
+\`configure' configures xorg-server 1.14.5 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -2062,7 +2062,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of xorg-server 1.14.4:";;
+ short | recursive ) echo "Configuration of xorg-server 1.14.5:";;
esac
cat <<\_ACEOF
@@ -2463,7 +2463,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-xorg-server configure 1.14.4
+xorg-server configure 1.14.5
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -3172,7 +3172,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.14.4, which was
+It was created by xorg-server $as_me 1.14.5, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3520,8 +3520,8 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-RELEASE_DATE="2013-10-31"
-RELEASE_NAME="October Flood"
+RELEASE_DATE="2013-12-12"
+RELEASE_NAME="November Rain"
am__api_version='1.12'
@@ -3999,7 +3999,7 @@ fi
# Define the identity of the package.
PACKAGE='xorg-server'
- VERSION='1.14.4'
+ VERSION='1.14.5'
cat >>confdefs.h <<_ACEOF
@@ -31181,7 +31181,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.14.4, which was
+This file was extended by xorg-server $as_me 1.14.5, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -31247,7 +31247,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.14.4
+xorg-server config.status 1.14.5
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 93de44e50..89183d338 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.14.4, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
-RELEASE_DATE="2013-10-31"
-RELEASE_NAME="October Flood"
+AC_INIT([xorg-server], 1.14.5, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
+RELEASE_DATE="2013-12-12"
+RELEASE_NAME="November Rain"
AC_CONFIG_SRCDIR([Makefile.am])
AM_INIT_AUTOMAKE([foreign dist-bzip2])
diff --git a/xserver/glx/glxdricommon.c b/xserver/glx/glxdricommon.c
index c90f38098..5686c5f64 100644
--- a/xserver/glx/glxdricommon.c
+++ b/xserver/glx/glxdricommon.c
@@ -209,6 +209,14 @@ glxConvertConfigs(const __DRIcoreExtension * core,
static const char dri_driver_path[] = DRI_DRIVER_PATH;
+/* Temporary define to allow building without a dri_interface.h from
+ * updated Mesa. Some day when we don't care about Mesa that old any
+ * more this can be removed.
+ */
+#ifndef __DRI_DRIVER_GET_EXTENSIONS
+#define __DRI_DRIVER_GET_EXTENSIONS "__driDriverGetExtensions"
+#endif
+
void *
glxProbeDriver(const char *driverName,
void **coreExt, const char *coreName, int coreVersion,
@@ -217,7 +225,8 @@ glxProbeDriver(const char *driverName,
int i;
void *driver;
char filename[PATH_MAX];
- const __DRIextension **extensions;
+ char *get_extensions_name;
+ const __DRIextension **extensions = NULL;
snprintf(filename, sizeof filename, "%s/%s_dri.so",
dri_driver_path, driverName);
@@ -229,7 +238,18 @@ glxProbeDriver(const char *driverName,
goto cleanup_failure;
}
- extensions = dlsym(driver, __DRI_DRIVER_EXTENSIONS);
+ if (asprintf(&get_extensions_name, "%s_%s",
+ __DRI_DRIVER_GET_EXTENSIONS, driverName) != -1) {
+ const __DRIextension **(*get_extensions)(void);
+
+ get_extensions = dlsym(driver, get_extensions_name);
+ if (get_extensions)
+ extensions = get_extensions();
+ free(get_extensions_name);
+ }
+
+ if (!extensions)
+ extensions = dlsym(driver, __DRI_DRIVER_EXTENSIONS);
if (extensions == NULL) {
LogMessage(X_ERROR, "AIGLX error: %s exports no extensions (%s)\n",
driverName, dlerror());
diff --git a/xserver/hw/xfree86/common/xf86Bus.c b/xserver/hw/xfree86/common/xf86Bus.c
index a8aa7540b..3f9ee71e6 100644
--- a/xserver/hw/xfree86/common/xf86Bus.c
+++ b/xserver/hw/xfree86/common/xf86Bus.c
@@ -266,6 +266,11 @@ xf86IsEntityPrimary(int entityIndex)
{
EntityPtr pEnt = xf86Entities[entityIndex];
+#ifdef XSERVER_LIBPCIACCESS
+ if (primaryBus.type == BUS_PLATFORM && pEnt->bus.type == BUS_PCI)
+ return MATCH_PCI_DEVICES(pEnt->bus.id.pci, primaryBus.id.plat->pdev);
+#endif
+
if (primaryBus.type != pEnt->bus.type)
return FALSE;
diff --git a/xserver/hw/xfree86/common/xf86platformBus.c b/xserver/hw/xfree86/common/xf86platformBus.c
index db831a883..33b2b7dd8 100644
--- a/xserver/hw/xfree86/common/xf86platformBus.c
+++ b/xserver/hw/xfree86/common/xf86platformBus.c
@@ -47,6 +47,7 @@
#include "Pci.h"
#include "xf86platformBus.h"
+#include "randrstr.h"
int platformSlotClaimed;
int xf86_num_platform_devices;
@@ -465,6 +466,9 @@ xf86platformAddDevice(int index)
/* attach unbound to 0 protocol screen */
AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen);
+ RRResourcesChanged(xf86Screens[0]->pScreen);
+ RRTellChanged(xf86Screens[0]->pScreen);
+
return 0;
}
@@ -508,6 +512,8 @@ xf86platformRemoveDevice(int index)
xf86_remove_platform_device(index);
+ RRResourcesChanged(xf86Screens[0]->pScreen);
+ RRTellChanged(xf86Screens[0]->pScreen);
out:
return;
}
diff --git a/xserver/hw/xfree86/modes/xf86RandR12.c b/xserver/hw/xfree86/modes/xf86RandR12.c
index edc31a922..bd1f28141 100644
--- a/xserver/hw/xfree86/modes/xf86RandR12.c
+++ b/xserver/hw/xfree86/modes/xf86RandR12.c
@@ -1771,6 +1771,19 @@ xf86RandR12EnterVT(ScrnInfoPtr pScrn)
return RRGetInfo(pScreen, TRUE); /* force a re-probe of outputs and notify clients about changes */
}
+static void
+xf86DetachOutputGPU(ScreenPtr pScreen)
+{
+ rrScrPrivPtr rp = rrGetScrPriv(pScreen);
+ int i;
+
+ /* make sure there are no attached shared scanout pixmaps first */
+ for (i = 0; i < rp->numCrtcs; i++)
+ RRCrtcDetachScanoutPixmap(rp->crtcs[i]);
+
+ DetachOutputGPU(pScreen);
+}
+
static Bool
xf86RandR14ProviderSetOutputSource(ScreenPtr pScreen,
RRProviderPtr provider,
@@ -1780,7 +1793,7 @@ xf86RandR14ProviderSetOutputSource(ScreenPtr pScreen,
if (provider->output_source) {
ScreenPtr cmScreen = pScreen->current_master;
- DetachOutputGPU(pScreen);
+ xf86DetachOutputGPU(pScreen);
AttachUnboundGPU(cmScreen, pScreen);
}
provider->output_source = NULL;
@@ -1808,7 +1821,7 @@ xf86RandR14ProviderSetOffloadSink(ScreenPtr pScreen,
if (!sink_provider) {
if (provider->offload_sink) {
ScreenPtr cmScreen = pScreen->current_master;
- DetachOutputGPU(pScreen);
+ xf86DetachOutputGPU(pScreen);
AttachUnboundGPU(cmScreen, pScreen);
}
@@ -1896,10 +1909,12 @@ xf86RandR14ProviderDestroy(ScreenPtr screen, RRProviderPtr provider)
if (config->randr_provider->offload_sink) {
DetachOffloadGPU(screen);
config->randr_provider->offload_sink = NULL;
+ RRSetChanged(screen);
}
else if (config->randr_provider->output_source) {
- DetachOutputGPU(screen);
+ xf86DetachOutputGPU(screen);
config->randr_provider->output_source = NULL;
+ RRSetChanged(screen);
}
else if (screen->current_master)
DetachUnboundGPU(screen);
diff --git a/xserver/hw/xquartz/X11Controller.m b/xserver/hw/xquartz/X11Controller.m
index 737db42e7..3d094bfc7 100644
--- a/xserver/hw/xquartz/X11Controller.m
+++ b/xserver/hw/xquartz/X11Controller.m
@@ -936,7 +936,7 @@ extern char *bundle_id_prefix;
- (void) applicationWillTerminate:(NSNotification *)aNotification
{
- unsigned remain;
+ int remain;
[X11App prefs_synchronize];
/* shutdown the X server, it will exit () for us. */
diff --git a/xserver/hw/xquartz/bundle/Info.plist.cpp b/xserver/hw/xquartz/bundle/Info.plist.cpp
index b0106c6da..4b4a894a4 100644
--- a/xserver/hw/xquartz/bundle/Info.plist.cpp
+++ b/xserver/hw/xquartz/bundle/Info.plist.cpp
@@ -19,9 +19,9 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
- <string>2.7.4</string>
+ <string>2.7.5</string>
<key>CFBundleVersion</key>
- <string>2.7.4</string>
+ <string>2.7.5</string>
<key>CFBundleSignature</key>
<string>x11a</string>
<key>CSResourcesFileMapped</key>
@@ -39,9 +39,9 @@
<key>LSApplicationCategoryType</key>
<string>public.app-category.utilities</string>
<key>NSHumanReadableCopyright</key>
- <string>© 2003-2012 Apple Inc.
+ <string>© 2003-2013 Apple Inc.
© 2003 XFree86 Project, Inc.
-© 2003-2012 X.org Foundation, Inc.
+© 2003-2013 X.org Foundation, Inc.
</string>
<key>NSMainNibFile</key>
<string>main</string>
diff --git a/xserver/miext/damage/damage.c b/xserver/miext/damage/damage.c
index a98c20ec0..3dc3180f3 100644
--- a/xserver/miext/damage/damage.c
+++ b/xserver/miext/damage/damage.c
@@ -439,10 +439,7 @@ damageValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDrawable)
drawableDamage(pDrawable);
DAMAGE_GC_FUNC_PROLOGUE(pGC);
(*pGC->funcs->ValidateGC) (pGC, changes, pDrawable);
- if (pDamage)
- pGCPriv->ops = pGC->ops; /* so it's not NULL, so FUNC_EPILOGUE does work */
- else
- pGCPriv->ops = NULL;
+ pGCPriv->ops = pGC->ops; /* just so it's not NULL */
DAMAGE_GC_FUNC_EPILOGUE(pGC);
}
diff --git a/xserver/randr/randr.c b/xserver/randr/randr.c
index f0decfc6c..3c5142771 100644
--- a/xserver/randr/randr.c
+++ b/xserver/randr/randr.c
@@ -420,12 +420,40 @@ RRExtensionInit(void)
#endif
}
+void
+RRResourcesChanged(ScreenPtr pScreen)
+{
+ rrScrPriv(pScreen);
+ pScrPriv->resourcesChanged = TRUE;
+
+ RRSetChanged(pScreen);
+}
+
+static void
+RRDeliverResourceEvent(ClientPtr client, WindowPtr pWin)
+{
+ ScreenPtr pScreen = pWin->drawable.pScreen;
+
+ rrScrPriv(pScreen);
+
+ xRRResourceChangeNotifyEvent re = {
+ .type = RRNotify + RREventBase,
+ .subCode = RRNotify_ResourceChange,
+ .timestamp = pScrPriv->lastSetTime.milliseconds,
+ .window = pWin->drawable.id
+ };
+
+ WriteEventsToClient(client, 1, (xEvent *) &re);
+}
+
static int
TellChanged(WindowPtr pWin, pointer value)
{
RREventPtr *pHead, pRREvent;
ClientPtr client;
ScreenPtr pScreen = pWin->drawable.pScreen;
+ ScreenPtr iter;
+ rrScrPrivPtr pSlaveScrPriv;
rrScrPriv(pScreen);
int i;
@@ -450,6 +478,16 @@ TellChanged(WindowPtr pWin, pointer value)
if (crtc->changed)
RRDeliverCrtcEvent(client, pWin, crtc);
}
+
+ xorg_list_for_each_entry(iter, &pScreen->output_slave_list, output_head) {
+ pSlaveScrPriv = rrGetScrPriv(iter);
+ for (i = 0; i < pSlaveScrPriv->numCrtcs; i++) {
+ RRCrtcPtr crtc = pSlaveScrPriv->crtcs[i];
+
+ if (crtc->changed)
+ RRDeliverCrtcEvent(client, pWin, crtc);
+ }
+ }
}
if (pRREvent->mask & RROutputChangeNotifyMask) {
@@ -459,11 +497,67 @@ TellChanged(WindowPtr pWin, pointer value)
if (output->changed)
RRDeliverOutputEvent(client, pWin, output);
}
+
+ xorg_list_for_each_entry(iter, &pScreen->output_slave_list, output_head) {
+ pSlaveScrPriv = rrGetScrPriv(iter);
+ for (i = 0; i < pSlaveScrPriv->numOutputs; i++) {
+ RROutputPtr output = pSlaveScrPriv->outputs[i];
+
+ if (output->changed)
+ RRDeliverOutputEvent(client, pWin, output);
+ }
+ }
+ }
+
+ if (pRREvent->mask & RRProviderChangeNotifyMask) {
+ xorg_list_for_each_entry(iter, &pScreen->output_slave_list, output_head) {
+ pSlaveScrPriv = rrGetScrPriv(iter);
+ if (pSlaveScrPriv->provider->changed)
+ RRDeliverProviderEvent(client, pWin, pSlaveScrPriv->provider);
+ }
+ xorg_list_for_each_entry(iter, &pScreen->offload_slave_list, offload_head) {
+ pSlaveScrPriv = rrGetScrPriv(iter);
+ if (pSlaveScrPriv->provider->changed)
+ RRDeliverProviderEvent(client, pWin, pSlaveScrPriv->provider);
+ }
+ xorg_list_for_each_entry(iter, &pScreen->unattached_list, unattached_head) {
+ pSlaveScrPriv = rrGetScrPriv(iter);
+ if (pSlaveScrPriv->provider->changed)
+ RRDeliverProviderEvent(client, pWin, pSlaveScrPriv->provider);
+ }
+ }
+
+ if (pRREvent->mask & RRResourceChangeNotifyMask) {
+ if (pScrPriv->resourcesChanged) {
+ RRDeliverResourceEvent(client, pWin);
+ }
}
}
return WT_WALKCHILDREN;
}
+void
+RRSetChanged(ScreenPtr pScreen)
+{
+ /* set changed bits on the master screen only */
+ ScreenPtr master;
+ rrScrPriv(pScreen);
+ rrScrPrivPtr mastersp;
+
+ if (pScreen->isGPU) {
+ master = pScreen->current_master;
+ if (!master)
+ return;
+ mastersp = rrGetScrPriv(master);
+ }
+ else {
+ master = pScreen;
+ mastersp = pScrPriv;
+ }
+
+ mastersp->changed = TRUE;
+}
+
/*
* Something changed; send events and adjust pointer position
*/
@@ -474,6 +568,8 @@ RRTellChanged(ScreenPtr pScreen)
rrScrPriv(pScreen);
rrScrPrivPtr mastersp;
int i;
+ ScreenPtr iter;
+ rrScrPrivPtr pSlaveScrPriv;
if (pScreen->isGPU) {
master = pScreen->current_master;
@@ -484,7 +580,7 @@ RRTellChanged(ScreenPtr pScreen)
mastersp = pScrPriv;
}
- if (pScrPriv->changed) {
+ if (mastersp->changed) {
UpdateCurrentTimeIf();
if (mastersp->configChanged) {
mastersp->lastConfigTime = currentTime;
@@ -492,11 +588,33 @@ RRTellChanged(ScreenPtr pScreen)
}
pScrPriv->changed = FALSE;
mastersp->changed = FALSE;
+
WalkTree(master, TellChanged, (pointer) master);
+
+ mastersp->resourcesChanged = FALSE;
+
for (i = 0; i < pScrPriv->numOutputs; i++)
pScrPriv->outputs[i]->changed = FALSE;
for (i = 0; i < pScrPriv->numCrtcs; i++)
pScrPriv->crtcs[i]->changed = FALSE;
+
+ xorg_list_for_each_entry(iter, &master->output_slave_list, output_head) {
+ pSlaveScrPriv = rrGetScrPriv(iter);
+ pSlaveScrPriv->provider->changed = FALSE;
+ for (i = 0; i < pSlaveScrPriv->numOutputs; i++)
+ pSlaveScrPriv->outputs[i]->changed = FALSE;
+ for (i = 0; i < pSlaveScrPriv->numCrtcs; i++)
+ pSlaveScrPriv->crtcs[i]->changed = FALSE;
+ }
+ xorg_list_for_each_entry(iter, &master->offload_slave_list, offload_head) {
+ pSlaveScrPriv = rrGetScrPriv(iter);
+ pSlaveScrPriv->provider->changed = FALSE;
+ }
+ xorg_list_for_each_entry(iter, &master->unattached_list, unattached_head) {
+ pSlaveScrPriv = rrGetScrPriv(iter);
+ pSlaveScrPriv->provider->changed = FALSE;
+ }
+
if (mastersp->layoutChanged) {
pScrPriv->layoutChanged = FALSE;
RRPointerScreenConfigured(master);
diff --git a/xserver/randr/randrstr.h b/xserver/randr/randrstr.h
index 25174798f..27b4ba05c 100644
--- a/xserver/randr/randrstr.h
+++ b/xserver/randr/randrstr.h
@@ -166,6 +166,7 @@ struct _rrProvider {
Bool pendingProperties;
struct _rrProvider *offload_sink;
struct _rrProvider *output_source;
+ Bool changed;
};
#if RANDR_12_INTERFACE
@@ -336,6 +337,7 @@ typedef struct _rrScrPriv {
RRProviderDestroyProcPtr rrProviderDestroy;
+ Bool resourcesChanged; /* screen resources change */
} rrScrPrivRec, *rrScrPrivPtr;
extern _X_EXPORT DevPrivateKeyRec rrPrivKeyRec;
@@ -485,7 +487,14 @@ extern _X_EXPORT int
extern _X_EXPORT void
RRDeliverScreenEvent(ClientPtr client, WindowPtr pWin, ScreenPtr pScreen);
+extern _X_EXPORT void
+ RRResourcesChanged(ScreenPtr pScreen);
+
/* randr.c */
+/* set a screen change on the primary screen */
+extern _X_EXPORT void
+RRSetChanged(ScreenPtr pScreen);
+
/*
* Send all pending events
*/
@@ -919,6 +928,9 @@ RRProviderSetCapabilities(RRProviderPtr provider, uint32_t capabilities);
extern _X_EXPORT Bool
RRProviderLookup(XID id, RRProviderPtr *provider_p);
+extern _X_EXPORT void
+RRDeliverProviderEvent(ClientPtr client, WindowPtr pWin, RRProviderPtr provider);
+
/* rrproviderproperty.c */
extern _X_EXPORT void
diff --git a/xserver/randr/rrcrtc.c b/xserver/randr/rrcrtc.c
index 6e2eca5ad..5cdfd0510 100644
--- a/xserver/randr/rrcrtc.c
+++ b/xserver/randr/rrcrtc.c
@@ -39,7 +39,7 @@ RRCrtcChanged(RRCrtcPtr crtc, Bool layoutChanged)
if (pScreen) {
rrScrPriv(pScreen);
- pScrPriv->changed = TRUE;
+ RRSetChanged(pScreen);
/*
* Send ConfigureNotify on any layout change
*/
@@ -102,6 +102,8 @@ RRCrtcCreate(ScreenPtr pScreen, void *devPrivate)
crtc->pScreen = pScreen;
pScrPriv->crtcs[pScrPriv->numCrtcs++] = crtc;
+ RRResourcesChanged(pScreen);
+
return crtc;
}
@@ -672,6 +674,8 @@ RRCrtcDestroyResource(pointer value, XID pid)
break;
}
}
+
+ RRResourcesChanged(pScreen);
}
if (crtc->scanout_pixmap)
diff --git a/xserver/randr/rrinfo.c b/xserver/randr/rrinfo.c
index 1408d6f64..fc57bd408 100644
--- a/xserver/randr/rrinfo.c
+++ b/xserver/randr/rrinfo.c
@@ -225,7 +225,7 @@ RRScreenSetSizeRange(ScreenPtr pScreen,
pScrPriv->minHeight = minHeight;
pScrPriv->maxWidth = maxWidth;
pScrPriv->maxHeight = maxHeight;
- pScrPriv->changed = TRUE;
+ RRSetChanged(pScreen);
pScrPriv->configChanged = TRUE;
}
diff --git a/xserver/randr/rroutput.c b/xserver/randr/rroutput.c
index 88781ba0f..2b0b82f4c 100644
--- a/xserver/randr/rroutput.c
+++ b/xserver/randr/rroutput.c
@@ -36,7 +36,7 @@ RROutputChanged(RROutputPtr output, Bool configChanged)
output->changed = TRUE;
if (pScreen) {
rrScrPriv(pScreen);
- pScrPriv->changed = TRUE;
+ RRSetChanged(pScreen);
if (configChanged)
pScrPriv->configChanged = TRUE;
}
@@ -101,6 +101,9 @@ RROutputCreate(ScreenPtr pScreen,
return NULL;
pScrPriv->outputs[pScrPriv->numOutputs++] = output;
+
+ RRResourcesChanged(pScreen);
+
return output;
}
@@ -355,6 +358,8 @@ RROutputDestroyResource(pointer value, XID pid)
break;
}
}
+
+ RRResourcesChanged(pScreen);
}
if (output->modes) {
for (m = 0; m < output->numModes; m++)
diff --git a/xserver/randr/rrpointer.c b/xserver/randr/rrpointer.c
index ec803e9d1..eb6b6770c 100644
--- a/xserver/randr/rrpointer.c
+++ b/xserver/randr/rrpointer.c
@@ -82,7 +82,7 @@ RRPointerToNearestCrtc(DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y,
else
dx = 0;
if (y < crtc->y)
- dy = crtc->y - x;
+ dy = crtc->y - y;
else if (y > crtc->y + scan_height)
dy = y - (crtc->y + scan_height);
else
diff --git a/xserver/randr/rrprovider.c b/xserver/randr/rrprovider.c
index b321e6227..2334ad277 100644
--- a/xserver/randr/rrprovider.c
+++ b/xserver/randr/rrprovider.c
@@ -304,6 +304,9 @@ ProcRRSetProviderOutputSource(ClientPtr client)
pScrPriv->rrProviderSetOutputSource(pScreen, provider, source_provider);
+ provider->changed = TRUE;
+ RRSetChanged(pScreen);
+
RRTellChanged (pScreen);
return Success;
@@ -333,6 +336,9 @@ ProcRRSetProviderOffloadSink(ClientPtr client)
pScrPriv->rrProviderSetOffloadSink(pScreen, provider, sink_provider);
+ provider->changed = TRUE;
+ RRSetChanged(pScreen);
+
RRTellChanged (pScreen);
return Success;
@@ -357,6 +363,7 @@ RRProviderCreate(ScreenPtr pScreen, const char *name,
provider->nameLength = nameLength;
memcpy(provider->name, name, nameLength);
provider->name[nameLength] = '\0';
+ provider->changed = FALSE;
if (!AddResource (provider->id, RRProviderType, (pointer) provider))
return NULL;
@@ -416,3 +423,21 @@ RRProviderLookup(XID id, RRProviderPtr *provider_p)
return TRUE;
return FALSE;
}
+
+void
+RRDeliverProviderEvent(ClientPtr client, WindowPtr pWin, RRProviderPtr provider)
+{
+ ScreenPtr pScreen = pWin->drawable.pScreen;
+
+ rrScrPriv(pScreen);
+
+ xRRProviderChangeNotifyEvent pe = {
+ .type = RRNotify + RREventBase,
+ .subCode = RRNotify_ProviderChange,
+ .timestamp = pScrPriv->lastSetTime.milliseconds,
+ .window = pWin->drawable.id,
+ .provider = provider->id
+ };
+
+ WriteEventsToClient(client, 1, (xEvent *) &pe);
+}
diff --git a/xserver/randr/rrscreen.c b/xserver/randr/rrscreen.c
index 39340ccee..36179ae89 100644
--- a/xserver/randr/rrscreen.c
+++ b/xserver/randr/rrscreen.c
@@ -143,7 +143,7 @@ RRScreenSizeNotify(ScreenPtr pScreen)
pScrPriv->height = pScreen->height;
pScrPriv->mmWidth = pScreen->mmWidth;
pScrPriv->mmHeight = pScreen->mmHeight;
- pScrPriv->changed = TRUE;
+ RRSetChanged(pScreen);
/* pScrPriv->sizeChanged = TRUE; */
RRTellChanged(pScreen);