|
Dave Airlie |
02cbf43 |
From ce3de2dcb1b3bd99a693c828278a416c245acc37 Mon Sep 17 00:00:00 2001
|
|
Peter Hutterer |
cd9fdcb |
From: Dave Airlie <airlied@redhat.com>
|
|
Dave Airlie |
02cbf43 |
Date: Wed, 9 Jan 2013 14:23:57 +1000
|
|
Dave Airlie |
02cbf43 |
Subject: [PATCH] randr upstream set changed fixes
|
|
Peter Hutterer |
cd9fdcb |
|
|
Peter Hutterer |
cd9fdcb |
Signed-off-by: Dave Airlie <airlied@redhat.com>
|
|
Peter Hutterer |
cd9fdcb |
---
|
|
Dave Airlie |
02cbf43 |
hw/xfree86/common/xf86platformBus.c | 3 ++-
|
|
Dave Airlie |
02cbf43 |
hw/xfree86/modes/xf86RandR12.c | 2 ++
|
|
Dave Airlie |
02cbf43 |
randr/randr.c | 24 +++++++++++++++++++++++-
|
|
Dave Airlie |
02cbf43 |
randr/randrstr.h | 4 ++++
|
|
Dave Airlie |
02cbf43 |
randr/rrcrtc.c | 2 +-
|
|
Dave Airlie |
02cbf43 |
randr/rrinfo.c | 2 +-
|
|
Dave Airlie |
02cbf43 |
randr/rroutput.c | 2 +-
|
|
Dave Airlie |
02cbf43 |
randr/rrscreen.c | 2 +-
|
|
Dave Airlie |
02cbf43 |
8 files changed, 35 insertions(+), 6 deletions(-)
|
|
Peter Hutterer |
cd9fdcb |
|
|
Dave Airlie |
02cbf43 |
diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c
|
|
Dave Airlie |
02cbf43 |
index 9034dad..bcb65ff 100644
|
|
Dave Airlie |
02cbf43 |
--- a/hw/xfree86/common/xf86platformBus.c
|
|
Dave Airlie |
02cbf43 |
+++ b/hw/xfree86/common/xf86platformBus.c
|
|
Dave Airlie |
02cbf43 |
@@ -47,6 +47,7 @@
|
|
Dave Airlie |
02cbf43 |
#include "Pci.h"
|
|
Dave Airlie |
02cbf43 |
#include "xf86platformBus.h"
|
|
Dave Airlie |
02cbf43 |
|
|
Dave Airlie |
02cbf43 |
+#include "randrstr.h"
|
|
Dave Airlie |
02cbf43 |
int platformSlotClaimed;
|
|
Dave Airlie |
02cbf43 |
|
|
Dave Airlie |
02cbf43 |
int xf86_num_platform_devices;
|
|
Dave Airlie |
02cbf43 |
@@ -499,7 +500,7 @@ xf86platformRemoveDevice(int index)
|
|
Dave Airlie |
02cbf43 |
xf86UnclaimPlatformSlot(&xf86_platform_devices[index], NULL);
|
|
Dave Airlie |
02cbf43 |
|
|
Dave Airlie |
02cbf43 |
xf86_remove_platform_device(index);
|
|
Dave Airlie |
02cbf43 |
-
|
|
Dave Airlie |
02cbf43 |
+ RRTellChanged(xf86Screens[0]->pScreen);
|
|
Dave Airlie |
02cbf43 |
out:
|
|
Dave Airlie |
02cbf43 |
return;
|
|
Dave Airlie |
02cbf43 |
}
|
|
Dave Airlie |
02cbf43 |
diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c
|
|
Dave Airlie |
02cbf43 |
index 01fc9c5..7f570cf 100644
|
|
Dave Airlie |
02cbf43 |
--- a/hw/xfree86/modes/xf86RandR12.c
|
|
Dave Airlie |
02cbf43 |
+++ b/hw/xfree86/modes/xf86RandR12.c
|
|
Dave Airlie |
02cbf43 |
@@ -1895,10 +1895,12 @@ xf86RandR14ProviderDestroy(ScreenPtr screen, RRProviderPtr provider)
|
|
Dave Airlie |
02cbf43 |
if (config->randr_provider->offload_sink) {
|
|
Dave Airlie |
02cbf43 |
DetachOffloadGPU(screen);
|
|
Dave Airlie |
02cbf43 |
config->randr_provider->offload_sink = NULL;
|
|
Dave Airlie |
02cbf43 |
+ RRSetChanged(screen);
|
|
Dave Airlie |
02cbf43 |
}
|
|
Dave Airlie |
02cbf43 |
else if (config->randr_provider->output_source) {
|
|
Dave Airlie |
02cbf43 |
DetachOutputGPU(screen);
|
|
Dave Airlie |
02cbf43 |
config->randr_provider->output_source = NULL;
|
|
Dave Airlie |
02cbf43 |
+ RRSetChanged(screen);
|
|
Dave Airlie |
02cbf43 |
}
|
|
Dave Airlie |
02cbf43 |
else if (screen->current_master)
|
|
Dave Airlie |
02cbf43 |
DetachUnboundGPU(screen);
|
|
Peter Hutterer |
cd9fdcb |
diff --git a/randr/randr.c b/randr/randr.c
|
|
Dave Airlie |
02cbf43 |
index f0decfc..cb6fce7 100644
|
|
Peter Hutterer |
cd9fdcb |
--- a/randr/randr.c
|
|
Peter Hutterer |
cd9fdcb |
+++ b/randr/randr.c
|
|
Dave Airlie |
02cbf43 |
@@ -464,6 +464,28 @@ TellChanged(WindowPtr pWin, pointer value)
|
|
Peter Hutterer |
cd9fdcb |
return WT_WALKCHILDREN;
|
|
Peter Hutterer |
cd9fdcb |
}
|
|
Peter Hutterer |
cd9fdcb |
|
|
Peter Hutterer |
cd9fdcb |
+void
|
|
Peter Hutterer |
cd9fdcb |
+RRSetChanged(ScreenPtr pScreen)
|
|
Peter Hutterer |
cd9fdcb |
+{
|
|
Dave Airlie |
02cbf43 |
+ /* set changed bits on the master screen only */
|
|
Dave Airlie |
02cbf43 |
+ ScreenPtr master;
|
|
Peter Hutterer |
cd9fdcb |
+ rrScrPriv(pScreen);
|
|
Dave Airlie |
02cbf43 |
+ rrScrPrivPtr mastersp;
|
|
Dave Airlie |
02cbf43 |
+
|
|
Dave Airlie |
02cbf43 |
+ if (pScreen->isGPU) {
|
|
Dave Airlie |
02cbf43 |
+ master = pScreen->current_master;
|
|
Dave Airlie |
02cbf43 |
+ if (!master)
|
|
Dave Airlie |
02cbf43 |
+ return;
|
|
Dave Airlie |
02cbf43 |
+ mastersp = rrGetScrPriv(master);
|
|
Dave Airlie |
02cbf43 |
+ }
|
|
Dave Airlie |
02cbf43 |
+ else {
|
|
Dave Airlie |
02cbf43 |
+ master = pScreen;
|
|
Dave Airlie |
02cbf43 |
+ mastersp = pScrPriv;
|
|
Dave Airlie |
02cbf43 |
+ }
|
|
Peter Hutterer |
cd9fdcb |
+
|
|
Dave Airlie |
02cbf43 |
+ mastersp->changed = TRUE;
|
|
Peter Hutterer |
cd9fdcb |
+}
|
|
Peter Hutterer |
cd9fdcb |
+
|
|
Peter Hutterer |
cd9fdcb |
/*
|
|
Peter Hutterer |
cd9fdcb |
* Something changed; send events and adjust pointer position
|
|
Peter Hutterer |
cd9fdcb |
*/
|
|
Dave Airlie |
02cbf43 |
@@ -484,7 +506,7 @@ RRTellChanged(ScreenPtr pScreen)
|
|
Dave Airlie |
02cbf43 |
mastersp = pScrPriv;
|
|
Dave Airlie |
02cbf43 |
}
|
|
Dave Airlie |
02cbf43 |
|
|
Dave Airlie |
02cbf43 |
- if (pScrPriv->changed) {
|
|
Dave Airlie |
02cbf43 |
+ if (mastersp->changed) {
|
|
Dave Airlie |
02cbf43 |
UpdateCurrentTimeIf();
|
|
Dave Airlie |
02cbf43 |
if (mastersp->configChanged) {
|
|
Dave Airlie |
02cbf43 |
mastersp->lastConfigTime = currentTime;
|
|
Peter Hutterer |
cd9fdcb |
diff --git a/randr/randrstr.h b/randr/randrstr.h
|
|
Peter Hutterer |
cd9fdcb |
index 2517479..2babfed 100644
|
|
Peter Hutterer |
cd9fdcb |
--- a/randr/randrstr.h
|
|
Peter Hutterer |
cd9fdcb |
+++ b/randr/randrstr.h
|
|
Peter Hutterer |
cd9fdcb |
@@ -486,6 +486,10 @@ extern _X_EXPORT void
|
|
Peter Hutterer |
cd9fdcb |
RRDeliverScreenEvent(ClientPtr client, WindowPtr pWin, ScreenPtr pScreen);
|
|
Peter Hutterer |
cd9fdcb |
|
|
Peter Hutterer |
cd9fdcb |
/* randr.c */
|
|
Peter Hutterer |
cd9fdcb |
+/* set a screen change on the primary screen */
|
|
Peter Hutterer |
cd9fdcb |
+extern _X_EXPORT void
|
|
Peter Hutterer |
cd9fdcb |
+RRSetChanged(ScreenPtr pScreen);
|
|
Peter Hutterer |
cd9fdcb |
+
|
|
Peter Hutterer |
cd9fdcb |
/*
|
|
Peter Hutterer |
cd9fdcb |
* Send all pending events
|
|
Peter Hutterer |
cd9fdcb |
*/
|
|
Peter Hutterer |
cd9fdcb |
diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c
|
|
Peter Hutterer |
cd9fdcb |
index 6e2eca5..b3fb5bd 100644
|
|
Peter Hutterer |
cd9fdcb |
--- a/randr/rrcrtc.c
|
|
Peter Hutterer |
cd9fdcb |
+++ b/randr/rrcrtc.c
|
|
Peter Hutterer |
cd9fdcb |
@@ -39,7 +39,7 @@ RRCrtcChanged(RRCrtcPtr crtc, Bool layoutChanged)
|
|
Peter Hutterer |
cd9fdcb |
if (pScreen) {
|
|
Peter Hutterer |
cd9fdcb |
rrScrPriv(pScreen);
|
|
Peter Hutterer |
cd9fdcb |
|
|
Peter Hutterer |
cd9fdcb |
- pScrPriv->changed = TRUE;
|
|
Peter Hutterer |
cd9fdcb |
+ RRSetChanged(pScreen);
|
|
Peter Hutterer |
cd9fdcb |
/*
|
|
Peter Hutterer |
cd9fdcb |
* Send ConfigureNotify on any layout change
|
|
Peter Hutterer |
cd9fdcb |
*/
|
|
Peter Hutterer |
cd9fdcb |
diff --git a/randr/rrinfo.c b/randr/rrinfo.c
|
|
Peter Hutterer |
cd9fdcb |
index 1408d6f..fc57bd4 100644
|
|
Peter Hutterer |
cd9fdcb |
--- a/randr/rrinfo.c
|
|
Peter Hutterer |
cd9fdcb |
+++ b/randr/rrinfo.c
|
|
Peter Hutterer |
cd9fdcb |
@@ -225,7 +225,7 @@ RRScreenSetSizeRange(ScreenPtr pScreen,
|
|
Peter Hutterer |
cd9fdcb |
pScrPriv->minHeight = minHeight;
|
|
Peter Hutterer |
cd9fdcb |
pScrPriv->maxWidth = maxWidth;
|
|
Peter Hutterer |
cd9fdcb |
pScrPriv->maxHeight = maxHeight;
|
|
Peter Hutterer |
cd9fdcb |
- pScrPriv->changed = TRUE;
|
|
Peter Hutterer |
cd9fdcb |
+ RRSetChanged(pScreen);
|
|
Peter Hutterer |
cd9fdcb |
pScrPriv->configChanged = TRUE;
|
|
Peter Hutterer |
cd9fdcb |
}
|
|
Peter Hutterer |
cd9fdcb |
|
|
Peter Hutterer |
cd9fdcb |
diff --git a/randr/rroutput.c b/randr/rroutput.c
|
|
Peter Hutterer |
cd9fdcb |
index 88781ba..922d61f 100644
|
|
Peter Hutterer |
cd9fdcb |
--- a/randr/rroutput.c
|
|
Peter Hutterer |
cd9fdcb |
+++ b/randr/rroutput.c
|
|
Peter Hutterer |
cd9fdcb |
@@ -36,7 +36,7 @@ RROutputChanged(RROutputPtr output, Bool configChanged)
|
|
Peter Hutterer |
cd9fdcb |
output->changed = TRUE;
|
|
Peter Hutterer |
cd9fdcb |
if (pScreen) {
|
|
Peter Hutterer |
cd9fdcb |
rrScrPriv(pScreen);
|
|
Peter Hutterer |
cd9fdcb |
- pScrPriv->changed = TRUE;
|
|
Peter Hutterer |
cd9fdcb |
+ RRSetChanged(pScreen);
|
|
Peter Hutterer |
cd9fdcb |
if (configChanged)
|
|
Peter Hutterer |
cd9fdcb |
pScrPriv->configChanged = TRUE;
|
|
Peter Hutterer |
cd9fdcb |
}
|
|
Peter Hutterer |
cd9fdcb |
diff --git a/randr/rrscreen.c b/randr/rrscreen.c
|
|
Peter Hutterer |
cd9fdcb |
index 39340cc..36179ae 100644
|
|
Peter Hutterer |
cd9fdcb |
--- a/randr/rrscreen.c
|
|
Peter Hutterer |
cd9fdcb |
+++ b/randr/rrscreen.c
|
|
Peter Hutterer |
cd9fdcb |
@@ -143,7 +143,7 @@ RRScreenSizeNotify(ScreenPtr pScreen)
|
|
Peter Hutterer |
cd9fdcb |
pScrPriv->height = pScreen->height;
|
|
Peter Hutterer |
cd9fdcb |
pScrPriv->mmWidth = pScreen->mmWidth;
|
|
Peter Hutterer |
cd9fdcb |
pScrPriv->mmHeight = pScreen->mmHeight;
|
|
Peter Hutterer |
cd9fdcb |
- pScrPriv->changed = TRUE;
|
|
Peter Hutterer |
cd9fdcb |
+ RRSetChanged(pScreen);
|
|
Peter Hutterer |
cd9fdcb |
/* pScrPriv->sizeChanged = TRUE; */
|
|
Peter Hutterer |
cd9fdcb |
|
|
Peter Hutterer |
cd9fdcb |
RRTellChanged(pScreen);
|
|
Peter Hutterer |
cd9fdcb |
--
|
|
Dave Airlie |
02cbf43 |
1.8.2
|
|
Peter Hutterer |
cd9fdcb |
|