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; }