add events for autoconfig of gpus devices, allow usb devices to notify gnome
This commit is contained in:
parent
0239e8727a
commit
e9612620ab
191
0001-autoconfig-fixup-tell-changed-so-randr-clients-can-t.patch
Normal file
191
0001-autoconfig-fixup-tell-changed-so-randr-clients-can-t.patch
Normal file
@ -0,0 +1,191 @@
|
||||
From fc08ad50a2ad81f8741939f8e9eacf86b5af6676 Mon Sep 17 00:00:00 2001
|
||||
From: Fedora X Ninjas <x@fedoraproject.org>
|
||||
Date: Wed, 12 Dec 2012 15:15:38 +1000
|
||||
Subject: [PATCH] autoconfig: fixup tell changed so randr clients can tell
|
||||
|
||||
This lets the gnome applet update if a usb device appears/disappears
|
||||
---
|
||||
hw/xfree86/common/xf86platformBus.c | 6 ++++--
|
||||
hw/xfree86/modes/xf86Crtc.c | 4 ++++
|
||||
randr/randr.c | 24 +++++++++++++++++++++++-
|
||||
randr/randrstr.h | 4 ++++
|
||||
randr/rrcrtc.c | 2 +-
|
||||
randr/rrinfo.c | 2 +-
|
||||
randr/rroutput.c | 2 +-
|
||||
randr/rrscreen.c | 2 +-
|
||||
8 files changed, 39 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c
|
||||
index 0b735d1..891142d 100644
|
||||
--- a/hw/xfree86/common/xf86platformBus.c
|
||||
+++ b/hw/xfree86/common/xf86platformBus.c
|
||||
@@ -47,6 +47,7 @@
|
||||
#include "Pci.h"
|
||||
#include "xf86platformBus.h"
|
||||
|
||||
+#include "randrstr.h"
|
||||
int platformSlotClaimed;
|
||||
|
||||
int xf86_num_platform_devices;
|
||||
@@ -454,7 +455,8 @@ xf86platformAddDevice(int index)
|
||||
/* attach unbound to 0 protocol screen */
|
||||
AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen);
|
||||
xf86AutoConfigOutputDevice(xf86GPUScreens[i], xf86Screens[0]);
|
||||
-
|
||||
+
|
||||
+ RRTellChanged(xf86Screens[0]->pScreen);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -497,7 +499,7 @@ xf86platformRemoveDevice(int index)
|
||||
xf86UnclaimPlatformSlot(&xf86_platform_devices[index], NULL);
|
||||
|
||||
xf86_remove_platform_device(index);
|
||||
-
|
||||
+ RRTellChanged(xf86Screens[0]->pScreen);
|
||||
out:
|
||||
return;
|
||||
}
|
||||
diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
|
||||
index 61119b3..a4fdec9 100644
|
||||
--- a/hw/xfree86/modes/xf86Crtc.c
|
||||
+++ b/hw/xfree86/modes/xf86Crtc.c
|
||||
@@ -743,10 +743,12 @@ xf86CrtcCloseScreen(ScreenPtr screen)
|
||||
/* detach any providers */
|
||||
if (config->randr_provider) {
|
||||
if (config->randr_provider->offload_sink) {
|
||||
+ RRSetChanged(screen);
|
||||
DetachOffloadGPU(screen);
|
||||
config->randr_provider->offload_sink = NULL;
|
||||
}
|
||||
else if (config->randr_provider->output_source) {
|
||||
+ RRSetChanged(screen);
|
||||
DetachOutputGPU(screen);
|
||||
config->randr_provider->output_source = NULL;
|
||||
}
|
||||
@@ -3341,11 +3343,13 @@ void xf86AutoConfigOutputDevice(ScrnInfoPtr pScrn, ScrnInfoPtr master)
|
||||
DetachUnboundGPU(pScrn->pScreen);
|
||||
AttachOffloadGPU(master->pScreen, pScrn->pScreen);
|
||||
slave_config->randr_provider->offload_sink = master_provider;
|
||||
+ RRSetChanged(master->pScreen);
|
||||
} else if ((master->capabilities & RR_Capability_SourceOutput) &&
|
||||
pScrn->capabilities & RR_Capability_SinkOutput) {
|
||||
/* sink offload */
|
||||
DetachUnboundGPU(pScrn->pScreen);
|
||||
AttachOutputGPU(master->pScreen, pScrn->pScreen);
|
||||
slave_config->randr_provider->output_source = master_provider;
|
||||
+ RRSetChanged(master->pScreen);
|
||||
}
|
||||
}
|
||||
diff --git a/randr/randr.c b/randr/randr.c
|
||||
index da48c3f..5b1957b 100644
|
||||
--- a/randr/randr.c
|
||||
+++ b/randr/randr.c
|
||||
@@ -462,6 +462,28 @@ TellChanged(WindowPtr pWin, pointer value)
|
||||
return WT_WALKCHILDREN;
|
||||
}
|
||||
|
||||
+void
|
||||
+RRSetChanged(ScreenPtr pScreen)
|
||||
+{
|
||||
+ /* set changed bits on the master screen only */
|
||||
+ ScreenPtr master;
|
||||
+ rrScrPriv(pScreen);
|
||||
+ rrScrPrivPtr mastersp;
|
||||
+
|
||||
+ if (pScreen->isGPU) {
|
||||
+ master = pScreen->current_master;
|
||||
+ if (!master)
|
||||
+ return;
|
||||
+ mastersp = rrGetScrPriv(master);
|
||||
+ }
|
||||
+ else {
|
||||
+ master = pScreen;
|
||||
+ mastersp = pScrPriv;
|
||||
+ }
|
||||
+
|
||||
+ mastersp->changed = TRUE;
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* Something changed; send events and adjust pointer position
|
||||
*/
|
||||
@@ -482,7 +504,7 @@ RRTellChanged(ScreenPtr pScreen)
|
||||
mastersp = pScrPriv;
|
||||
}
|
||||
|
||||
- if (pScrPriv->changed) {
|
||||
+ if (mastersp->changed) {
|
||||
UpdateCurrentTimeIf();
|
||||
if (mastersp->configChanged) {
|
||||
mastersp->lastConfigTime = currentTime;
|
||||
diff --git a/randr/randrstr.h b/randr/randrstr.h
|
||||
index 212b0a9..d61f20e 100644
|
||||
--- a/randr/randrstr.h
|
||||
+++ b/randr/randrstr.h
|
||||
@@ -480,6 +480,10 @@ extern _X_EXPORT void
|
||||
RRDeliverScreenEvent(ClientPtr client, WindowPtr pWin, ScreenPtr pScreen);
|
||||
|
||||
/* randr.c */
|
||||
+/* set a screen change on the primary screen */
|
||||
+extern _X_EXPORT void
|
||||
+RRSetChanged(ScreenPtr pScreen);
|
||||
+
|
||||
/*
|
||||
* Send all pending events
|
||||
*/
|
||||
diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c
|
||||
index e82d050..d57cc08 100644
|
||||
--- a/randr/rrcrtc.c
|
||||
+++ b/randr/rrcrtc.c
|
||||
@@ -39,7 +39,7 @@ RRCrtcChanged(RRCrtcPtr crtc, Bool layoutChanged)
|
||||
if (pScreen) {
|
||||
rrScrPriv(pScreen);
|
||||
|
||||
- pScrPriv->changed = TRUE;
|
||||
+ RRSetChanged(pScreen);
|
||||
/*
|
||||
* Send ConfigureNotify on any layout change
|
||||
*/
|
||||
diff --git a/randr/rrinfo.c b/randr/rrinfo.c
|
||||
index 1408d6f..fc57bd4 100644
|
||||
--- a/randr/rrinfo.c
|
||||
+++ b/randr/rrinfo.c
|
||||
@@ -225,7 +225,7 @@ RRScreenSetSizeRange(ScreenPtr pScreen,
|
||||
pScrPriv->minHeight = minHeight;
|
||||
pScrPriv->maxWidth = maxWidth;
|
||||
pScrPriv->maxHeight = maxHeight;
|
||||
- pScrPriv->changed = TRUE;
|
||||
+ RRSetChanged(pScreen);
|
||||
pScrPriv->configChanged = TRUE;
|
||||
}
|
||||
|
||||
diff --git a/randr/rroutput.c b/randr/rroutput.c
|
||||
index 88781ba..922d61f 100644
|
||||
--- a/randr/rroutput.c
|
||||
+++ b/randr/rroutput.c
|
||||
@@ -36,7 +36,7 @@ RROutputChanged(RROutputPtr output, Bool configChanged)
|
||||
output->changed = TRUE;
|
||||
if (pScreen) {
|
||||
rrScrPriv(pScreen);
|
||||
- pScrPriv->changed = TRUE;
|
||||
+ RRSetChanged(pScreen);
|
||||
if (configChanged)
|
||||
pScrPriv->configChanged = TRUE;
|
||||
}
|
||||
diff --git a/randr/rrscreen.c b/randr/rrscreen.c
|
||||
index 39340cc..36179ae 100644
|
||||
--- a/randr/rrscreen.c
|
||||
+++ b/randr/rrscreen.c
|
||||
@@ -143,7 +143,7 @@ RRScreenSizeNotify(ScreenPtr pScreen)
|
||||
pScrPriv->height = pScreen->height;
|
||||
pScrPriv->mmWidth = pScreen->mmWidth;
|
||||
pScrPriv->mmHeight = pScreen->mmHeight;
|
||||
- pScrPriv->changed = TRUE;
|
||||
+ RRSetChanged(pScreen);
|
||||
/* pScrPriv->sizeChanged = TRUE; */
|
||||
|
||||
RRTellChanged(pScreen);
|
||||
--
|
||||
1.8.0.1
|
||||
|
@ -43,7 +43,7 @@
|
||||
Summary: X.Org X11 X server
|
||||
Name: xorg-x11-server
|
||||
Version: 1.13.0
|
||||
Release: 13%{?gitdate:.%{gitdate}}%{dist}
|
||||
Release: 14%{?gitdate:.%{gitdate}}%{dist}
|
||||
URL: http://www.x.org
|
||||
License: MIT
|
||||
Group: User Interface/X
|
||||
@ -143,6 +143,8 @@ Patch7064: 0001-mieq-Bump-default-queue-size-to-512.patch
|
||||
# some hotplug fixes/workaround
|
||||
Patch7065: 0001-xfree86-hotplug-cleanup-properly-if-the-screen-fails.patch
|
||||
Patch7066: 0001-xf86crtc-don-t-use-display-for-vx-vy-for-gpu-screens.patch
|
||||
# autoconfig: send events
|
||||
Patch7067: 0001-autoconfig-fixup-tell-changed-so-randr-clients-can-t.patch
|
||||
|
||||
%global moduledir %{_libdir}/xorg/modules
|
||||
%global drimoduledir %{_libdir}/dri
|
||||
@ -616,6 +618,9 @@ rm -rf $RPM_BUILD_ROOT
|
||||
%{xserver_source_dir}
|
||||
|
||||
%changelog
|
||||
* Wed Dec 12 2012 Dave Airlie <airlied@redhat.com> 1.13.0-14
|
||||
- add events for autoconfig of gpus devices, allow usb devices to notify gnome
|
||||
|
||||
* Wed Dec 12 2012 Dave Airlie <airlied@redhat.com> 1.13.0-13
|
||||
- fix hotplug issue with usb devices and large screens
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user