diff options
author | Michal Srb <msrb@suse.com> | 2013-10-30 13:33:51 +0200 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2013-10-30 08:09:31 -0700 |
commit | 85ae44f07fa21b4a48d95d736dc8135bd4f751d0 (patch) | |
tree | 81b8cee24734f25d7004091fe8f6a3a7c5263ca8 | |
parent | a9ca93dcf9a711b3d60fbad31cbd44e0c82b6f42 (diff) |
randr: deliver Output and Crtc events of attached output providers.
Consider all attached output providers when looking for changed outputs and
crtcs.
Reviewed-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Michal Srb <msrb@suse.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r-- | randr/randr.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/randr/randr.c b/randr/randr.c index 9cec6f653..3c5142771 100644 --- a/randr/randr.c +++ b/randr/randr.c @@ -478,6 +478,16 @@ TellChanged(WindowPtr pWin, pointer value) if (crtc->changed) RRDeliverCrtcEvent(client, pWin, crtc); } + + xorg_list_for_each_entry(iter, &pScreen->output_slave_list, output_head) { + pSlaveScrPriv = rrGetScrPriv(iter); + for (i = 0; i < pSlaveScrPriv->numCrtcs; i++) { + RRCrtcPtr crtc = pSlaveScrPriv->crtcs[i]; + + if (crtc->changed) + RRDeliverCrtcEvent(client, pWin, crtc); + } + } } if (pRREvent->mask & RROutputChangeNotifyMask) { @@ -487,6 +497,16 @@ TellChanged(WindowPtr pWin, pointer value) if (output->changed) RRDeliverOutputEvent(client, pWin, output); } + + xorg_list_for_each_entry(iter, &pScreen->output_slave_list, output_head) { + pSlaveScrPriv = rrGetScrPriv(iter); + for (i = 0; i < pSlaveScrPriv->numOutputs; i++) { + RROutputPtr output = pSlaveScrPriv->outputs[i]; + + if (output->changed) + RRDeliverOutputEvent(client, pWin, output); + } + } } if (pRREvent->mask & RRProviderChangeNotifyMask) { @@ -581,6 +601,10 @@ RRTellChanged(ScreenPtr pScreen) xorg_list_for_each_entry(iter, &master->output_slave_list, output_head) { pSlaveScrPriv = rrGetScrPriv(iter); pSlaveScrPriv->provider->changed = FALSE; + for (i = 0; i < pSlaveScrPriv->numOutputs; i++) + pSlaveScrPriv->outputs[i]->changed = FALSE; + for (i = 0; i < pSlaveScrPriv->numCrtcs; i++) + pSlaveScrPriv->crtcs[i]->changed = FALSE; } xorg_list_for_each_entry(iter, &master->offload_slave_list, offload_head) { pSlaveScrPriv = rrGetScrPriv(iter); |