diff options
author | Keith Packard <keithp@guitar.keithp.com> | 2007-03-23 01:03:40 -0700 |
---|---|---|
committer | Keith Packard <keithp@guitar.keithp.com> | 2007-03-23 01:03:40 -0700 |
commit | 9ca7ba5d6012295a77ed773c656e786440da973d (patch) | |
tree | edc01274326efd4069c7420a8629929b2e9f2ce9 | |
parent | 492c768065f49306a2194a88edf96b85de0ff4ff (diff) |
Make sure RandR events are delivered from RRCrtcSet.
Some paths were skipping the event delivery stage.
-rw-r--r-- | randr/rrcrtc.c | 93 |
1 files changed, 50 insertions, 43 deletions
diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c index 1b3c230f5..da8825346 100644 --- a/randr/rrcrtc.c +++ b/randr/rrcrtc.c @@ -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 (!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; } /* @@ -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 |