Sending updates for "video area".

git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@2331 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/common/rfb/VNCSConnectionST.cxx b/common/rfb/VNCSConnectionST.cxx
index 5237c1b..d6541f9 100644
--- a/common/rfb/VNCSConnectionST.cxx
+++ b/common/rfb/VNCSConnectionST.cxx
@@ -646,9 +646,7 @@
     // complicated as compared to the original VNC4.
     writer()->setupCurrentEncoder();
     int nRects = (ui.copied.numRects() +
-                  /* FIXME: Sending video area is not yet enabled.
                   (ui.video_area.is_empty() ? 0 : 1) +
-                  */
                   (drawRenderedCursor ? 1 : 0));
     std::vector<Rect> rects;
     std::vector<Rect>::const_iterator i;
@@ -659,6 +657,8 @@
     }
     
     writer()->writeFramebufferUpdateStart(nRects);
+    if (!ui.video_area.is_empty())
+      writer()->writeVideoRect(server->getPixelBuffer(), ui.video_area);
     Region updatedRegion;
     writer()->writeRects(ui, &image_getter, &updatedRegion);
     updates.subtract(updatedRegion);
diff --git a/common/rfb/VNCServer.h b/common/rfb/VNCServer.h
index df0fb0e..1e7acc6 100644
--- a/common/rfb/VNCServer.h
+++ b/common/rfb/VNCServer.h
@@ -35,6 +35,9 @@
     // protocol messages being sent, or clients being disconnected.
     virtual void setPixelBuffer(PixelBuffer* pb) = 0;
 
+    // getPixelBuffer() returns a pointer to the PixelBuffer object.
+    virtual PixelBuffer* getPixelBuffer() const = 0;
+
     // setColourMapEntries() tells the server that some entries in the colour
     // map have changed.  The server will retrieve them via the PixelBuffer's
     // ColourMap object.  This may result in protocol messages being sent.
diff --git a/common/rfb/VNCServerST.h b/common/rfb/VNCServerST.h
index 37b75ea..fad8cb9 100644
--- a/common/rfb/VNCServerST.h
+++ b/common/rfb/VNCServerST.h
@@ -79,6 +79,7 @@
     // Methods overridden from VNCServer
 
     virtual void setPixelBuffer(PixelBuffer* pb);
+    virtual PixelBuffer* getPixelBuffer() const { return pb; }
     virtual void setColourMapEntries(int firstColour=0, int nColours=0);
     virtual void serverCutText(const char* str, int len);
     virtual void add_changed(const Region &region);