Revamp of the local X11 connection code. We now parse X display
[u/mdw/putty] / windows / wincfg.c
index 070e6f5..516f0a3 100644 (file)
@@ -31,7 +31,7 @@ static void help_handler(union control *ctrl, void *dlg,
 }
 
 void win_setup_config_box(struct controlbox *b, HWND *hwndp, int has_help,
-                         int midsession)
+                         int midsession, int protocol)
 {
     struct controlset *s;
     union control *c;
@@ -173,18 +173,41 @@ void win_setup_config_box(struct controlbox *b, HWND *hwndp, int has_help,
                  dlg_stdcheckbox_handler, I(offsetof(Config,sunken_edge)));
 
     /*
+     * Configurable font quality settings for Windows.
+     */
+    s = ctrl_getset(b, "Window/Appearance", "font",
+                   "Font settings");
+    ctrl_radiobuttons(s, "Font quality:", 'q', 2,
+                     HELPCTX(appearance_font),
+                     dlg_stdradiobutton_handler,
+                     I(offsetof(Config, font_quality)),
+                     "Antialiased", I(FQ_ANTIALIASED),
+                     "Non-Antialiased", I(FQ_NONANTIALIASED),
+                     "ClearType", I(FQ_CLEARTYPE),
+                     "Default", I(FQ_DEFAULT), NULL);
+
+    /*
      * Cyrillic Lock is a horrid misfeature even on Windows, and
      * the least we can do is ensure it never makes it to any other
      * platform (at least unless someone fixes it!).
      */
-    s = ctrl_getset(b, "Window/Translation", "input",
-                   "Enable character set translation on input data");
+    s = ctrl_getset(b, "Window/Translation", "tweaks", NULL);
     ctrl_checkbox(s, "Caps Lock acts as Cyrillic switch", 's',
                  HELPCTX(translation_cyrillic),
                  dlg_stdcheckbox_handler,
                  I(offsetof(Config,xlat_capslockcyr)));
 
     /*
+     * On Windows we can use but not enumerate translation tables
+     * from the operating system. Briefly document this.
+     */
+    s = ctrl_getset(b, "Window/Translation", "trans",
+                   "Character set translation on received data");
+    ctrl_text(s, "(Codepages supported by Windows but not listed here, "
+             "such as CP866 on many systems, can be entered manually)",
+             HELPCTX(translation_codepage));
+
+    /*
      * Windows has the weird OEM font mode, which gives us some
      * additional options when working with line-drawing
      * characters.
@@ -310,4 +333,58 @@ void win_setup_config_box(struct controlbox *b, HWND *hwndp, int has_help,
                  HELPCTX(behaviour_altenter),
                  dlg_stdcheckbox_handler,
                  I(offsetof(Config,fullscreenonaltenter)));
+
+    /*
+     * Windows supports a local-command proxy. This also means we
+     * must adjust the text on the `Telnet command' control.
+     */
+    if (!midsession) {
+       int i;
+        s = ctrl_getset(b, "Connection/Proxy", "basics", NULL);
+       for (i = 0; i < s->ncontrols; i++) {
+           c = s->ctrls[i];
+           if (c->generic.type == CTRL_RADIO &&
+               c->generic.context.i == offsetof(Config, proxy_type)) {
+               assert(c->generic.handler == dlg_stdradiobutton_handler);
+               c->radio.nbuttons++;
+               c->radio.buttons =
+                   sresize(c->radio.buttons, c->radio.nbuttons, char *);
+               c->radio.buttons[c->radio.nbuttons-1] =
+                   dupstr("Local");
+               c->radio.buttondata =
+                   sresize(c->radio.buttondata, c->radio.nbuttons, intorptr);
+               c->radio.buttondata[c->radio.nbuttons-1] = I(PROXY_CMD);
+               break;
+           }
+       }
+
+       for (i = 0; i < s->ncontrols; i++) {
+           c = s->ctrls[i];
+           if (c->generic.type == CTRL_EDITBOX &&
+               c->generic.context.i ==
+               offsetof(Config, proxy_telnet_command)) {
+               assert(c->generic.handler == dlg_stdeditbox_handler);
+               sfree(c->generic.label);
+               c->generic.label = dupstr("Telnet command, or local"
+                                         " proxy command");
+               break;
+           }
+       }
+    }
+
+    /*
+     * Serial back end is available on Windows.
+     */
+    if (!midsession || (protocol == PROT_SERIAL))
+        ser_setup_config_box(b, midsession, 0x1F, 0x0F);
+
+    /*
+     * $XAUTHORITY is not reliable on Windows, so we provide a
+     * means to override it.
+     */
+    s = ctrl_getset(b, "Connection/SSH/X11", "x11", "X11 forwarding");
+    ctrl_filesel(s, "X authority file for local display", 't',
+                NULL, FALSE, "Select X authority file",
+                HELPCTX(ssh_tunnels_xauthority),
+                dlg_stdfilesel_handler, I(offsetof(Config, xauthfile)));
 }