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/SMsgWriter.h b/common/rfb/SMsgWriter.h
index 3c6da95..5df7270 100644
--- a/common/rfb/SMsgWriter.h
+++ b/common/rfb/SMsgWriter.h
@@ -27,6 +27,7 @@
 #include <rfb/screenTypes.h>
 #include <rfb/Encoder.h>
 #include <rfb/PixelBuffer.h>
+#include <rfb/ScreenSet.h>
 
 namespace rdr { class OutStream; }
 
@@ -75,8 +76,13 @@
     // writeSetDesktopSize() on a V3 writer won't actually write immediately,
     // but will write the relevant pseudo-rectangle as part of the next update.
     virtual bool writeSetDesktopSize()=0;
-    // Same thing for the extended version
-    virtual bool writeExtendedDesktopSize(rdr::U16 error = resultUnsolicited)=0;
+    // Same thing for the extended version. The first version queues up a
+    // generic update of the current server state, but the second queues a
+    // specific message.
+    virtual bool writeExtendedDesktopSize()=0;
+    virtual bool writeExtendedDesktopSize(rdr::U16 reason, rdr::U16 result,
+                                          int fb_width, int fb_height,
+                                          const ScreenSet& layout)=0;
 
     virtual bool writeSetDesktopName()=0;