Make DesktopSize configurable from the options dialog.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4928 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/vncviewer/OptionsDialog.cxx b/vncviewer/OptionsDialog.cxx
index 58f2fd7..d3ed333 100644
--- a/vncviewer/OptionsDialog.cxx
+++ b/vncviewer/OptionsDialog.cxx
@@ -271,8 +271,24 @@
       menuKeyChoice->value(i + 1);
 
   /* Screen */
+  int width, height;
+
+  if (sscanf(desktopSize.getValueStr(), "%dx%d", &width, &height) != 2) {
+    desktopSizeCheckbox->value(false);
+    desktopWidthInput->value("1024");
+    desktopHeightInput->value("768");
+  } else {
+    char buf[32];
+    desktopSizeCheckbox->value(true);
+    snprintf(buf, sizeof(buf), "%d", width);
+    desktopWidthInput->value(buf);
+    snprintf(buf, sizeof(buf), "%d", height);
+    desktopHeightInput->value(buf);
+  }
   fullScreenCheckbox->value(fullScreen);
 
+  handleDesktopSize(desktopSizeCheckbox, this);
+
   /* Misc. */
   sharedCheckbox->value(shared);
   dotCursorCheckbox->value(dotWhenNoCursor);
@@ -360,6 +376,17 @@
   }
 
   /* Screen */
+  int width, height;
+
+  if (desktopSizeCheckbox->value() &&
+      (sscanf(desktopWidthInput->value(), "%d", &width) == 1) &&
+      (sscanf(desktopHeightInput->value(), "%d", &height) == 1)) {
+    char buf[64];
+    snprintf(buf, sizeof(buf), "%dx%d", width, height);
+    desktopSize.setParam(buf);
+  } else {
+    desktopSize.setParam("");
+  }
   fullScreen.setParam(fullScreenCheckbox->value());
 
   /* Misc. */
@@ -693,11 +720,26 @@
 
 void OptionsDialog::createScreenPage(int tx, int ty, int tw, int th)
 {
+  int x;
+
   Fl_Group *group = new Fl_Group(tx, ty, tw, th, _("Screen"));
 
   tx += OUTER_MARGIN;
   ty += OUTER_MARGIN;
 
+  desktopSizeCheckbox = new Fl_Check_Button(LBLRIGHT(tx, ty,
+                                                     CHECK_MIN_WIDTH,
+                                                     CHECK_HEIGHT,
+                                                     _("Resize remote session on connect")));
+  desktopSizeCheckbox->callback(handleDesktopSize, this);
+  ty += CHECK_HEIGHT + TIGHT_MARGIN;
+
+  desktopWidthInput = new Fl_Int_Input(tx + INDENT, ty, 50, INPUT_HEIGHT);
+  x = desktopWidthInput->x() + desktopWidthInput->w() + \
+      gui_str_len("x") + 3 * 2;
+  desktopHeightInput = new Fl_Int_Input(x, ty, 50, INPUT_HEIGHT, "x");
+  ty += INPUT_HEIGHT + TIGHT_MARGIN;
+
   fullScreenCheckbox = new Fl_Check_Button(LBLRIGHT(tx, ty,
                                                   CHECK_MIN_WIDTH,
                                                   CHECK_HEIGHT,
@@ -785,6 +827,19 @@
 }
 
 
+void OptionsDialog::handleDesktopSize(Fl_Widget *widget, void *data)
+{
+  OptionsDialog *dialog = (OptionsDialog*)data;
+
+  if (dialog->desktopSizeCheckbox->value()) {
+    dialog->desktopWidthInput->activate();
+    dialog->desktopHeightInput->activate();
+  } else {
+    dialog->desktopWidthInput->deactivate();
+    dialog->desktopHeightInput->deactivate();
+  }
+}
+
 void OptionsDialog::handleCancel(Fl_Widget *widget, void *data)
 {
   OptionsDialog *dialog = (OptionsDialog*)data;
diff --git a/vncviewer/OptionsDialog.h b/vncviewer/OptionsDialog.h
index d33ecaa..c406a45 100644
--- a/vncviewer/OptionsDialog.h
+++ b/vncviewer/OptionsDialog.h
@@ -59,6 +59,8 @@
 
   static void handleX509(Fl_Widget *widget, void *data);
 
+  static void handleDesktopSize(Fl_Widget *widget, void *data);
+
   static void handleCancel(Fl_Widget *widget, void *data);
   static void handleOK(Fl_Widget *widget, void *data);
 
@@ -107,6 +109,9 @@
   Fl_Choice *menuKeyChoice;
 
   /* Screen */
+  Fl_Check_Button *desktopSizeCheckbox;
+  Fl_Int_Input *desktopWidthInput;
+  Fl_Int_Input *desktopHeightInput;
   Fl_Check_Button *fullScreenCheckbox;
 
   /* Misc. */