[Xquartz-changes] xserver: Branch 'server-1.14-branch' - 15 commits

Jeremy Huddleston jeremyhu at freedesktop.org
Wed Nov 13 08:56:03 PST 2013


Rebased ref, commits from common ancestor:
commit 7ddc6f7f1ed0e0f85b2d617c59d75d5de1cd2d5a
Author: Jeremy Huddleston Sequoia <jeremyhu at apple.com>
Date:   Fri Nov 8 14:55:33 2013 -0800

    xfree86: Fix build without libpciaccess
    
    Regression fix from commit 04ab07ca19236d6c9a947e065fb69b0dd0d16639
    
    Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu at apple.com>
    Reviewed-by: Connor Behan <connor.behan at gmail.com>
    (cherry picked from commit 4a251f5883b042cd902c192060a0be2b11148f2b)

diff --git a/hw/xfree86/common/xf86Bus.c b/hw/xfree86/common/xf86Bus.c
index 329d0b3..d463e91 100644
--- a/hw/xfree86/common/xf86Bus.c
+++ b/hw/xfree86/common/xf86Bus.c
@@ -266,9 +266,12 @@ xf86IsEntityPrimary(int entityIndex)
 {
     EntityPtr pEnt = xf86Entities[entityIndex];
 
+#ifdef XSERVER_LIBPCIACCESS
     if (primaryBus.type == BUS_PLATFORM && pEnt->bus.type == BUS_PCI)
 	return MATCH_PCI_DEVICES(pEnt->bus.id.pci, primaryBus.id.plat->pdev);
-    else if (primaryBus.type != pEnt->bus.type)
+#endif
+
+    if (primaryBus.type != pEnt->bus.type)
         return FALSE;
 
     switch (pEnt->bus.type) {
commit c6fd9c11f7302f4ac77bce37687c8bbffbf8ed65
Author: Jeremy Huddleston Sequoia <jeremyhu at apple.com>
Date:   Sun Nov 10 11:40:27 2013 -0800

    XQuartz: Don't sleep forever on exit if usleep() returns an error
    
    Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu at apple.com>
    (cherry picked from commit f70a8bf3714d89bccaad36841ef9149e91ad3bba)

diff --git a/hw/xquartz/X11Controller.m b/hw/xquartz/X11Controller.m
index 737db42..3d094bf 100644
--- a/hw/xquartz/X11Controller.m
+++ b/hw/xquartz/X11Controller.m
@@ -936,7 +936,7 @@ extern char *bundle_id_prefix;
 
 - (void) applicationWillTerminate:(NSNotification *)aNotification
 {
-    unsigned remain;
+    int remain;
     [X11App prefs_synchronize];
 
     /* shutdown the X server, it will exit () for us. */
commit c82a90815cef2d92f6aabb2b0991b3cda71d23c4
Author: Jeremy Huddleston Sequoia <jeremyhu at apple.com>
Date:   Sun Nov 10 11:26:49 2013 -0800

    XQuartz: Update Info.plist copyright years
    
    Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu at apple.com>
    (cherry picked from commit ebcc1c214c466582d7b92826b4860256fd9c582a)

diff --git a/hw/xquartz/bundle/Info.plist.cpp b/hw/xquartz/bundle/Info.plist.cpp
index 905952a..4b4a894 100644
--- a/hw/xquartz/bundle/Info.plist.cpp
+++ b/hw/xquartz/bundle/Info.plist.cpp
@@ -39,9 +39,9 @@
 	<key>LSApplicationCategoryType</key>
 		<string>public.app-category.utilities</string>
 	<key>NSHumanReadableCopyright</key>
-		<string>© 2003-2012 Apple Inc.
+		<string>© 2003-2013 Apple Inc.
 © 2003 XFree86 Project, Inc.
-© 2003-2012 X.org Foundation, Inc.
+© 2003-2013 X.org Foundation, Inc.
 </string>
 	<key>NSMainNibFile</key>
 		<string>main</string>
commit 339af2ae943d943f8ce986fc7bdcb8aa52b44922
Author: Eric Anholt <eric at anholt.net>
Date:   Tue Oct 22 14:22:04 2013 -0700

    glx: Add support for the new DRI loader entrypoint.
    
    This is going to be exposed (and not the old entrypoint) for some DRI
    drivers once the megadrivers series lands, and the plan is to
    eventually transition all drivers to that.  Hopefully this is
    unobtrusive enough to merge to stable X servers so that they can be
    compatible with new Mesa versions.
    
    v2: typo fix in the comment
    
    Signed-off-by: Eric Anholt <eric at anholt.net>
    Reviewed-by: Adam Jackson <ajax at redhat.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/glx/glxdricommon.c b/glx/glxdricommon.c
index c90f380..5686c5f 100644
--- a/glx/glxdricommon.c
+++ b/glx/glxdricommon.c
@@ -209,6 +209,14 @@ glxConvertConfigs(const __DRIcoreExtension * core,
 
 static const char dri_driver_path[] = DRI_DRIVER_PATH;
 
+/* Temporary define to allow building without a dri_interface.h from
+ * updated Mesa.  Some day when we don't care about Mesa that old any
+ * more this can be removed.
+ */
+#ifndef __DRI_DRIVER_GET_EXTENSIONS
+#define __DRI_DRIVER_GET_EXTENSIONS "__driDriverGetExtensions"
+#endif
+
 void *
 glxProbeDriver(const char *driverName,
                void **coreExt, const char *coreName, int coreVersion,
@@ -217,7 +225,8 @@ glxProbeDriver(const char *driverName,
     int i;
     void *driver;
     char filename[PATH_MAX];
-    const __DRIextension **extensions;
+    char *get_extensions_name;
+    const __DRIextension **extensions = NULL;
 
     snprintf(filename, sizeof filename, "%s/%s_dri.so",
              dri_driver_path, driverName);
@@ -229,7 +238,18 @@ glxProbeDriver(const char *driverName,
         goto cleanup_failure;
     }
 
-    extensions = dlsym(driver, __DRI_DRIVER_EXTENSIONS);
+    if (asprintf(&get_extensions_name, "%s_%s",
+                 __DRI_DRIVER_GET_EXTENSIONS, driverName) != -1) {
+        const __DRIextension **(*get_extensions)(void);
+
+        get_extensions = dlsym(driver, get_extensions_name);
+        if (get_extensions)
+            extensions = get_extensions();
+        free(get_extensions_name);
+    }
+
+    if (!extensions)
+        extensions = dlsym(driver, __DRI_DRIVER_EXTENSIONS);
     if (extensions == NULL) {
         LogMessage(X_ERROR, "AIGLX error: %s exports no extensions (%s)\n",
                    driverName, dlerror());
commit 833639d2653a869c2ec8692640213e2ffa16fbb4
Merge: cf684f0 94b7f26
Author: Matt Dew <marcoz at osource.org>
Date:   Tue Nov 5 20:06:28 2013 -0700

    Merge commit '94b7f26aeda31cf55ff9b7c04f390ba6d35977e4' into server-1.14-branch

commit cf684f05180e8b3eb29ca94bbab84abb99f0f578
Author: Michal Srb <msrb at suse.com>
Date:   Wed Oct 30 13:33:51 2013 +0200

    randr: deliver Output and Crtc events of attached output providers.
    
    Consider all attached output providers when looking for changed outputs and
    crtcs.
    
    Reviewed-by: Dave Airlie <airlied at redhat.com>
    Signed-off-by: Michal Srb <msrb at suse.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>
    (cherry picked from commit 85ae44f07fa21b4a48d95d736dc8135bd4f751d0)

diff --git a/randr/randr.c b/randr/randr.c
index 9cec6f6..3c51427 100644
--- a/randr/randr.c
+++ b/randr/randr.c
@@ -478,6 +478,16 @@ TellChanged(WindowPtr pWin, pointer value)
                 if (crtc->changed)
                     RRDeliverCrtcEvent(client, pWin, crtc);
             }
+
+            xorg_list_for_each_entry(iter, &pScreen->output_slave_list, output_head) {
+                pSlaveScrPriv = rrGetScrPriv(iter);
+                for (i = 0; i < pSlaveScrPriv->numCrtcs; i++) {
+                    RRCrtcPtr crtc = pSlaveScrPriv->crtcs[i];
+
+                    if (crtc->changed)
+                        RRDeliverCrtcEvent(client, pWin, crtc);
+                }
+            }
         }
 
         if (pRREvent->mask & RROutputChangeNotifyMask) {
@@ -487,6 +497,16 @@ TellChanged(WindowPtr pWin, pointer value)
                 if (output->changed)
                     RRDeliverOutputEvent(client, pWin, output);
             }
+
+            xorg_list_for_each_entry(iter, &pScreen->output_slave_list, output_head) {
+                pSlaveScrPriv = rrGetScrPriv(iter);
+                for (i = 0; i < pSlaveScrPriv->numOutputs; i++) {
+                    RROutputPtr output = pSlaveScrPriv->outputs[i];
+
+                    if (output->changed)
+                        RRDeliverOutputEvent(client, pWin, output);
+                }
+            }
         }
 
         if (pRREvent->mask & RRProviderChangeNotifyMask) {
@@ -581,6 +601,10 @@ RRTellChanged(ScreenPtr pScreen)
         xorg_list_for_each_entry(iter, &master->output_slave_list, output_head) {
             pSlaveScrPriv = rrGetScrPriv(iter);
             pSlaveScrPriv->provider->changed = FALSE;
+            for (i = 0; i < pSlaveScrPriv->numOutputs; i++)
+                pSlaveScrPriv->outputs[i]->changed = FALSE;
+            for (i = 0; i < pSlaveScrPriv->numCrtcs; i++)
+                pSlaveScrPriv->crtcs[i]->changed = FALSE;
         }
         xorg_list_for_each_entry(iter, &master->offload_slave_list, offload_head) {
             pSlaveScrPriv = rrGetScrPriv(iter);
commit 87d66ccfec6808fd753da04254c096fa4a3d14cb
Author: Michal Srb <msrb at suse.com>
Date:   Wed Oct 30 13:33:50 2013 +0200

    randr: send RRResourceChangeNotify event (abi unbreak)
    
    Send RRResourceChangeNotify event when provider, output or crtc was created or
    destroyed. I.e. when the list of resources returned by RRGetScreenResources and
    RRGetProviders changes.
    
    [airlied: move structure member to avoid ABI breakage]
    
    Reviewed-by: Dave Airlie <airlied at redhat.com>
    Signed-off-by: Michal Srb <msrb at suse.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>
    (cherry picked from commit a9ca93dcf9a711b3d60fbad31cbd44e0c82b6f42)

diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c
index e368dee..33b2b7d 100644
--- a/hw/xfree86/common/xf86platformBus.c
+++ b/hw/xfree86/common/xf86platformBus.c
@@ -466,6 +466,9 @@ xf86platformAddDevice(int index)
    /* attach unbound to 0 protocol screen */
    AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen);
 
+   RRResourcesChanged(xf86Screens[0]->pScreen);
+   RRTellChanged(xf86Screens[0]->pScreen);
+
    return 0;
 }
 
@@ -508,6 +511,8 @@ xf86platformRemoveDevice(int index)
     xf86UnclaimPlatformSlot(&xf86_platform_devices[index], NULL);
 
     xf86_remove_platform_device(index);
+
+    RRResourcesChanged(xf86Screens[0]->pScreen);
     RRTellChanged(xf86Screens[0]->pScreen);
  out:
     return;
diff --git a/randr/randr.c b/randr/randr.c
index fa0a4da..9cec6f6 100644
--- a/randr/randr.c
+++ b/randr/randr.c
@@ -420,6 +420,32 @@ RRExtensionInit(void)
 #endif
 }
 
+void
+RRResourcesChanged(ScreenPtr pScreen)
+{
+    rrScrPriv(pScreen);
+    pScrPriv->resourcesChanged = TRUE;
+
+    RRSetChanged(pScreen);
+}
+
+static void
+RRDeliverResourceEvent(ClientPtr client, WindowPtr pWin)
+{
+    ScreenPtr pScreen = pWin->drawable.pScreen;
+
+    rrScrPriv(pScreen);
+
+    xRRResourceChangeNotifyEvent re = {
+        .type = RRNotify + RREventBase,
+        .subCode = RRNotify_ResourceChange,
+        .timestamp = pScrPriv->lastSetTime.milliseconds,
+        .window = pWin->drawable.id
+    };
+
+    WriteEventsToClient(client, 1, (xEvent *) &re);
+}
+
 static int
 TellChanged(WindowPtr pWin, pointer value)
 {
@@ -480,6 +506,12 @@ TellChanged(WindowPtr pWin, pointer value)
                     RRDeliverProviderEvent(client, pWin, pSlaveScrPriv->provider);
             }
         }
+
+        if (pRREvent->mask & RRResourceChangeNotifyMask) {
+            if (pScrPriv->resourcesChanged) {
+                RRDeliverResourceEvent(client, pWin);
+            }
+        }
     }
     return WT_WALKCHILDREN;
 }
