Basic book keeping of screen layout on server.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@3706 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/common/rfb/ScreenSet.h b/common/rfb/ScreenSet.h
index 0783871..55abb50 100644
--- a/common/rfb/ScreenSet.h
+++ b/common/rfb/ScreenSet.h
@@ -48,7 +48,26 @@
 
   struct ScreenSet {
     ScreenSet(void) {};
+
+    typedef std::list<Screen>::iterator iterator;
+    typedef std::list<Screen>::const_iterator const_iterator;
+
+    inline iterator begin(void) { return screens.begin(); };
+    inline const_iterator begin(void) const { return screens.begin(); };
+    inline iterator end(void) { return screens.end(); };
+    inline const_iterator end(void) const { return screens.end(); };
+
+    inline int num_screens(void) const { return screens.size(); };
+
     inline void add_screen(const Screen screen) { screens.push_back(screen); };
+    inline void remove_screen(rdr::U32 id) {
+      std::list<Screen>::iterator iter;
+      for (iter = screens.begin();iter != screens.end();++iter) {
+        if (iter->id == id)
+            screens.erase(iter);
+      }
+    }
+
     inline bool validate(int fb_width, int fb_height) const {
       std::list<Screen>::const_iterator iter;
       std::set<rdr::U32> seen_ids;
@@ -56,6 +75,8 @@
 
       if (screens.empty())
         return false;
+      if (num_screens() > 255)
+        return false;
 
       fb_rect.setXYWH(0, 0, fb_width, fb_height);
 
@@ -71,6 +92,7 @@
 
       return true;
     };
+
     std::list<Screen> screens;
   };