]> source.dussan.org Git - tigervnc.git/commitdiff
Added new option "-Maximize", for maximizing the window at startup.
authorPeter Åstrand <astrand@cendio.se>
Wed, 1 Aug 2012 08:09:09 +0000 (08:09 +0000)
committerPeter Åstrand <astrand@cendio.se>
Wed, 1 Aug 2012 08:09:09 +0000 (08:09 +0000)
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4949 3789f03b-4d11-0410-bbf8-ca57d06f2519

vncviewer/DesktopWindow.cxx
vncviewer/DesktopWindow.h
vncviewer/parameters.cxx
vncviewer/parameters.h
vncviewer/vncviewer.man

index 0431e04b9d6f449776430a8a72abb7979541ebe4..89398ba9e59bd4d16f43dc44be0b1d07b75bc3e0 100644 (file)
@@ -90,6 +90,13 @@ DesktopWindow::DesktopWindow(int w, int h, const char *name,
 
   show();
 
+  // Unfortunately, current FLTK does not allow us to set the
+  // maximized property before showing the window. See STR #2083 and
+  // STR #2178
+  if (maximize) {
+    maximizeWindow();
+  }
+
   // The window manager might give us an initial window size that is different
   // than the one we requested, and in those cases we need to manually adjust
   // the scroll widget for things to behave sanely.
@@ -428,6 +435,43 @@ void DesktopWindow::handleGrab(void *data)
 }
 
 
+#define _NET_WM_STATE_ADD           1  /* add/set property */
+void DesktopWindow::maximizeWindow()
+{
+#if defined(WIN32)
+  WINDOWPLACEMENT wp;
+  wp.length = sizeof(WINDOWPLACEMENT);
+  GetWindowPlacement(fl_xid(this), &wp);
+  wp.showCmd = SW_MAXIMIZE;
+  SetWindowPlacement(fl_xid(this), &wp);
+#elif defined(__APPLE__)
+  /* OS X is somewhat strange and does not really have a concept of a
+     maximized window, so we can simply resize the window to the workarea */
+  int X, Y, W, H;
+  Fl::screen_work_area(X, Y, W, H, this->x(), this->y());
+  size(W, H);
+#else
+  // X11
+  fl_open_display();
+  Atom net_wm_state = XInternAtom (fl_display, "_NET_WM_STATE", 0);
+  Atom net_wm_state_maximized_vert = XInternAtom (fl_display, "_NET_WM_STATE_MAXIMIZED_VERT", 0);
+  Atom net_wm_state_maximized_horz = XInternAtom (fl_display, "_NET_WM_STATE_MAXIMIZED_HORZ", 0);
+
+  XEvent e;
+  e.xany.type = ClientMessage;
+  e.xany.window = fl_xid(this);
+  e.xclient.message_type = net_wm_state;
+  e.xclient.format = 32;
+  e.xclient.data.l[0] = _NET_WM_STATE_ADD;
+  e.xclient.data.l[1] = net_wm_state_maximized_vert;
+  e.xclient.data.l[2] = net_wm_state_maximized_horz;
+  e.xclient.data.l[3] = 0;
+  e.xclient.data.l[4] = 0;
+  XSendEvent(fl_display, RootWindow(fl_display, fl_screen), 0, SubstructureNotifyMask | SubstructureRedirectMask, &e);
+#endif
+}
+
+
 void DesktopWindow::handleResizeTimeout(void *data)
 {
   DesktopWindow *self = (DesktopWindow *)data;
index 2a4613c779bc9d3f8839f50cd601d0b557479b7f..6008d0677b8554d5445b6bcd50afb73909d00386 100644 (file)
@@ -88,6 +88,8 @@ private:
 
   static void handleGrab(void *data);
 
+  void maximizeWindow();
+
   static void handleResizeTimeout(void *data);
   void remoteResize();
 
index 22fa1ac532d3c7f98644815c8ccaf578a8c679a7..7b60b621bf607df0dacaeb1834f9a42d1dcf74c5 100644 (file)
@@ -64,6 +64,7 @@ IntParameter qualityLevel("QualityLevel",
                           "JPEG quality level. 0 = Low, 9 = High",
                           8);
 
+BoolParameter maximize("Maximize", "Maximize viewer window", false);
 #ifdef HAVE_FLTK_FULLSCREEN
 BoolParameter fullScreen("FullScreen", "Full screen mode", false);
 #ifdef HAVE_FLTK_FULLSCREEN_SCREENS
index 59909d112cda6a69faeb7b9beda4cca7a4d7ae11..5a9170eb824c8dc7bed6acb6ae231affefe1477d 100644 (file)
@@ -39,6 +39,7 @@ extern rfb::IntParameter qualityLevel;
 
 #ifdef HAVE_FLTK_FULLSCREEN
 extern rfb::BoolParameter fullScreen;
+extern rfb::BoolParameter maximize;
 #ifdef HAVE_FLTK_FULLSCREEN_SCREENS
 extern rfb::BoolParameter fullScreenAllMonitors;
 #endif // HAVE_FLTK_FULLSCREEN_SCREENS
index 9a0c864c987350850f326eb34b5b634b024bc40f..f8796da905fcc08ade86470f34fd3d4c125bd3e7 100644 (file)
@@ -131,6 +131,10 @@ Useful if you want to view a desktop without interfering; often needs to be
 combined with
 .B \-Shared.
 
+.TP
+.B \-Maximize
+Maximize viewer window. 
+
 .TP
 .B \-FullScreen
 Start in full-screen mode.