@@ -536,7 +568,11 @@ RRTellChanged(ScreenPtr pScreen)
         }
         pScrPriv->changed = FALSE;
         mastersp->changed = FALSE;
+
         WalkTree(master, TellChanged, (pointer) master);
+
+        mastersp->resourcesChanged = FALSE;
+
         for (i = 0; i < pScrPriv->numOutputs; i++)
             pScrPriv->outputs[i]->changed = FALSE;
         for (i = 0; i < pScrPriv->numCrtcs; i++)
diff --git a/randr/randrstr.h b/randr/randrstr.h
index 3427378..27b4ba0 100644
--- a/randr/randrstr.h
+++ b/randr/randrstr.h
@@ -337,6 +337,7 @@ typedef struct _rrScrPriv {
 
     RRProviderDestroyProcPtr rrProviderDestroy;
 
+    Bool resourcesChanged;      /* screen resources change */
 } rrScrPrivRec, *rrScrPrivPtr;
 
 extern _X_EXPORT DevPrivateKeyRec rrPrivKeyRec;
@@ -486,6 +487,9 @@ extern _X_EXPORT int
 extern _X_EXPORT void
  RRDeliverScreenEvent(ClientPtr client, WindowPtr pWin, ScreenPtr pScreen);
 
+extern _X_EXPORT void
+ RRResourcesChanged(ScreenPtr pScreen);
+
 /* randr.c */
 /* set a screen change on the primary screen */
 extern _X_EXPORT void
diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c
index b3fb5bd..5cdfd05 100644
--- a/randr/rrcrtc.c
+++ b/randr/rrcrtc.c
@@ -102,6 +102,8 @@ RRCrtcCreate(ScreenPtr pScreen, void *devPrivate)
     crtc->pScreen = pScreen;
     pScrPriv->crtcs[pScrPriv->numCrtcs++] = crtc;
 
+    RRResourcesChanged(pScreen);
+
     return crtc;
 }
 
@@ -672,6 +674,8 @@ RRCrtcDestroyResource(pointer value, XID pid)
                 break;
             }
         }
+
+        RRResourcesChanged(pScreen);
     }
 
     if (crtc->scanout_pixmap)
diff --git a/randr/rroutput.c b/randr/rroutput.c
index 922d61f..2b0b82f 100644
--- a/randr/rroutput.c
+++ b/randr/rroutput.c
@@ -101,6 +101,9 @@ RROutputCreate(ScreenPtr pScreen,
         return NULL;
 
     pScrPriv->outputs[pScrPriv->numOutputs++] = output;
+
+    RRResourcesChanged(pScreen);
+
     return output;
 }
 
@@ -355,6 +358,8 @@ RROutputDestroyResource(pointer value, XID pid)
                 break;
             }
         }
+
+        RRResourcesChanged(pScreen);
     }
     if (output->modes) {
         for (m = 0; m < output->numModes; m++)
commit 9cc5d700b1e963284992ea3be7c93d425120c713
Author: Michal Srb <msrb at suse.com>
Date:   Wed Oct 30 13:33:49 2013 +0200

    randr: send RRProviderChangeNotify event (abi unbreak)
    
    Send RRProviderChangeNotify event when a provider becomes output source or
    offload sink.
    
    [airlied: unbreak the ABI for 1.14 backport.]
    
    Reviewed-by: Dave Airlie <airlied at redhat.com>
    Signed-off-by: Michal Srb <msrb at suse.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>
    (cherry picked from commit 4b39ea8a918fe6117bf34dc1cba67a4e56d0d1fb)

diff --git a/randr/randr.c b/randr/randr.c
index cb6fce7..fa0a4da 100644
--- a/randr/randr.c
+++ b/randr/randr.c
@@ -426,6 +426,8 @@ TellChanged(WindowPtr pWin, pointer value)
     RREventPtr *pHead, pRREvent;
     ClientPtr client;
     ScreenPtr pScreen = pWin->drawable.pScreen;
+    ScreenPtr iter;
+    rrScrPrivPtr pSlaveScrPriv;
 
     rrScrPriv(pScreen);
     int i;
@@ -460,6 +462,24 @@ TellChanged(WindowPtr pWin, pointer value)
                     RRDeliverOutputEvent(client, pWin, output);
             }
         }
+
+        if (pRREvent->mask & RRProviderChangeNotifyMask) {
+            xorg_list_for_each_entry(iter, &pScreen->output_slave_list, output_head) {
+                pSlaveScrPriv = rrGetScrPriv(iter);
+                if (pSlaveScrPriv->provider->changed)
+                    RRDeliverProviderEvent(client, pWin, pSlaveScrPriv->provider);
+            }
+            xorg_list_for_each_entry(iter, &pScreen->offload_slave_list, offload_head) {
+                pSlaveScrPriv = rrGetScrPriv(iter);
+                if (pSlaveScrPriv->provider->changed)
+                    RRDeliverProviderEvent(client, pWin, pSlaveScrPriv->provider);
+            }
+            xorg_list_for_each_entry(iter, &pScreen->unattached_list, unattached_head) {
+                pSlaveScrPriv = rrGetScrPriv(iter);
+                if (pSlaveScrPriv->provider->changed)
+                    RRDeliverProviderEvent(client, pWin, pSlaveScrPriv->provider);
+            }
+        }
     }
     return WT_WALKCHILDREN;
 }
