summarylogtreecommitdiffstats
path: root/Fix-XineramaQueryScreens-for-reverse-prime.patch
diff options
context:
space:
mode:
Diffstat (limited to 'Fix-XineramaQueryScreens-for-reverse-prime.patch')
-rw-r--r--Fix-XineramaQueryScreens-for-reverse-prime.patch55
1 files changed, 55 insertions, 0 deletions
diff --git a/Fix-XineramaQueryScreens-for-reverse-prime.patch b/Fix-XineramaQueryScreens-for-reverse-prime.patch
new file mode 100644
index 000000000000..fe2c9479abf8
--- /dev/null
+++ b/Fix-XineramaQueryScreens-for-reverse-prime.patch
@@ -0,0 +1,55 @@
+diff --git a/randr/rrmonitor.c b/randr/rrmonitor.c
+index c37dcf8..58041bb 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 d12b9ba..2ba62fa 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,7 +566,18 @@ 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;
+ }