Make sure RandR events are delivered from RRCrtcSet.
Some paths were skipping the event delivery stage. (cherry picked from commit 9ca7ba5d6012295a77ed773c656e786440da973d)
This commit is contained in:
parent
510eaa346e
commit
86d76390eb
|
@ -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 RANDR_10_INTERFACE
|
||||
if (pScrPriv->rrSetConfig)
|
||||
{
|
||||
RRScreenSize size;
|
||||
RRScreenRate rate;
|
||||
|
||||
if (!mode)
|
||||
{
|
||||
RRCrtcNotify (crtc, NULL, x, y, rotation, 0, NULL);
|
||||
return TRUE;
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
|
|
Loading…
Reference in New Issue