@@ -496,6 +516,8 @@ RRTellChanged(ScreenPtr pScreen)
     rrScrPriv(pScreen);
     rrScrPrivPtr mastersp;
     int i;
+    ScreenPtr iter;
+    rrScrPrivPtr pSlaveScrPriv;
 
     if (pScreen->isGPU) {
         master = pScreen->current_master;
@@ -519,6 +541,20 @@ RRTellChanged(ScreenPtr pScreen)
             pScrPriv->outputs[i]->changed = FALSE;
         for (i = 0; i < pScrPriv->numCrtcs; i++)
             pScrPriv->crtcs[i]->changed = FALSE;
+
+        xorg_list_for_each_entry(iter, &master->output_slave_list, output_head) {
+            pSlaveScrPriv = rrGetScrPriv(iter);
+            pSlaveScrPriv->provider->changed = FALSE;
+        }
+        xorg_list_for_each_entry(iter, &master->offload_slave_list, offload_head) {
+            pSlaveScrPriv = rrGetScrPriv(iter);
+            pSlaveScrPriv->provider->changed = FALSE;
+        }
+        xorg_list_for_each_entry(iter, &master->unattached_list, unattached_head) {
+            pSlaveScrPriv = rrGetScrPriv(iter);
+            pSlaveScrPriv->provider->changed = FALSE;
+        }
+
         if (mastersp->layoutChanged) {
             pScrPriv->layoutChanged = FALSE;
             RRPointerScreenConfigured(master);
diff --git a/randr/randrstr.h b/randr/randrstr.h
index 2babfed..3427378 100644
--- a/randr/randrstr.h
+++ b/randr/randrstr.h
@@ -166,6 +166,7 @@ struct _rrProvider {
     Bool pendingProperties;
     struct _rrProvider *offload_sink;
     struct _rrProvider *output_source;
+    Bool changed;
 };
 
 #if RANDR_12_INTERFACE
@@ -923,6 +924,9 @@ RRProviderSetCapabilities(RRProviderPtr provider, uint32_t capabilities);
 extern _X_EXPORT Bool
 RRProviderLookup(XID id, RRProviderPtr *provider_p);
 
+extern _X_EXPORT void
+RRDeliverProviderEvent(ClientPtr client, WindowPtr pWin, RRProviderPtr provider);
+
 /* rrproviderproperty.c */
 
 extern _X_EXPORT void
diff --git a/randr/rrprovider.c b/randr/rrprovider.c
index b321e62..2334ad2 100644
--- a/randr/rrprovider.c
+++ b/randr/rrprovider.c
@@ -304,6 +304,9 @@ ProcRRSetProviderOutputSource(ClientPtr client)
 
     pScrPriv->rrProviderSetOutputSource(pScreen, provider, source_provider);
 
+    provider->changed = TRUE;
+    RRSetChanged(pScreen);
+
     RRTellChanged (pScreen);
 
     return Success;
@@ -333,6 +336,9 @@ ProcRRSetProviderOffloadSink(ClientPtr client)
 
     pScrPriv->rrProviderSetOffloadSink(pScreen, provider, sink_provider);
 
+    provider->changed = TRUE;
+    RRSetChanged(pScreen);
+
     RRTellChanged (pScreen);
 
     return Success;
@@ -357,6 +363,7 @@ RRProviderCreate(ScreenPtr pScreen, const char *name,
     provider->nameLength = nameLength;
     memcpy(provider->name, name, nameLength);
     provider->name[nameLength] = '\0';
+    provider->changed = FALSE;
 
     if (!AddResource (provider->id, RRProviderType, (pointer) provider))
         return NULL;
@@ -416,3 +423,21 @@ RRProviderLookup(XID id, RRProviderPtr *provider_p)
         return TRUE;
     return FALSE;
 }
+
+void
+RRDeliverProviderEvent(ClientPtr client, WindowPtr pWin, RRProviderPtr provider)
+{
+    ScreenPtr pScreen = pWin->drawable.pScreen;
+
+    rrScrPriv(pScreen);
+
+    xRRProviderChangeNotifyEvent pe = {
+        .type = RRNotify + RREventBase,
+        .subCode = RRNotify_ProviderChange,
+        .timestamp = pScrPriv->lastSetTime.milliseconds,
+        .window = pWin->drawable.id,
+        .provider = provider->id
+    };
+
+    WriteEventsToClient(client, 1, (xEvent *) &pe);
+}
commit 4cd0af4bb2662554e9bf3c044b8233019515e758
Author: Dave Airlie <airlied at redhat.com>
Date:   Wed Jan 9 14:26:35 2013 +1000

    randr: report changes when we disconnect a GPU slave
    
    When we disconnect an output/offload slave set the changed bits,
    so a later TellChanged can do something.
    
    Then when we remove a GPU slave device, sent change notification
    to the protocol screen.
    
    This allows hot unplugged USB devices to disappear in clients.
    
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Dave Airlie <airlied at redhat.com>
    (cherry picked from commit 9d26e8eaf5a2d7c3e65670ac20254c60f665c463)

diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c
index db831a8..e368dee 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;
@@ -507,7 +508,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/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c
index 8a4bad7..db31432 100644
--- a/hw/xfree86/modes/xf86RandR12.c
+++ b/hw/xfree86/modes/xf86RandR12.c
@@ -1908,10 +1908,12 @@ xf86RandR14ProviderDestroy(ScreenPtr screen, RRProviderPtr provider)
         if (config->randr_provider->offload_sink) {
             DetachOffloadGPU(screen);
             config->randr_provider->offload_sink = NULL;
+            RRSetChanged(screen);
         }
         else if (config->randr_provider->output_source) {
             xf86DetachOutputGPU(screen);
             config->randr_provider->output_source = NULL;
+            RRSetChanged(screen);
         }
         else if (screen->current_master)
             DetachUnboundGPU(screen);
commit 33b110d2dd74d4474c13f529b36fe30019fabcfc
Author: Dave Airlie <airlied at redhat.com>
Date:   Wed Jan 9 14:25:43 2013 +1000

    randr: only respected changed on the protocol screen
    
    We don't want to know about changes on the non-protocol screen,
    we will fix up setchanged to make sure non-protocol screens update
    the protocol screens when they have a change.
    
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Dave Airlie <airlied at redhat.com>
    (cherry picked from commit e233bda3e7c68234b34a8b7ad04b27c6e2009a8f)

diff --git a/randr/randr.c b/randr/randr.c
index fb0895d..cb6fce7 100644
--- a/randr/randr.c
+++ b/randr/randr.c
@@ -506,7 +506,7 @@ RRTellChanged(ScreenPtr pScreen)
         mastersp = pScrPriv;
     }
 
-    if (pScrPriv->changed) {
+    if (mastersp->changed) {
         UpdateCurrentTimeIf();
         if (mastersp->configChanged) {
             mastersp->lastConfigTime = currentTime;
commit 8d923f090fd793a52b2a9a84353a242b30b12b99
Author: Dave Airlie <airlied at redhat.com>
Date:   Wed Jan 9 14:29:47 2013 +1000

    randr: make SetChanged modify the main protocol screen not the gpu screen
    
    When SetChanged is called we now modify the main protocol screen,
    not the the gpu screen. Since changed stuff should work at the protocol level.
    
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Dave Airlie <airlied at redhat.com>
    (cherry picked from commit b3f70f38edebac87afe9351538365292f1aaaff3)

diff --git a/randr/randr.c b/randr/randr.c
index 11f88b2..fb0895d 100644
--- a/randr/randr.c
+++ b/randr/randr.c
@@ -467,9 +467,23 @@ TellChanged(WindowPtr pWin, pointer value)
 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;
+    }
 
-    pScrPriv->changed = TRUE;
+    mastersp->changed = TRUE;
 }
 
 /*
commit cc9579aee3b44e43a69fbf8c24ef88dfabe7f16d
Author: Dave Airlie <airlied at redhat.com>
Date:   Wed Jan 9 14:23:57 2013 +1000

    randr: don't directly set changed bits in randr screen
    
    Introduce a wrapper interface so we can fix things up for multi-gpu
    situations later.
    
    This just introduces the API for now.
    
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Dave Airlie <airlied at redhat.com>
    (cherry picked from commit f9c8248b8326ad01f33f31531c6b2479baf80f02)

diff --git a/randr/randr.c b/randr/randr.c
index f0decfc..11f88b2 100644
--- a/randr/randr.c
+++ b/randr/randr.c
@@ -464,6 +464,14 @@ TellChanged(WindowPtr pWin, pointer value)
     return WT_WALKCHILDREN;
 }
 
+void
+RRSetChanged(ScreenPtr pScreen)
+{
+    rrScrPriv(pScreen);
+
+    pScrPriv->changed = TRUE;
+}
+
 /*
  * Something changed; send events and adjust pointer position
  */
diff --git a/randr/randrstr.h b/randr/randrstr.h
index 2517479..2babfed 100644
--- a/randr/randrstr.h
+++ b/randr/randrstr.h
@@ -486,6 +486,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 6e2eca5..b3fb5bd 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);
commit 98ef5bc9aa421961e6c1654963af86d5ff3092db
Author: Adam Jackson <ajax at redhat.com>
Date:   Wed Aug 21 14:12:52 2013 -0400

    randr: Fix a copypasta bug in CRTC confinement
    
    Reviewed-by: Michel Dänzer <michel.daenzer at amd.com>
    Signed-off-by: Adam Jackson <ajax at redhat.com>
    (cherry picked from commit 1c8beedfe4343377fa3504f8ab71430cc137b22c)

diff --git a/randr/rrpointer.c b/randr/rrpointer.c
index ec803e9..eb6b677 100644
--- a/randr/rrpointer.c
+++ b/randr/rrpointer.c
@@ -82,7 +82,7 @@ RRPointerToNearestCrtc(DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y,
         else
             dx = 0;
         if (y < crtc->y)
-            dy = crtc->y - x;
+            dy = crtc->y - y;
         else if (y > crtc->y + scan_height)
             dy = y - (crtc->y + scan_height);
         else
commit 2bea21ea7e6d474d2a075dd7d37464929ff5855b
Author: Aaron Plattner <aplattner at nvidia.com>
Date:   Tue Apr 30 14:14:23 2013 -0700

    xfree86: detach scanout pixmaps when detaching output GPUs
    
    Commit 8f4640bdb9d3988148e09a08d2c7e3bab1d538d6 fixed a bit of a
    chicken-and-egg problem by detaching GPU screens when their providers
    are destroyed, which happens before CloseScreen is called.  However,
    this created a new problem: the GPU screen tears down its RandR crtc
    objects during CloseScreen and if one of them is active, it tries to
    detach the scanout pixmap then.  This crashes because
    RRCrtcDetachScanoutPixmap tries to get the master screen's screen
    pixmap, but crtc->pScreen->current_master is already NULL at that
    point.
    
    It doesn't make sense for an unbound GPU screen to still be scanning
    out its former master screen's pixmap, so detach them first when the
    provider is destroyed.
    
    Signed-off-by: Aaron Plattner <aplattner at nvidia.com>
    Reviewed-by: Dave Airlie <airlied at redhat.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>
    (cherry picked from commit bdd1e22cbde9ea2324e4e1991c9e152f22f88151)

diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c
index 01fc9c5..8a4bad7 100644
--- a/hw/xfree86/modes/xf86RandR12.c
+++ b/hw/xfree86/modes/xf86RandR12.c
@@ -1770,6 +1770,19 @@ xf86RandR12EnterVT(ScrnInfoPtr pScrn)
     return RRGetInfo(pScreen, TRUE);    /* force a re-probe of outputs and notify clients about changes */
 }
 
+static void
+xf86DetachOutputGPU(ScreenPtr pScreen)
+{
+    rrScrPrivPtr rp = rrGetScrPriv(pScreen);
+    int i;
+
+    /* make sure there are no attached shared scanout pixmaps first */
+    for (i = 0; i < rp->numCrtcs; i++)
+        RRCrtcDetachScanoutPixmap(rp->crtcs[i]);
+
+    DetachOutputGPU(pScreen);
+}
+
 static Bool
 xf86RandR14ProviderSetOutputSource(ScreenPtr pScreen,
                                    RRProviderPtr provider,
@@ -1779,7 +1792,7 @@ xf86RandR14ProviderSetOutputSource(ScreenPtr pScreen,
         if (provider->output_source) {
             ScreenPtr cmScreen = pScreen->current_master;
 
-            DetachOutputGPU(pScreen);
+            xf86DetachOutputGPU(pScreen);
             AttachUnboundGPU(cmScreen, pScreen);
         }
         provider->output_source = NULL;
@@ -1807,7 +1820,7 @@ xf86RandR14ProviderSetOffloadSink(ScreenPtr pScreen,
     if (!sink_provider) {
         if (provider->offload_sink) {
             ScreenPtr cmScreen = pScreen->current_master;
-            DetachOutputGPU(pScreen);
+            xf86DetachOutputGPU(pScreen);
             AttachUnboundGPU(cmScreen, pScreen);
         }
 
@@ -1897,7 +1910,7 @@ xf86RandR14ProviderDestroy(ScreenPtr screen, RRProviderPtr provider)
             config->randr_provider->offload_sink = NULL;
         }
         else if (config->randr_provider->output_source) {
-            DetachOutputGPU(screen);
+            xf86DetachOutputGPU(screen);
             config->randr_provider->output_source = NULL;
         }
         else if (screen->current_master)
commit 9fbbea8cda199c5efdf3d3ae7485eb9ba62cde8b
Author: Dave Airlie <airlied at redhat.com>
Date:   Tue Nov 5 13:19:41 2013 +1000

    Revert "Merge commit 'f98d6cfa0de41cf33e7555342753897c07af84ef' into server-1.14-branch"
    
    This reverts commit ad2fa50b5371f6e71a66d47e73304599c90f9118, reversing
    changes made to bab4908579f6b034ea38f8df2f8dc1f9f026f5e1.
    
    oops i broke ABI.
    
    Signed-off-by: Dave Airlie <airlied at redhat.com>

diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c
index 33b2b7d..db831a8 100644
--- a/hw/xfree86/common/xf86platformBus.c
+++ b/hw/xfree86/common/xf86platformBus.c
@@ -47,7 +47,6 @@
 #include "Pci.h"
 #include "xf86platformBus.h"
 
-#include "randrstr.h"
 int platformSlotClaimed;
 
 int xf86_num_platform_devices;
@@ -466,9 +465,6 @@ xf86platformAddDevice(int index)
    /* attach unbound to 0 protocol screen */
    AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen);
 
-   RRResourcesChanged(xf86Screens[0]->pScreen);
-   RRTellChanged(xf86Screens[0]->pScreen);
-
    return 0;
 }
 
@@ -512,8 +508,6 @@ xf86platformRemoveDevice(int index)
 
     xf86_remove_platform_device(index);
 
-    RRResourcesChanged(xf86Screens[0]->pScreen);
-    RRTellChanged(xf86Screens[0]->pScreen);
  out:
     return;
 }
diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c
index db31432..01fc9c5 100644
--- a/hw/xfree86/modes/xf86RandR12.c
+++ b/hw/xfree86/modes/xf86RandR12.c
@@ -1770,19 +1770,6 @@ xf86RandR12EnterVT(ScrnInfoPtr pScrn)
     return RRGetInfo(pScreen, TRUE);    /* force a re-probe of outputs and notify clients about changes */
 }
 
