diff options
author | Jan Burgmeier <jan.burgmeier@unicon-software.com> | 2016-02-04 14:06:43 +0100 |
---|---|---|
committer | Adam Jackson <ajax@redhat.com> | 2016-02-08 17:22:34 -0500 |
commit | 7bb64d8c1de9659f11da7917772919b071e9db82 (patch) | |
tree | 9e4581e7ee1cad9caf93560f94f1c51c772cbd04 /randr | |
parent | 87d5534f701242d7c23aa20545a6292a0779c89c (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.c | 6 | ||||
-rw-r--r-- | randr/rroutput.c | 12 |
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; } |