Avoid triggering a full screen request by accident on X11.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4992 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/vncviewer/DesktopWindow.cxx b/vncviewer/DesktopWindow.cxx
index ef5ec00..04addba 100644
--- a/vncviewer/DesktopWindow.cxx
+++ b/vncviewer/DesktopWindow.cxx
@@ -106,14 +106,6 @@
     }
   }
 
-  // If we are creating a window which is equal to the size on the
-  // screen on X11, many WMs will treat this as a legacy fullscreen
-  // request. This is not what we want. Besides, it doesn't really
-  // make sense to try to create a window which is larger than the
-  // available work space. 
-  w = __rfbmin(w, Fl::w());
-  h = __rfbmin(h, Fl::h());
-  
   if (force_position()) {
     resize(geom_x, geom_y, w, h);
   } else {
@@ -275,6 +267,34 @@
 {
   bool resizing;
 
+#if ! (defined(WIN32) || defined(__APPLE__))
+  // X11 window managers will treat a resize to cover the entire
+  // monitor as a request to go full screen. Make sure we avoid this.
+  //
+  // FIXME: If this is an external event then this code will get
+  //        FLTK into a confused state about the window's position/size.
+  //        Unfortunately FLTK doesn't offer an easy way to tell
+  //        what kind of resize it is. Let's hope this corner case
+  //        isn't too common...
+#ifdef HAVE_FLTK_FULLSCREEN
+  if (!fullscreen_active())
+#endif
+  {
+    for (int i = 0;i < Fl::screen_count();i++) {
+      int sx, sy, sw, sh;
+
+      Fl::screen_xywh(sx, sy, sw, sh, i);
+
+      if ((sx == x) && (sy == y) && (sw == w) && (sh == h)) {
+        vlog.info("Adjusting window size to avoid accidental full screen request");
+        // Assume a panel of some form and adjust the height
+        y += 20;
+        h -= 40;
+      }
+    }
+  }
+#endif
+
   if ((this->w() != w) || (this->h() != h))
     resizing = true;
   else