-static void
-xf86DetachOutputGPU(ScreenPtr pScreen)
-{
-    rrScrPrivPtr rp = rrGetScrPriv(pScreen);
-    int i;
-
-    /* make sure there are no attached shared scanout pixmaps first */
-    for (i = 0; i < rp->numCrtcs; i++)
-        RRCrtcDetachScanoutPixmap(rp->crtcs[i]);
-
-    DetachOutputGPU(pScreen);
-}
-
 static Bool
 xf86RandR14ProviderSetOutputSource(ScreenPtr pScreen,
                                    RRProviderPtr provider,
@@ -1792,7 +1779,7 @@ xf86RandR14ProviderSetOutputSource(ScreenPtr pScreen,
         if (provider->output_source) {
             ScreenPtr cmScreen = pScreen->current_master;
 
-            xf86DetachOutputGPU(pScreen);
+            DetachOutputGPU(pScreen);
             AttachUnboundGPU(cmScreen, pScreen);
         }
         provider->output_source = NULL;
@@ -1820,7 +1807,7 @@ xf86RandR14ProviderSetOffloadSink(ScreenPtr pScreen,
     if (!sink_provider) {
         if (provider->offload_sink) {
             ScreenPtr cmScreen = pScreen->current_master;
-            xf86DetachOutputGPU(pScreen);
+            DetachOutputGPU(pScreen);
             AttachUnboundGPU(cmScreen, pScreen);
         }
 
@@ -1908,12 +1895,10 @@ xf86RandR14ProviderDestroy(ScreenPtr screen, RRProviderPtr provider)
         if (config->randr_provider->offload_sink) {
             DetachOffloadGPU(screen);
             config->randr_provider->offload_sink = NULL;
-            RRSetChanged(screen);
         }
         else if (config->randr_provider->output_source) {
-            xf86DetachOutputGPU(screen);
+            DetachOutputGPU(screen);
             config->randr_provider->output_source = NULL;
-            RRSetChanged(screen);
         }
         else if (screen->current_master)
             DetachUnboundGPU(screen);
diff --git a/randr/randr.c b/randr/randr.c
index 3c51427..f0decfc 100644
--- a/randr/randr.c
+++ b/randr/randr.c
@@ -420,40 +420,12 @@ RRExtensionInit(void)
 #endif
 }
 
-void
-RRResourcesChanged(ScreenPtr pScreen)
-{
-    rrScrPriv(pScreen);
-    pScrPriv->resourcesChanged = TRUE;
-
-    RRSetChanged(pScreen);
-}
-
-static void
-RRDeliverResourceEvent(ClientPtr client, WindowPtr pWin)
-{
-    ScreenPtr pScreen = pWin->drawable.pScreen;
-
-    rrScrPriv(pScreen);
-
-    xRRResourceChangeNotifyEvent re = {
-        .type = RRNotify + RREventBase,
-        .subCode = RRNotify_ResourceChange,
-        .timestamp = pScrPriv->lastSetTime.milliseconds,
-        .window = pWin->drawable.id
-    };
-
-    WriteEventsToClient(client, 1, (xEvent *) &re);
-}
-
 static int
 TellChanged(WindowPtr pWin, pointer value)
 {
     RREventPtr *pHead, pRREvent;
     ClientPtr client;
     ScreenPtr pScreen = pWin->drawable.pScreen;
-    ScreenPtr iter;
-    rrScrPrivPtr pSlaveScrPriv;
 
     rrScrPriv(pScreen);
     int i;
@@ -478,16 +450,6 @@ TellChanged(WindowPtr pWin, pointer value)
                 if (crtc->changed)
                     RRDeliverCrtcEvent(client, pWin, crtc);
             }
-
-            xorg_list_for_each_entry(iter, &pScreen->output_slave_list, output_head) {
-                pSlaveScrPriv = rrGetScrPriv(iter);
-                for (i = 0; i < pSlaveScrPriv->numCrtcs; i++) {
-                    RRCrtcPtr crtc = pSlaveScrPriv->crtcs[i];
-
-                    if (crtc->changed)
-                        RRDeliverCrtcEvent(client, pWin, crtc);
-                }
-            }
         }
 
         if (pRREvent->mask & RROutputChangeNotifyMask) {
@@ -497,67 +459,11 @@ TellChanged(WindowPtr pWin, pointer value)
                 if (output->changed)
                     RRDeliverOutputEvent(client, pWin, output);
             }
-
-            xorg_list_for_each_entry(iter, &pScreen->output_slave_list, output_head) {
-                pSlaveScrPriv = rrGetScrPriv(iter);
-                for (i = 0; i < pSlaveScrPriv->numOutputs; i++) {
-                    RROutputPtr output = pSlaveScrPriv->outputs[i];
-
-                    if (output->changed)
-                        RRDeliverOutputEvent(client, pWin, output);
-                }
-            }
-        }
-
-        if (pRREvent->mask & RRProviderChangeNotifyMask) {
-            xorg_list_for_each_entry(iter, &pScreen->output_slave_list, output_head) {
-                pSlaveScrPriv = rrGetScrPriv(iter);
-                if (pSlaveScrPriv->provider->changed)
-                    RRDeliverProviderEvent(client, pWin, pSlaveScrPriv->provider);
-            }
-            xorg_list_for_each_entry(iter, &pScreen->offload_slave_list, offload_head) {
-                pSlaveScrPriv = rrGetScrPriv(iter);
-                if (pSlaveScrPriv->provider->changed)
-                    RRDeliverProviderEvent(client, pWin, pSlaveScrPriv->provider);
-            }
-            xorg_list_for_each_entry(iter, &pScreen->unattached_list, unattached_head) {
-                pSlaveScrPriv = rrGetScrPriv(iter);
-                if (pSlaveScrPriv->provider->changed)
-                    RRDeliverProviderEvent(client, pWin, pSlaveScrPriv->provider);
-            }
-        }
-
-        if (pRREvent->mask & RRResourceChangeNotifyMask) {
-            if (pScrPriv->resourcesChanged) {
-                RRDeliverResourceEvent(client, pWin);
-            }
         }
     }
     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
  */
@@ -568,8 +474,6 @@ RRTellChanged(ScreenPtr pScreen)
     rrScrPriv(pScreen);
     rrScrPrivPtr mastersp;
     int i;
-    ScreenPtr iter;
-    rrScrPrivPtr pSlaveScrPriv;
 
     if (pScreen->isGPU) {
         master = pScreen->current_master;
@@ -580,7 +484,7 @@ RRTellChanged(ScreenPtr pScreen)
         mastersp = pScrPriv;
     }
 
-    if (mastersp->changed) {
+    if (pScrPriv->changed) {
         UpdateCurrentTimeIf();
         if (mastersp->configChanged) {
             mastersp->lastConfigTime = currentTime;
@@ -588,33 +492,11 @@ RRTellChanged(ScreenPtr pScreen)
         }
         pScrPriv->changed = FALSE;
         mastersp->changed = FALSE;
-
         WalkTree(master, TellChanged, (pointer) master);
-
-        mastersp->resourcesChanged = FALSE;
-
         for (i = 0; i < pScrPriv->numOutputs; i++)
             pScrPriv->outputs[i]->changed = FALSE;
         for (i = 0; i < pScrPriv->numCrtcs; i++)
             pScrPriv->crtcs[i]->changed = FALSE;
-
-        xorg_list_for_each_entry(iter, &master->output_slave_list, output_head) {
-            pSlaveScrPriv = rrGetScrPriv(iter);
-            pSlaveScrPriv->provider->changed = FALSE;
-            for (i = 0; i < pSlaveScrPriv->numOutputs; i++)
-                pSlaveScrPriv->outputs[i]->changed = FALSE;
-            for (i = 0; i < pSlaveScrPriv->numCrtcs; i++)
-                pSlaveScrPriv->crtcs[i]->changed = FALSE;
-        }
-        xorg_list_for_each_entry(iter, &master->offload_slave_list, offload_head) {
-            pSlaveScrPriv = rrGetScrPriv(iter);
-            pSlaveScrPriv->provider->changed = FALSE;
-        }
-        xorg_list_for_each_entry(iter, &master->unattached_list, unattached_head) {
-            pSlaveScrPriv = rrGetScrPriv(iter);
-            pSlaveScrPriv->provider->changed = FALSE;
-        }
-
         if (mastersp->layoutChanged) {
             pScrPriv->layoutChanged = FALSE;
             RRPointerScreenConfigured(master);
diff --git a/randr/randrstr.h b/randr/randrstr.h
index 15299fd..2517479 100644
--- a/randr/randrstr.h
+++ b/randr/randrstr.h
@@ -164,7 +164,6 @@ struct _rrProvider {
     int nameLength;
     RRPropertyPtr properties;
     Bool pendingProperties;
-    Bool changed;
     struct _rrProvider *offload_sink;
     struct _rrProvider *output_source;
 };
@@ -301,7 +300,6 @@ typedef struct _rrScrPriv {
     Bool changed;               /* some config changed */
     Bool configChanged;         /* configuration changed */
     Bool layoutChanged;         /* screen layout changed */
-    Bool resourcesChanged;      /* screen resources change */
 
     CARD16 minWidth, minHeight;
     CARD16 maxWidth, maxHeight;
@@ -487,14 +485,7 @@ extern _X_EXPORT int
 extern _X_EXPORT void
  RRDeliverScreenEvent(ClientPtr client, WindowPtr pWin, ScreenPtr pScreen);
 
-extern _X_EXPORT void
- RRResourcesChanged(ScreenPtr pScreen);
-
 /* randr.c */
-/* set a screen change on the primary screen */
-extern _X_EXPORT void
-RRSetChanged(ScreenPtr pScreen);
-
 /*
  * Send all pending events
  */
@@ -928,9 +919,6 @@ RRProviderSetCapabilities(RRProviderPtr provider, uint32_t capabilities);
 extern _X_EXPORT Bool
 RRProviderLookup(XID id, RRProviderPtr *provider_p);
 
-extern _X_EXPORT void
-RRDeliverProviderEvent(ClientPtr client, WindowPtr pWin, RRProviderPtr provider);
-
 /* rrproviderproperty.c */
 
 extern _X_EXPORT void
diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c
index 5cdfd05..6e2eca5 100644
--- a/randr/rrcrtc.c
+++ b/randr/rrcrtc.c
@@ -39,7 +39,7 @@ RRCrtcChanged(RRCrtcPtr crtc, Bool layoutChanged)
     if (pScreen) {
         rrScrPriv(pScreen);
 
-        RRSetChanged(pScreen);
+        pScrPriv->changed = TRUE;
         /*
          * Send ConfigureNotify on any layout change
          */
@@ -102,8 +102,6 @@ RRCrtcCreate(ScreenPtr pScreen, void *devPrivate)
     crtc->pScreen = pScreen;
     pScrPriv->crtcs[pScrPriv->numCrtcs++] = crtc;
 
-    RRResourcesChanged(pScreen);
-
     return crtc;
 }
 
@@ -674,8 +672,6 @@ RRCrtcDestroyResource(pointer value, XID pid)
                 break;
             }
         }
-
-        RRResourcesChanged(pScreen);
     }
 
     if (crtc->scanout_pixmap)
diff --git a/randr/rrinfo.c b/randr/rrinfo.c
index fc57bd4..1408d6f 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;
-    RRSetChanged(pScreen);
+    pScrPriv->changed = TRUE;
     pScrPriv->configChanged = TRUE;
 }
 
