randr: Avoid re-querying the configuration on everything but GetScreenResources.
The new path should only re-query on the other requests when we haven't gathered the information from the DDX yet (such as with a non-RandR 1.2 DDX). Bug #19037.
This commit is contained in:
parent
c1f2be1f3f
commit
317f2b4a9f
|
@ -469,7 +469,7 @@ RRTellChanged (ScreenPtr pScreen);
|
|||
* Poll the driver for changed information
|
||||
*/
|
||||
extern _X_EXPORT Bool
|
||||
RRGetInfo (ScreenPtr pScreen);
|
||||
RRGetInfo (ScreenPtr pScreen, Bool force_query);
|
||||
|
||||
extern _X_EXPORT Bool RRInit (void);
|
||||
|
||||
|
|
|
@ -178,12 +178,20 @@ RRScanOldConfig (ScreenPtr pScreen, Rotation rotations)
|
|||
* Poll the driver for changed information
|
||||
*/
|
||||
Bool
|
||||
RRGetInfo (ScreenPtr pScreen)
|
||||
RRGetInfo (ScreenPtr pScreen, Bool force_query)
|
||||
{
|
||||
rrScrPriv (pScreen);
|
||||
Rotation rotations;
|
||||
int i;
|
||||
|
||||
/* Return immediately if we don't need to re-query and we already have the
|
||||
* information.
|
||||
*/
|
||||
if (!force_query) {
|
||||
if (pScrPriv->numCrtcs != 0 || pScrPriv->numOutputs != 0)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
for (i = 0; i < pScrPriv->numOutputs; i++)
|
||||
pScrPriv->outputs[i]->changed = FALSE;
|
||||
for (i = 0; i < pScrPriv->numCrtcs; i++)
|
||||
|
|
|
@ -224,7 +224,7 @@ ProcRRGetScreenSizeRange (ClientPtr client)
|
|||
|
||||
if (pScrPriv)
|
||||
{
|
||||
if (!RRGetInfo (pScreen))
|
||||
if (!RRGetInfo (pScreen, FALSE))
|
||||
return BadAlloc;
|
||||
rep.minWidth = pScrPriv->minWidth;
|
||||
rep.minHeight = pScrPriv->minHeight;
|
||||
|
@ -340,7 +340,7 @@ rrGetScreenResources(ClientPtr client, Bool query)
|
|||
rep.pad = 0;
|
||||
|
||||
if (query && pScrPriv)
|
||||
if (!RRGetInfo (pScreen))
|
||||
if (!RRGetInfo (pScreen, query))
|
||||
return BadAlloc;
|
||||
|
||||
if (!pScrPriv)
|
||||
|
@ -612,7 +612,7 @@ ProcRRGetScreenInfo (ClientPtr client)
|
|||
rep.pad = 0;
|
||||
|
||||
if (pScrPriv)
|
||||
if (!RRGetInfo (pScreen))
|
||||
if (!RRGetInfo (pScreen, FALSE))
|
||||
return BadAlloc;
|
||||
|
||||
output = RRFirstOutput (pScreen);
|
||||
|
@ -793,7 +793,7 @@ ProcRRSetScreenConfig (ClientPtr client)
|
|||
rep.status = RRSetConfigFailed;
|
||||
goto sendReply;
|
||||
}
|
||||
if (!RRGetInfo (pScreen))
|
||||
if (!RRGetInfo (pScreen, FALSE))
|
||||
return BadAlloc;
|
||||
|
||||
output = RRFirstOutput (pScreen);
|
||||
|
|
|
@ -307,12 +307,8 @@ ProcRRXineramaQueryScreens(ClientPtr client)
|
|||
REQUEST_SIZE_MATCH(xXineramaQueryScreensReq);
|
||||
|
||||
if (RRXineramaScreenActive (pScreen))
|
||||
{
|
||||
rrScrPriv(pScreen);
|
||||
if (pScrPriv->numCrtcs == 0 || pScrPriv->numOutputs == 0)
|
||||
RRGetInfo (pScreen);
|
||||
}
|
||||
|
||||
RRGetInfo (pScreen, FALSE);
|
||||
|
||||
rep.type = X_Reply;
|
||||
rep.sequenceNumber = client->sequence;
|
||||
rep.number = RRXineramaScreenCount (pScreen);
|
||||
|
|
Loading…
Reference in New Issue
Block a user