]> source.dussan.org Git - tigervnc.git/commitdiff
Properly parse the SetDesktopSize message.
authorPierre Ossman <ossman@cendio.se>
Sat, 21 Mar 2009 21:16:14 +0000 (21:16 +0000)
committerPierre Ossman <ossman@cendio.se>
Sat, 21 Mar 2009 21:16:14 +0000 (21:16 +0000)
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@3708 3789f03b-4d11-0410-bbf8-ca57d06f2519

common/rfb/SMsgHandler.cxx
common/rfb/SMsgHandler.h
common/rfb/SMsgReaderV3.cxx
common/rfb/VNCSConnectionST.cxx
common/rfb/VNCSConnectionST.h

index 0c74f0f5cbb386d0c1dd0d1cccb041680025d5ed..8124c50d8214ad16af3c57a0fb44379133e0e298 100644 (file)
@@ -1,4 +1,5 @@
 /* Copyright (C) 2002-2005 RealVNC Ltd.  All Rights Reserved.
+ * Copyright 2009 Pierre Ossman for Cendio AB
  * 
  * This is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -17,6 +18,7 @@
  */
 #include <rfb/Exception.h>
 #include <rfb/SMsgHandler.h>
+#include <rfb/ScreenSet.h>
 
 using namespace rfb;
 
@@ -47,9 +49,11 @@ void SMsgHandler::supportsLocalCursor()
 {
 }
 
-void SMsgHandler::setDesktopSize(int fb_width, int fb_height)
+void SMsgHandler::setDesktopSize(int fb_width, int fb_height,
+                                 const ScreenSet& layout)
 {
   cp.width = fb_width;
   cp.height = fb_height;
+  cp.screenLayout = layout;
 }
 
index 78cff2f76d3c321462080c631f7ed558674e48f7..f212edfd3bdad7e4a0fd991da3919d3ba4007ea2 100644 (file)
@@ -1,4 +1,5 @@
 /* Copyright (C) 2002-2005 RealVNC Ltd.  All Rights Reserved.
+ * Copyright 2009 Pierre Ossman for Cendio AB
  * 
  * This is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -26,6 +27,7 @@
 #include <rfb/PixelFormat.h>
 #include <rfb/ConnParams.h>
 #include <rfb/InputHandler.h>
+#include <rfb/ScreenSet.h>
 
 namespace rdr { class InStream; }
 
@@ -46,7 +48,8 @@ namespace rfb {
     virtual void setPixelFormat(const PixelFormat& pf);
     virtual void setEncodings(int nEncodings, rdr::U32* encodings);
     virtual void framebufferUpdateRequest(const Rect& r, bool incremental) = 0;
-    virtual void setDesktopSize(int fb_width, int fb_height) = 0;
+    virtual void setDesktopSize(int fb_width, int fb_height,
+                                const ScreenSet& layout) = 0;
 
     // InputHandler interface
     // The InputHandler methods will be called for the corresponding messages.
index 1408fe66b2bec6231bace262e7f23ba1151e5792..168e6aab32e258c74288749342b7271f28cb2479 100644 (file)
@@ -24,6 +24,7 @@
 #include <rdr/InStream.h>
 #include <rfb/SMsgReaderV3.h>
 #include <rfb/SMsgHandler.h>
+#include <rfb/ScreenSet.h>
 
 using namespace rfb;
 
@@ -64,6 +65,9 @@ void SMsgReaderV3::readSetDesktopSize()
 {
   int width, height;
   int screens, i;
+  rdr::U32 id, flags;
+  int sx, sy, sw, sh;
+  ScreenSet layout;
 
   is->skip(1);
 
@@ -73,9 +77,17 @@ void SMsgReaderV3::readSetDesktopSize()
   screens = is->readU8();
   is->skip(1);
 
-  // XXX: We don't support this command properly yet
-  is->skip(screens * 16);
+  for (i = 0;i < screens;i++) {
+    id = is->readU32();
+    sx = is->readU16();
+    sy = is->readU16();
+    sw = is->readU16();
+    sh = is->readU16();
+    flags = is->readU32();
 
-  handler->setDesktopSize(width, height);
+    layout.add_screen(Screen(id, sx, sy, sw, sh, flags));
+  }
+
+  handler->setDesktopSize(width, height, layout);
 }
 
index 10050e386059bfb4ab10c7a40306f6813dba3c85..29c62746095664c8d20d546783353ef5cf751ac0 100644 (file)
@@ -509,7 +509,8 @@ void VNCSConnectionST::framebufferUpdateRequest(const Rect& r,bool incremental)
   }
 }
 
-void VNCSConnectionST::setDesktopSize(int fb_width, int fb_height)
+void VNCSConnectionST::setDesktopSize(int fb_width, int fb_height,
+                                      const ScreenSet& layout)
 {
   vlog.info("Rejecting client request to change desktop size");
   writer()->writeExtendedDesktopSize(resultProhibited);
index d5c7a36ba722142ed839f4029259cc5751ffbb26..c1750b92a3b3afade89aa477029b5e4fe3b77502 100644 (file)
@@ -125,7 +125,8 @@ namespace rfb {
     virtual void keyEvent(rdr::U32 key, bool down);
     virtual void clientCutText(const char* str, int len);
     virtual void framebufferUpdateRequest(const Rect& r, bool incremental);
-    virtual void setDesktopSize(int fb_width, int fb_height);
+    virtual void setDesktopSize(int fb_width, int fb_height,
+                                const ScreenSet& layout);
     virtual void setInitialColourMap();
     virtual void supportsLocalCursor();