summaryrefslogtreecommitdiff
path: root/randr
diff options
context:
space:
mode:
authorJan Burgmeier <jan.burgmeier@unicon-software.com>2016-02-04 14:06:43 +0100
committerAdam Jackson <ajax@redhat.com>2016-02-08 17:22:34 -0500
commit7bb64d8c1de9659f11da7917772919b071e9db82 (patch)
tree9e4581e7ee1cad9caf93560f94f1c51c772cbd04 /randr
parent87d5534f701242d7c23aa20545a6292a0779c89c (diff)
Fix XineramaQueryScreens for reverse prime
Make sure we account for slave CRTCs when building the monitor list, since that's what rrxinerama uses to fake Xinerama geometry. [ajax: Slightly more informative commit message.] Bugzilla: https://bugs.freedesktop.org/92313 Reviewed-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'randr')
-rw-r--r--randr/rrmonitor.c6
-rw-r--r--randr/rroutput.c12
2 files changed, 15 insertions, 3 deletions
diff --git a/randr/rrmonitor.c b/randr/rrmonitor.c
index c37dcf8ab..58041bb61 100644
--- a/randr/rrmonitor.c
+++ b/randr/rrmonitor.c
@@ -326,7 +326,7 @@ RRMonitorMakeList(ScreenPtr screen, Bool get_active, RRMonitorPtr *monitors_ret,
RRMonitorSetFromClient(pScrPriv->monitors[list.client_primary], mon);
mon++;
} else if (list.server_primary >= 0) {
- RRMonitorSetFromServer(pScrPriv->crtcs[list.server_primary], mon);
+ RRMonitorSetFromServer(list.server_crtc[list.server_primary], mon);
mon++;
}
@@ -354,8 +354,8 @@ RRMonitorMakeList(ScreenPtr screen, Bool get_active, RRMonitorPtr *monitors_ret,
/* And finish with the list of crtc-inspired monitors
*/
- for (c = 0; c < pScrPriv->numCrtcs; c++) {
- RRCrtcPtr crtc = pScrPriv->crtcs[c];
+ for (c = 0; c < list.num_crtcs; c++) {
+ RRCrtcPtr crtc = list.server_crtc[c];
if (c == list.server_primary && list.client_primary < 0)
continue;
diff --git a/randr/rroutput.c b/randr/rroutput.c
index d12b9ba12..686ae49a6 100644
--- a/randr/rroutput.c
+++ b/randr/rroutput.c
@@ -543,6 +543,7 @@ ProcRRSetOutputPrimary(ClientPtr client)
WindowPtr pWin;
rrScrPrivPtr pScrPriv;
int ret;
+ ScreenPtr slave;
REQUEST_SIZE_MATCH(xRRSetOutputPrimaryReq);
@@ -565,8 +566,19 @@ ProcRRSetOutputPrimary(ClientPtr client)
pScrPriv = rrGetScrPriv(pWin->drawable.pScreen);
if (pScrPriv)
+ {
RRSetPrimaryOutput(pWin->drawable.pScreen, pScrPriv, output);
+ xorg_list_for_each_entry(slave,
+ &pWin->drawable.pScreen->output_slave_list,
+ output_head) {
+ rrScrPrivPtr pSlavePriv;
+ pSlavePriv = rrGetScrPriv(slave);
+
+ RRSetPrimaryOutput(slave, pSlavePriv, output);
+ }
+ }
+
return Success;
}