diff --git a/randr/rroutput.c b/randr/rroutput.c
index 2b0b82f..88781ba 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);
-        RRSetChanged(pScreen);
+        pScrPriv->changed = TRUE;
         if (configChanged)
             pScrPriv->configChanged = TRUE;
     }
@@ -101,9 +101,6 @@ RROutputCreate(ScreenPtr pScreen,
         return NULL;
 
     pScrPriv->outputs[pScrPriv->numOutputs++] = output;
-
-    RRResourcesChanged(pScreen);
-
     return output;
 }
 
@@ -358,8 +355,6 @@ RROutputDestroyResource(pointer value, XID pid)
                 break;
             }
         }
-
-        RRResourcesChanged(pScreen);
     }
     if (output->modes) {
         for (m = 0; m < output->numModes; m++)
diff --git a/randr/rrpointer.c b/randr/rrpointer.c
index eb6b677..ec803e9 100644
--- a/randr/rrpointer.c
+++ b/randr/rrpointer.c
@@ -82,7 +82,7 @@ RRPointerToNearestCrtc(DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y,
         else
             dx = 0;
         if (y < crtc->y)
-            dy = crtc->y - y;
+            dy = crtc->y - x;
         else if (y > crtc->y + scan_height)
             dy = y - (crtc->y + scan_height);
         else
diff --git a/randr/rrprovider.c b/randr/rrprovider.c
index 2334ad2..b321e62 100644
--- a/randr/rrprovider.c
+++ b/randr/rrprovider.c
@@ -304,9 +304,6 @@ ProcRRSetProviderOutputSource(ClientPtr client)
 
     pScrPriv->rrProviderSetOutputSource(pScreen, provider, source_provider);
 
-    provider->changed = TRUE;
-    RRSetChanged(pScreen);
-
     RRTellChanged (pScreen);
 
     return Success;
@@ -336,9 +333,6 @@ ProcRRSetProviderOffloadSink(ClientPtr client)
 
     pScrPriv->rrProviderSetOffloadSink(pScreen, provider, sink_provider);
 
-    provider->changed = TRUE;
-    RRSetChanged(pScreen);
-
     RRTellChanged (pScreen);
 
     return Success;
@@ -363,7 +357,6 @@ RRProviderCreate(ScreenPtr pScreen, const char *name,
     provider->nameLength = nameLength;
     memcpy(provider->name, name, nameLength);
     provider->name[nameLength] = '\0';
-    provider->changed = FALSE;
 
     if (!AddResource (provider->id, RRProviderType, (pointer) provider))
         return NULL;
@@ -423,21 +416,3 @@ RRProviderLookup(XID id, RRProviderPtr *provider_p)
         return TRUE;
     return FALSE;
 }
-
-void
-RRDeliverProviderEvent(ClientPtr client, WindowPtr pWin, RRProviderPtr provider)
-{
-    ScreenPtr pScreen = pWin->drawable.pScreen;
-
-    rrScrPriv(pScreen);
-
-    xRRProviderChangeNotifyEvent pe = {
-        .type = RRNotify + RREventBase,
-        .subCode = RRNotify_ProviderChange,
-        .timestamp = pScrPriv->lastSetTime.milliseconds,
-        .window = pWin->drawable.id,
-        .provider = provider->id
-    };
-
-    WriteEventsToClient(client, 1, (xEvent *) &pe);
-}
diff --git a/randr/rrscreen.c b/randr/rrscreen.c
index 36179ae..39340cc 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;
-    RRSetChanged(pScreen);
+    pScrPriv->changed = TRUE;
 /*    pScrPriv->sizeChanged = TRUE; */
 
     RRTellChanged(pScreen);


More information about the Xquartz-changes mailing list