When setting output state, leave output unchanged when setting to current.

This commit is contained in:
Keith Packard 2006-09-20 13:14:53 -07:00
parent d08718d8fd
commit 9f870e0aa1
2 changed files with 44 additions and 0 deletions

View File

@ -77,6 +77,7 @@ struct _rrMode {
int refcnt; int refcnt;
xRRModeInfo mode; xRRModeInfo mode;
char *name; char *name;
void *devPrivate;
}; };
struct _rrCrtc { struct _rrCrtc {

View File

@ -88,7 +88,16 @@ RROutputSetClones (RROutputPtr output,
int numClones) int numClones)
{ {
RROutputPtr *newClones; RROutputPtr *newClones;
int i;
if (numClones == output->numClones)
{
for (i = 0; i < numClones; i++)
if (output->clones[i] != clones[i])
break;
if (i == numClones)
return TRUE;
}
if (numClones) if (numClones)
{ {
newClones = xalloc (numClones * sizeof (RROutputPtr)); newClones = xalloc (numClones * sizeof (RROutputPtr));
@ -112,6 +121,20 @@ RROutputSetModes (RROutputPtr output,
int numModes) int numModes)
{ {
RRModePtr *newModes; RRModePtr *newModes;
int i;
if (numModes == output->numModes)
{
for (i = 0; i < numModes; i++)
if (output->modes[i] != modes[i])
break;
if (i == numModes)
{
for (i = 0; i < numModes; i++)
RRModeDestroy (modes[i]);
return TRUE;
}
}
if (numModes) if (numModes)
{ {
@ -122,7 +145,11 @@ RROutputSetModes (RROutputPtr output,
else else
newModes = NULL; newModes = NULL;
if (output->modes) if (output->modes)
{
for (i = 0; i < output->numModes; i++)
RRModeDestroy (output->modes[i]);
xfree (output->modes); xfree (output->modes);
}
memcpy (newModes, modes, numModes * sizeof (RRModePtr)); memcpy (newModes, modes, numModes * sizeof (RRModePtr));
output->modes = newModes; output->modes = newModes;
output->numModes = numModes; output->numModes = numModes;
@ -136,7 +163,16 @@ RROutputSetCrtcs (RROutputPtr output,
int numCrtcs) int numCrtcs)
{ {
RRCrtcPtr *newCrtcs; RRCrtcPtr *newCrtcs;
int i;
if (numCrtcs == output->numCrtcs)
{
for (i = 0; i < numCrtcs; i++)
if (output->crtcs[i] != crtcs[i])
break;
if (i == numCrtcs)
return TRUE;
}
if (numCrtcs) if (numCrtcs)
{ {
newCrtcs = xalloc (numCrtcs * sizeof (RRCrtcPtr)); newCrtcs = xalloc (numCrtcs * sizeof (RRCrtcPtr));
@ -157,6 +193,8 @@ RROutputSetCrtcs (RROutputPtr output,
void void
RROutputSetCrtc (RROutputPtr output, RRCrtcPtr crtc) RROutputSetCrtc (RROutputPtr output, RRCrtcPtr crtc)
{ {
if (output->crtc == crtc)
return TRUE;
output->crtc = crtc; output->crtc = crtc;
output->changed = TRUE; output->changed = TRUE;
} }
@ -165,6 +203,8 @@ Bool
RROutputSetConnection (RROutputPtr output, RROutputSetConnection (RROutputPtr output,
CARD8 connection) CARD8 connection)
{ {
if (output->connection == connection)
return TRUE;
output->connection = connection; output->connection = connection;
output->changed = TRUE; output->changed = TRUE;
return TRUE; return TRUE;
@ -174,6 +214,9 @@ Bool
RROutputSetSubpixelOrder (RROutputPtr output, RROutputSetSubpixelOrder (RROutputPtr output,
int subpixelOrder) int subpixelOrder)
{ {
if (output->subpixelOrder == subpixelOrder)
return TRUE;
output->subpixelOrder = subpixelOrder; output->subpixelOrder = subpixelOrder;
output->changed = TRUE; output->changed = TRUE;
return TRUE; return TRUE;