aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPierre Ossman <ossman@cendio.se>2021-12-10 10:38:20 +0100
committerPierre Ossman <ossman@cendio.se>2021-12-10 10:50:37 +0100
commitdfabf9849ae511d85ed676426f1b48260dc997eb (patch)
treede79223567b6550cd3730cbcc38ab3bfbbedfb29
parent82cb269f9f1258b8188a7f8e64bf1e7a07b50677 (diff)
downloadtigervnc-dfabf9849ae511d85ed676426f1b48260dc997eb.tar.gz
tigervnc-dfabf9849ae511d85ed676426f1b48260dc997eb.zip
Add headings/groups for options
Try to be more consistent that related options should have a group box around them.
-rw-r--r--vncviewer/OptionsDialog.cxx277
-rw-r--r--vncviewer/OptionsDialog.h10
-rw-r--r--vncviewer/parameters.cxx2
3 files changed, 193 insertions, 96 deletions
diff --git a/vncviewer/OptionsDialog.cxx b/vncviewer/OptionsDialog.cxx
index b2eedc94..f7cc774d 100644
--- a/vncviewer/OptionsDialog.cxx
+++ b/vncviewer/OptionsDialog.cxx
@@ -55,7 +55,7 @@ using namespace rfb;
std::map<OptionsCallback*, void*> OptionsDialog::callbacks;
OptionsDialog::OptionsDialog()
- : Fl_Window(450, 450, _("VNC Viewer: Connection Options"))
+ : Fl_Window(450, 460, _("VNC Viewer: Connection Options"))
{
int x, y;
Fl_Button *button;
@@ -689,64 +689,143 @@ void OptionsDialog::createInputPage(int tx, int ty, int tw, int th)
{
Fl_Group *group = new Fl_Group(tx, ty, tw, th, _("Input"));
+ int orig_tx;
+ int width;
+
tx += OUTER_MARGIN;
ty += OUTER_MARGIN;
+ width = tw - OUTER_MARGIN * 2;
+
viewOnlyCheckbox = new Fl_Check_Button(LBLRIGHT(tx, ty,
CHECK_MIN_WIDTH,
CHECK_HEIGHT,
_("View only (ignore mouse and keyboard)")));
ty += CHECK_HEIGHT + TIGHT_MARGIN;
- emulateMBCheckbox = new Fl_Check_Button(LBLRIGHT(tx, ty,
- CHECK_MIN_WIDTH,
- CHECK_HEIGHT,
- _("Emulate middle mouse button")));
- ty += CHECK_HEIGHT + TIGHT_MARGIN;
+ orig_tx = tx;
- acceptClipboardCheckbox = new Fl_Check_Button(LBLRIGHT(tx, ty,
- CHECK_MIN_WIDTH,
- CHECK_HEIGHT,
- _("Accept clipboard from server")));
- acceptClipboardCheckbox->callback(handleClipboard, this);
- ty += CHECK_HEIGHT + TIGHT_MARGIN;
+ /* Mouse */
+ ty += GROUP_LABEL_OFFSET;
+ mouseGroup = new Fl_Group(tx, ty, width, 0, _("Mouse"));
+ mouseGroup->box(FL_ENGRAVED_BOX);
+ mouseGroup->align(FL_ALIGN_LEFT | FL_ALIGN_TOP);
-#if !defined(WIN32) && !defined(__APPLE__)
- setPrimaryCheckbox = new Fl_Check_Button(LBLRIGHT(tx + INDENT, ty,
- CHECK_MIN_WIDTH,
- CHECK_HEIGHT,
- _("Also set primary selection")));
- ty += CHECK_HEIGHT + TIGHT_MARGIN;
-#endif
+ /* Needed for final resize to work sanely */
+ mouseGroup->resizable(NULL);
- sendClipboardCheckbox = new Fl_Check_Button(LBLRIGHT(tx, ty,
- CHECK_MIN_WIDTH,
- CHECK_HEIGHT,
- _("Send clipboard to server")));
- sendClipboardCheckbox->callback(handleClipboard, this);
- ty += CHECK_HEIGHT + TIGHT_MARGIN;
+ {
+ tx += GROUP_MARGIN;
+ ty += GROUP_MARGIN;
-#if !defined(WIN32) && !defined(__APPLE__)
- sendPrimaryCheckbox = new Fl_Check_Button(LBLRIGHT(tx + INDENT, ty,
+ emulateMBCheckbox = new Fl_Check_Button(LBLRIGHT(tx, ty,
CHECK_MIN_WIDTH,
CHECK_HEIGHT,
- _("Send primary selection as clipboard")));
- ty += CHECK_HEIGHT + TIGHT_MARGIN;
-#endif
+ _("Emulate middle mouse button")));
+ ty += CHECK_HEIGHT + TIGHT_MARGIN;
- systemKeysCheckbox = new Fl_Check_Button(LBLRIGHT(tx, ty,
+ dotCursorCheckbox = new Fl_Check_Button(LBLRIGHT(tx, ty,
CHECK_MIN_WIDTH,
CHECK_HEIGHT,
- _("Pass system keys directly to server (full screen)")));
- ty += CHECK_HEIGHT + TIGHT_MARGIN;
+ _("Show dot when no cursor")));
+ ty += CHECK_HEIGHT + TIGHT_MARGIN;
+ }
+ ty += GROUP_MARGIN - TIGHT_MARGIN;
- menuKeyChoice = new Fl_Choice(LBLLEFT(tx, ty, 150, CHOICE_HEIGHT, _("Menu key")));
+ mouseGroup->end();
+ mouseGroup->size(mouseGroup->w(), ty - mouseGroup->y());
- fltk_menu_add(menuKeyChoice, _("None"), 0, NULL, (void*)0, FL_MENU_DIVIDER);
- for (int i = 0; i < getMenuKeySymbolCount(); i++)
- fltk_menu_add(menuKeyChoice, getMenuKeySymbols()[i].name, 0, NULL, 0, 0);
+ /* Back to normal */
+ tx = orig_tx;
+ ty += INNER_MARGIN;
+
+ /* Keyboard */
+ ty += GROUP_LABEL_OFFSET;
+ keyboardGroup = new Fl_Group(tx, ty, width, 0, _("Keyboard"));
+ keyboardGroup->box(FL_ENGRAVED_BOX);
+ keyboardGroup->align(FL_ALIGN_LEFT | FL_ALIGN_TOP);
+
+ /* Needed for final resize to work sanely */
+ keyboardGroup->resizable(NULL);
+
+ {
+ tx += GROUP_MARGIN;
+ ty += GROUP_MARGIN;
+
+ systemKeysCheckbox = new Fl_Check_Button(LBLRIGHT(tx, ty,
+ CHECK_MIN_WIDTH,
+ CHECK_HEIGHT,
+ _("Pass system keys directly to server (full screen)")));
+ ty += CHECK_HEIGHT + TIGHT_MARGIN;
+
+ menuKeyChoice = new Fl_Choice(LBLLEFT(tx, ty, 150, CHOICE_HEIGHT, _("Menu key")));
+
+ fltk_menu_add(menuKeyChoice, _("None"), 0, NULL, (void*)0, FL_MENU_DIVIDER);
+ for (int i = 0; i < getMenuKeySymbolCount(); i++)
+ fltk_menu_add(menuKeyChoice, getMenuKeySymbols()[i].name, 0, NULL, 0, 0);
- ty += CHOICE_HEIGHT + TIGHT_MARGIN;
+ ty += CHOICE_HEIGHT + TIGHT_MARGIN;
+ }
+ ty += GROUP_MARGIN - TIGHT_MARGIN;
+
+ keyboardGroup->end();
+ keyboardGroup->size(keyboardGroup->w(), ty - keyboardGroup->y());
+
+ /* Back to normal */
+ tx = orig_tx;
+ ty += INNER_MARGIN;
+
+ /* Clipboard */
+ ty += GROUP_LABEL_OFFSET;
+ clipboardGroup = new Fl_Group(tx, ty, width, 0, _("Clipboard"));
+ clipboardGroup->box(FL_ENGRAVED_BOX);
+ clipboardGroup->align(FL_ALIGN_LEFT | FL_ALIGN_TOP);
+
+ /* Needed for final resize to work sanely */
+ clipboardGroup->resizable(NULL);
+
+ {
+ tx += GROUP_MARGIN;
+ ty += GROUP_MARGIN;
+
+ acceptClipboardCheckbox = new Fl_Check_Button(LBLRIGHT(tx, ty,
+ CHECK_MIN_WIDTH,
+ CHECK_HEIGHT,
+ _("Accept clipboard from server")));
+ acceptClipboardCheckbox->callback(handleClipboard, this);
+ ty += CHECK_HEIGHT + TIGHT_MARGIN;
+
+#if !defined(WIN32) && !defined(__APPLE__)
+ setPrimaryCheckbox = new Fl_Check_Button(LBLRIGHT(tx + INDENT, ty,
+ CHECK_MIN_WIDTH,
+ CHECK_HEIGHT,
+ _("Also set primary selection")));
+ ty += CHECK_HEIGHT + TIGHT_MARGIN;
+#endif
+
+ sendClipboardCheckbox = new Fl_Check_Button(LBLRIGHT(tx, ty,
+ CHECK_MIN_WIDTH,
+ CHECK_HEIGHT,
+ _("Send clipboard to server")));
+ sendClipboardCheckbox->callback(handleClipboard, this);
+ ty += CHECK_HEIGHT + TIGHT_MARGIN;
+
+#if !defined(WIN32) && !defined(__APPLE__)
+ sendPrimaryCheckbox = new Fl_Check_Button(LBLRIGHT(tx + INDENT, ty,
+ CHECK_MIN_WIDTH,
+ CHECK_HEIGHT,
+ _("Send primary selection as clipboard")));
+ ty += CHECK_HEIGHT + TIGHT_MARGIN;
+#endif
+ }
+ ty += GROUP_MARGIN - TIGHT_MARGIN;
+
+ clipboardGroup->end();
+ clipboardGroup->size(clipboardGroup->w(), ty - clipboardGroup->y());
+
+ /* Back to normal */
+ tx = orig_tx;
+ ty += INNER_MARGIN;
group->end();
}
@@ -756,57 +835,77 @@ void OptionsDialog::createDisplayPage(int tx, int ty, int tw, int th)
{
Fl_Group *group = new Fl_Group(tx, ty, tw, th, _("Display"));
+ int orig_tx;
+ int width;
+
tx += OUTER_MARGIN;
ty += OUTER_MARGIN;
- windowedButton = new Fl_Round_Button(LBLRIGHT(tx, ty,
- RADIO_MIN_WIDTH,
- RADIO_HEIGHT,
- _("Windowed")));
- windowedButton->type(FL_RADIO_BUTTON);
- windowedButton->callback(handleFullScreenMode, this);
- ty += RADIO_HEIGHT + TIGHT_MARGIN;
-
- currentMonitorButton = new Fl_Round_Button(LBLRIGHT(tx, ty,
- RADIO_MIN_WIDTH,
- RADIO_HEIGHT,
- _("Full screen on current monitor")));
- currentMonitorButton->type(FL_RADIO_BUTTON);
- currentMonitorButton->callback(handleFullScreenMode, this);
- ty += RADIO_HEIGHT + TIGHT_MARGIN;
-
- allMonitorsButton = new Fl_Round_Button(LBLRIGHT(tx, ty,
- RADIO_MIN_WIDTH,
- RADIO_HEIGHT,
- _("Full screen on all monitors")));
- allMonitorsButton->type(FL_RADIO_BUTTON);
- allMonitorsButton->callback(handleFullScreenMode, this);
- ty += RADIO_HEIGHT + TIGHT_MARGIN;
-
- selectedMonitorsButton = new Fl_Round_Button(LBLRIGHT(tx, ty,
- RADIO_MIN_WIDTH,
- RADIO_HEIGHT,
- _("Full screen on selected monitor(s)")));
- selectedMonitorsButton->type(FL_RADIO_BUTTON);
- selectedMonitorsButton->callback(handleFullScreenMode, this);
- ty += RADIO_HEIGHT + TIGHT_MARGIN;
-
- /*
- * Right now these occupy all remaining space, but that can probably
- * be reduced if we add more stuff to this page.
- */
- int full_width = tw - OUTER_MARGIN * 2;
- int margin_width = full_width - INDENT;
- int full_height = th;
- int margin_height = full_height - ty + INNER_MARGIN;
-
- monitorArrangement = new MonitorArrangement(
- tx + INDENT,
- ty,
- margin_width,
- margin_height);
-
- ty += CHECK_HEIGHT + margin_height;
+ width = tw - OUTER_MARGIN * 2;
+
+ orig_tx = tx;
+
+ /* Display mode */
+ ty += GROUP_LABEL_OFFSET;
+ displayModeGroup = new Fl_Group(tx, ty, width, 0, _("Display mode"));
+ displayModeGroup->box(FL_ENGRAVED_BOX);
+ displayModeGroup->align(FL_ALIGN_LEFT | FL_ALIGN_TOP);
+
+ /* Needed for final resize to work sanely */
+ displayModeGroup->resizable(NULL);
+
+ {
+ tx += GROUP_MARGIN;
+ ty += GROUP_MARGIN;
+ width -= GROUP_MARGIN * 2;
+
+ windowedButton = new Fl_Round_Button(LBLRIGHT(tx, ty,
+ RADIO_MIN_WIDTH,
+ RADIO_HEIGHT,
+ _("Windowed")));
+ windowedButton->type(FL_RADIO_BUTTON);
+ windowedButton->callback(handleFullScreenMode, this);
+ ty += RADIO_HEIGHT + TIGHT_MARGIN;
+
+ currentMonitorButton = new Fl_Round_Button(LBLRIGHT(tx, ty,
+ RADIO_MIN_WIDTH,
+ RADIO_HEIGHT,
+ _("Full screen on current monitor")));
+ currentMonitorButton->type(FL_RADIO_BUTTON);
+ currentMonitorButton->callback(handleFullScreenMode, this);
+ ty += RADIO_HEIGHT + TIGHT_MARGIN;
+
+ allMonitorsButton = new Fl_Round_Button(LBLRIGHT(tx, ty,
+ RADIO_MIN_WIDTH,
+ RADIO_HEIGHT,
+ _("Full screen on all monitors")));
+ allMonitorsButton->type(FL_RADIO_BUTTON);
+ allMonitorsButton->callback(handleFullScreenMode, this);
+ ty += RADIO_HEIGHT + TIGHT_MARGIN;
+
+ selectedMonitorsButton = new Fl_Round_Button(LBLRIGHT(tx, ty,
+ RADIO_MIN_WIDTH,
+ RADIO_HEIGHT,
+ _("Full screen on selected monitor(s)")));
+ selectedMonitorsButton->type(FL_RADIO_BUTTON);
+ selectedMonitorsButton->callback(handleFullScreenMode, this);
+ ty += RADIO_HEIGHT + TIGHT_MARGIN;
+
+ monitorArrangement = new MonitorArrangement(
+ tx + INDENT, ty,
+ width - INDENT, 150);
+ ty += 150 + TIGHT_MARGIN;
+ }
+ ty += GROUP_MARGIN - TIGHT_MARGIN;
+
+ displayModeGroup->end();
+ displayModeGroup->size(displayModeGroup->w(),
+ ty - displayModeGroup->y());
+
+ /* Back to normal */
+ tx = orig_tx;
+ ty += INNER_MARGIN;
+ width = tw - OUTER_MARGIN * 2;
group->end();
}
@@ -831,12 +930,6 @@ void OptionsDialog::createMiscPage(int tx, int ty, int tw, int th)
_("Ask to reconnect on connection errors")));
ty += CHECK_HEIGHT + TIGHT_MARGIN;
- dotCursorCheckbox = new Fl_Check_Button(LBLRIGHT(tx, ty,
- CHECK_MIN_WIDTH,
- CHECK_HEIGHT,
- _("Show dot when no cursor")));
- ty += CHECK_HEIGHT + TIGHT_MARGIN;
-
group->end();
}
diff --git a/vncviewer/OptionsDialog.h b/vncviewer/OptionsDialog.h
index de1e0173..fe39f192 100644
--- a/vncviewer/OptionsDialog.h
+++ b/vncviewer/OptionsDialog.h
@@ -108,7 +108,13 @@ protected:
/* Input */
Fl_Check_Button *viewOnlyCheckbox;
+ Fl_Group *mouseGroup;
Fl_Check_Button *emulateMBCheckbox;
+ Fl_Check_Button *dotCursorCheckbox;
+ Fl_Group *keyboardGroup;
+ Fl_Check_Button *systemKeysCheckbox;
+ Fl_Choice *menuKeyChoice;
+ Fl_Group *clipboardGroup;
Fl_Check_Button *acceptClipboardCheckbox;
#if !defined(WIN32) && !defined(__APPLE__)
Fl_Check_Button *setPrimaryCheckbox;
@@ -117,10 +123,9 @@ protected:
#if !defined(WIN32) && !defined(__APPLE__)
Fl_Check_Button *sendPrimaryCheckbox;
#endif
- Fl_Check_Button *systemKeysCheckbox;
- Fl_Choice *menuKeyChoice;
/* Display */
+ Fl_Group *displayModeGroup;
Fl_Round_Button *windowedButton;
Fl_Round_Button *currentMonitorButton;
Fl_Round_Button *allMonitorsButton;
@@ -130,7 +135,6 @@ protected:
/* Misc. */
Fl_Check_Button *sharedCheckbox;
Fl_Check_Button *reconnectCheckbox;
- Fl_Check_Button *dotCursorCheckbox;
};
#endif
diff --git a/vncviewer/parameters.cxx b/vncviewer/parameters.cxx
index 40c525f7..0912b461 100644
--- a/vncviewer/parameters.cxx
+++ b/vncviewer/parameters.cxx
@@ -181,7 +181,6 @@ static VoidParameter* parameterArray[] = {
#endif // HAVE_GNUTLS
&SecurityClient::secTypes,
/* Misc. */
- &dotWhenNoCursor,
&reconnectOnError,
&shared,
/* Compression */
@@ -200,6 +199,7 @@ static VoidParameter* parameterArray[] = {
/* Input */
&viewOnly,
&emulateMiddleButton,
+ &dotWhenNoCursor,
&acceptClipboard,
&sendClipboard,
#if !defined(WIN32) && !defined(__APPLE__)