Avoid catching composite (RENDER) operations that only affect off-screen
things.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4720 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/unix/xserver/hw/vnc/vncHooks.cc b/unix/xserver/hw/vnc/vncHooks.cc
index 6364ab3..6d903a4 100644
--- a/unix/xserver/hw/vnc/vncHooks.cc
+++ b/unix/xserver/hw/vnc/vncHooks.cc
@@ -554,23 +554,27 @@
 {
   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;