Implement server side support for SetDesktopSize.

It has some warts, but should be feature complete. Most of the magic happens
in the desktop class though.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@3713 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/common/rfb/VNCServer.h b/common/rfb/VNCServer.h
index 1e7acc6..850dbd3 100644
--- a/common/rfb/VNCServer.h
+++ b/common/rfb/VNCServer.h
@@ -24,17 +24,24 @@
 
 #include <rfb/UpdateTracker.h>
 #include <rfb/SSecurity.h>
+#include <rfb/ScreenSet.h>
 
 namespace rfb {
 
   class VNCServer : public UpdateTracker {
   public:
 
-    // setPixelBuffer() tells the server to use the given pixel buffer.  If
-    // this differs in size from the previous pixel buffer, this may result in
-    // protocol messages being sent, or clients being disconnected.
+    // setPixelBuffer() tells the server to use the given pixel buffer (and
+    // optionally a modified screen layout).  If this differs in size from
+    // the previous pixel buffer, this may result in protocol messages being
+    // sent, or clients being disconnected.
+    virtual void setPixelBuffer(PixelBuffer* pb, const ScreenSet& layout) = 0;
     virtual void setPixelBuffer(PixelBuffer* pb) = 0;
 
+    // setScreenLayout() modifies the current screen layout without changing
+    // the pixelbuffer. Clients will be notified of the new layout.
+    virtual void setScreenLayout(const ScreenSet& layout) = 0;
+
     // getPixelBuffer() returns a pointer to the PixelBuffer object.
     virtual PixelBuffer* getPixelBuffer() const = 0;