[xorg-x11-server] add events for autoconfig of gpus devices, allow usb devices to notify gnome

Dave Airlie airlied at fedoraproject.org
Wed Dec 12 06:49:28 UTC 2012


commit e9612620ab2bfc229b71a2259ef49487542d22ac
Author: Dave Airlie <airlied at redhat.com>
Date:   Wed Dec 12 16:49:11 2012 +1000

    add events for autoconfig of gpus devices, allow usb devices to notify gnome

 ...fixup-tell-changed-so-randr-clients-can-t.patch |  191 ++++++++++++++++++++
 xorg-x11-server.spec                               |    7 +-
 2 files changed, 197 insertions(+), 1 deletions(-)
---
diff --git a/0001-autoconfig-fixup-tell-changed-so-randr-clients-can-t.patch b/0001-autoconfig-fixup-tell-changed-so-randr-clients-can-t.patch
new file mode 100644
index 0000000..9be545f
--- /dev/null
+++ b/0001-autoconfig-fixup-tell-changed-so-randr-clients-can-t.patch
@@ -0,0 +1,191 @@
+From fc08ad50a2ad81f8741939f8e9eacf86b5af6676 Mon Sep 17 00:00:00 2001
+From: Fedora X Ninjas <x at 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
+
diff --git a/xorg-x11-server.spec b/xorg-x11-server.spec
index 7eb32ba..cea4d2d 100644
--- a/xorg-x11-server.spec
+++ b/xorg-x11-server.spec
@@ -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 at 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 at redhat.com> 1.13.0-13
 - fix hotplug issue with usb devices and large screens
 


More information about the scm-commits mailing list