diff options
-rw-r--r-- | unix/xserver/hw/vnc/vncHooks.cc | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/unix/xserver/hw/vnc/vncHooks.cc b/unix/xserver/hw/vnc/vncHooks.cc index 6364ab3e..6d903a46 100644 --- a/unix/xserver/hw/vnc/vncHooks.cc +++ b/unix/xserver/hw/vnc/vncHooks.cc @@ -554,23 +554,27 @@ void vncHooksComposite(CARD8 op, PicturePtr pSrc, PicturePtr pMask, { ScreenPtr pScreen = pDst->pDrawable->pScreen; vncHooksScreenPtr vncHooksScreen = vncHooksScreenPrivate(pScreen); - BoxRec box; PictureScreenPtr ps = GetPictureScreen(pScreen); - rfb::Rect rect1, rect2; - - rect1.setXYWH(pDst->pDrawable->x + xDst, - pDst->pDrawable->y + yDst, - width, - height); - - rect2 = rect1.intersect(vncHooksScreen->desktop->getRect()); - if (!rect2.is_empty()) { - box.x1 = rect2.tl.x; - box.y1 = rect2.tl.y; - box.x2 = rect2.br.x; - box.y2 = rect2.br.y; - RegionHelper changed(pScreen, &box, 0); - vncHooksScreen->desktop->add_changed(changed.reg); + + if (pDst->pDrawable->type == DRAWABLE_WINDOW && + ((WindowPtr) pDst->pDrawable)->viewable) { + BoxRec box; + rfb::Rect rect1, rect2; + + rect1.setXYWH(pDst->pDrawable->x + xDst, + pDst->pDrawable->y + yDst, + width, + height); + + rect2 = rect1.intersect(vncHooksScreen->desktop->getRect()); + if (!rect2.is_empty()) { + box.x1 = rect2.tl.x; + box.y1 = rect2.tl.y; + box.x2 = rect2.br.x; + box.y2 = rect2.br.y; + RegionHelper changed(pScreen, &box, 0); + vncHooksScreen->desktop->add_changed(changed.reg); + } } ps->Composite = vncHooksScreen->Composite; |