mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2026-02-03 16:00:28 +01:00
Make sure RandR events are delivered from RRCrtcSet.
Some paths were skipping the event delivery stage.
This commit is contained in:
parent
492c768065
commit
9ca7ba5d60
1 changed files with 50 additions and 43 deletions
|
|
@ -271,6 +271,8 @@ RRCrtcSet (RRCrtcPtr crtc,
|
|||
RROutputPtr *outputs)
|
||||
{
|
||||
ScreenPtr pScreen = crtc->pScreen;
|
||||
Bool ret = FALSE;
|
||||
rrScrPriv(pScreen);
|
||||
|
||||
/* See if nothing changed */
|
||||
if (crtc->mode == mode &&
|
||||
|
|
@ -280,61 +282,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;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -716,6 +721,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
|
||||
|
|
@ -726,6 +732,7 @@ ProcRRSetCrtcConfig (ClientPtr client)
|
|||
rep.status = RRSetConfigInvalidConfigTime;
|
||||
goto sendReply;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Validate requested rotation
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue