summaryrefslogtreecommitdiff
path: root/randr/rrcrtc.c
diff options
context:
space:
mode:
authorKeith Packard <keithp@guitar.keithp.com>2007-03-23 01:03:40 -0700
committerKeith Packard <keithp@guitar.keithp.com>2007-03-23 01:30:32 -0700
commit86d76390eb182f271f5fa5dc19205e97a867f7e7 (patch)
tree3ab7ff2aac903a33550a2b65662dbb09df18b588 /randr/rrcrtc.c
parent510eaa346e68fd82c852c7b41fb0e2c5be12da78 (diff)
Make sure RandR events are delivered from RRCrtcSet.
Some paths were skipping the event delivery stage. (cherry picked from commit 9ca7ba5d6012295a77ed773c656e786440da973d)
Diffstat (limited to 'randr/rrcrtc.c')
-rw-r--r--randr/rrcrtc.c93
1 files changed, 50 insertions, 43 deletions
diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c
index ecf5bb251..7131dfb3a 100644
--- a/randr/rrcrtc.c
+++ b/randr/rrcrtc.c
@@ -262,6 +262,8 @@ RRCrtcSet (RRCrtcPtr crtc,
RROutputPtr *outputs)
{
ScreenPtr pScreen = crtc->pScreen;
+ Bool ret = FALSE;
+ rrScrPriv(pScreen);
/* See if nothing changed */
if (crtc->mode == mode &&
@@ -271,61 +273,64 @@ RRCrtcSet (RRCrtcPtr crtc,
crtc->numOutputs == numOutputs &&
!memcmp (crtc->outputs, outputs, numOutputs * sizeof (RROutputPtr)))
{
- return TRUE;
+ ret = TRUE;
}
- if (pScreen)
+ else
{
#if RANDR_12_INTERFACE
- rrScrPriv(pScreen);
if (pScrPriv->rrCrtcSet)
{
- return (*pScrPriv->rrCrtcSet) (pScreen, crtc, mode, x, y,
- rotation, numOutputs, outputs);
+ ret = (*pScrPriv->rrCrtcSet) (pScreen, crtc, mode, x, y,
+ rotation, numOutputs, outputs);
}
+ else
#endif
-#if RANDR_10_INTERFACE
- if (pScrPriv->rrSetConfig)
{
- RRScreenSize size;
- RRScreenRate rate;
- Bool ret;
-
- if (!mode)
- {
- RRCrtcNotify (crtc, NULL, x, y, rotation, 0, NULL);
- return TRUE;
- }
-
- size.width = mode->mode.width;
- size.height = mode->mode.height;
- if (outputs[0]->mmWidth && outputs[0]->mmHeight)
- {
- size.mmWidth = outputs[0]->mmWidth;
- size.mmHeight = outputs[0]->mmHeight;
- }
- else
- {
- size.mmWidth = pScreen->mmWidth;
- size.mmHeight = pScreen->mmHeight;
- }
- size.nRates = 1;
- rate.rate = RRVerticalRefresh (&mode->mode);
- size.pRates = &rate;
- ret = (*pScrPriv->rrSetConfig) (pScreen, rotation, rate.rate, &size);
- /*
- * Old 1.0 interface tied screen size to mode size
- */
- if (ret)
+#if RANDR_10_INTERFACE
+ if (pScrPriv->rrSetConfig)
{
- RRCrtcNotify (crtc, mode, x, y, rotation, 1, outputs);
- RRScreenSizeNotify (pScreen);
+ RRScreenSize size;
+ RRScreenRate rate;
+
+ if (!mode)
+ {
+ RRCrtcNotify (crtc, NULL, x, y, rotation, 0, NULL);
+ ret = TRUE;
+ }
+ else
+ {
+ size.width = mode->mode.width;
+ size.height = mode->mode.height;
+ if (outputs[0]->mmWidth && outputs[0]->mmHeight)
+ {
+ size.mmWidth = outputs[0]->mmWidth;
+ size.mmHeight = outputs[0]->mmHeight;
+ }
+ else
+ {
+ size.mmWidth = pScreen->mmWidth;
+ size.mmHeight = pScreen->mmHeight;
+ }
+ size.nRates = 1;
+ rate.rate = RRVerticalRefresh (&mode->mode);
+ size.pRates = &rate;
+ ret = (*pScrPriv->rrSetConfig) (pScreen, rotation, rate.rate, &size);
+ /*
+ * Old 1.0 interface tied screen size to mode size
+ */
+ if (ret)
+ {
+ RRCrtcNotify (crtc, mode, x, y, rotation, 1, outputs);
+ RRScreenSizeNotify (pScreen);
+ }
+ }
}
- return ret;
- }
#endif
- RRTellChanged (pScreen);
+ }
+ if (ret)
+ RRTellChanged (pScreen);
}
- return FALSE;
+ return ret;
}
/*
@@ -718,6 +723,7 @@ ProcRRSetCrtcConfig (ClientPtr client)
goto sendReply;
}
+#if 0
/*
* if the client's config timestamp is not the same as the last config
* timestamp, then the config information isn't up-to-date and
@@ -728,6 +734,7 @@ ProcRRSetCrtcConfig (ClientPtr client)
rep.status = RRSetConfigInvalidConfigTime;
goto sendReply;
}
+#endif
/*
* Validate requested rotation