Comparing ScreenSet:s should be done without considering order

Avoids that a viewer connected to Xvnc sometimes disconnects with
"Desktop configured a different screen layout than requested" when
screens are changing.
diff --git a/common/rfb/ScreenSet.h b/common/rfb/ScreenSet.h
index ad340c2..9680b6e 100644
--- a/common/rfb/ScreenSet.h
+++ b/common/rfb/ScreenSet.h
@@ -126,11 +126,23 @@
       }
     };
 
-    // FIXME: List order shouldn't matter
-    inline bool operator==(const ScreenSet& r) const { return screens == r.screens; }
-    inline bool operator!=(const ScreenSet& r) const { return screens != r.screens; }
+    inline bool operator==(const ScreenSet& r) const {
+      std::list<Screen> a = screens;
+      a.sort(compare_screen);
+      std::list<Screen> b = r.screens;
+      b.sort(compare_screen);
+      return a == b;
+    };
+    inline bool operator!=(const ScreenSet& r) const { return !operator==(r); }
 
     std::list<Screen> screens;
+
+  private:
+    static inline bool compare_screen(const Screen& first, const Screen& second)
+    {
+      return first.id < second.id;
+    }
+
   };
 
 };