Adam Tkac 5009736
diff -up tightvnc-1.5.0-20081015svn3022/unix/xserver/hw/vnc/XserverDesktop.cc.bounds tightvnc-1.5.0-20081015svn3022/unix/xserver/hw/vnc/XserverDesktop.cc
Adam Tkac 5009736
--- tightvnc-1.5.0-20081015svn3022/unix/xserver/hw/vnc/XserverDesktop.cc.bounds	2008-10-15 15:23:24.000000000 +0200
Adam Tkac 5009736
+++ tightvnc-1.5.0-20081015svn3022/unix/xserver/hw/vnc/XserverDesktop.cc	2008-10-23 12:46:31.000000000 +0200
Adam Tkac 5009736
@@ -500,32 +500,36 @@ void XserverDesktop::add_changed(RegionP
Adam Tkac 5009736
 {
Adam Tkac 5009736
   if (ignoreHooks_) return;
Adam Tkac 5009736
   if (grabbing) return;
Adam Tkac 5009736
+
Adam Tkac 5009736
+  BoxRec screenbox;
Adam Tkac 5009736
+  RegionPtr newreg = REGION_CREATE(pScreen, 0, 0);
Adam Tkac 5009736
+
Adam Tkac 5009736
+  screenbox.x1 = screenbox.y1 = 0;
Adam Tkac 5009736
+  screenbox.x2 = pScreen->width;
Adam Tkac 5009736
+  screenbox.y2 = pScreen->height;
Adam Tkac 5009736
+
Adam Tkac 5009736
+  RegionPtr screenreg = REGION_CREATE(pScreen, &screenbox, 0);
Adam Tkac 5009736
+  REGION_INTERSECT(pScreen, newreg, reg, screenreg);
Adam Tkac 5009736
+  REGION_DESTROY (pScreen, screenreg);
Adam Tkac 5009736
+
Adam Tkac 5009736
   try {
Adam Tkac 5009736
     rfb::Region rfbReg;
Adam Tkac 5009736
-    rfbReg.setExtentsAndOrderedRects((ShortRect*)REGION_EXTENTS(pScreen, reg),
Adam Tkac 5009736
-                                     REGION_NUM_RECTS(reg),
Adam Tkac 5009736
-                                     (ShortRect*)REGION_RECTS(reg));
Adam Tkac 5009736
+    rfbReg.setExtentsAndOrderedRects((ShortRect*)REGION_EXTENTS(pScreen, newreg),
Adam Tkac 5009736
+                                     REGION_NUM_RECTS(newreg),
Adam Tkac 5009736
+                                     (ShortRect*)REGION_RECTS(newreg));
Adam Tkac 5009736
     server->add_changed(rfbReg);
Adam Tkac 5009736
     deferUpdate();
Adam Tkac 5009736
   } catch (rdr::Exception& e) {
Adam Tkac 5009736
     vlog.error("XserverDesktop::add_changed: %s",e.str());
Adam Tkac 5009736
   }
Adam Tkac 5009736
+  REGION_DESTROY (pScreen, newreg);
Adam Tkac 5009736
 }
Adam Tkac 5009736
 
Adam Tkac 5009736
 void XserverDesktop::add_copied(RegionPtr dst, int dx, int dy)
Adam Tkac 5009736
 {
Adam Tkac 5009736
-  if (ignoreHooks_) return;
Adam Tkac 5009736
-  if (grabbing) return;
Adam Tkac 5009736
-  try {
Adam Tkac 5009736
-    rfb::Region rfbReg;
Adam Tkac 5009736
-    rfbReg.setExtentsAndOrderedRects((ShortRect*)REGION_EXTENTS(pScreen, dst),
Adam Tkac 5009736
-                                     REGION_NUM_RECTS(dst),
Adam Tkac 5009736
-                                     (ShortRect*)REGION_RECTS(dst));
Adam Tkac 5009736
-    server->add_copied(rfbReg, rfb::Point(dx, dy));
Adam Tkac 5009736
-    deferUpdate();
Adam Tkac 5009736
-  } catch (rdr::Exception& e) {
Adam Tkac 5009736
-    vlog.error("XserverDesktop::add_copied: %s",e.str());
Adam Tkac 5009736
-  }
Adam Tkac 5009736
+  add_changed (dst);
Adam Tkac 5009736
+  REGION_TRANSLATE (pScreen, dst, -dx, -dy);
Adam Tkac 5009736
+  add_changed (dst);
Adam Tkac 5009736
 }
Adam Tkac 5009736
 
Adam Tkac 5009736
 void XserverDesktop::positionCursor()