summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--unix/xserver/hw/vnc/vncHooks.cc36
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;