Yesterday's proxy enhancements also slightly nadgered the config
[u/mdw/putty] / unix / uxcfg.c
index 6daa19b..8d8d65e 100644 (file)
 #include "dialog.h"
 #include "storage.h"
 
-void unix_setup_config_box(struct controlbox *b, int midsession)
+static void about_handler(union control *ctrl, void *dlg,
+                         void *data, int event)
+{
+    if (event == EVENT_ACTION) {
+       about_box(ctrl->generic.context.p);
+    }
+}
+
+void unix_setup_config_box(struct controlbox *b, int midsession, void *win)
 {
     struct controlset *s, *s2;
     union control *c;
     int i;
 
-#ifdef FIXME
     if (!midsession) {
        /*
         * Add the About button to the standard panel.
         */
        s = ctrl_getset(b, "", "", "");
        c = ctrl_pushbutton(s, "About", 'a', HELPCTX(no_help),
-                           about_handler, P(hwndp));
+                           about_handler, P(win));
        c->generic.column = 0;
     }
-#endif
 
     /*
      * The Config structure contains two Unix-specific elements
@@ -37,6 +43,14 @@ void unix_setup_config_box(struct controlbox *b, int midsession)
      */
 
     /*
+     * On Unix, we don't have a drop-down list for the printer
+     * control.
+     */
+    s = ctrl_getset(b, "Terminal", "printing", "Remote-controlled printing");
+    assert(s->ncontrols == 1 && s->ctrls[0]->generic.type == CTRL_EDITBOX);
+    s->ctrls[0]->editbox.has_list = 0;
+
+    /*
      * GTK makes it rather easier to put the scrollbar on the left
      * than Windows does!
      */
@@ -89,7 +103,7 @@ void unix_setup_config_box(struct controlbox *b, int midsession)
     ctrl_settitle(b, "Window/Fonts", "Options controlling font usage");
     s = ctrl_getset(b, "Window/Fonts", "font",
                     "Fonts for displaying non-bold text");
-    ctrl_fontsel(s, "Font used for ordinary text", 'w',
+    ctrl_fontsel(s, "Font used for ordinary text", 'f',
                 HELPCTX(no_help),
                 dlg_stdfontsel_handler, I(offsetof(Config,font)));
     ctrl_fontsel(s, "Font used for wide (CJK) text", 'w',
@@ -111,4 +125,43 @@ void unix_setup_config_box(struct controlbox *b, int midsession)
     ctrl_editbox(s, "Horizontal offset for shadow bold:", 'z', 20,
                 HELPCTX(no_help), dlg_stdeditbox_handler,
                  I(offsetof(Config,shadowboldoffset)), I(-1));
+
+    /*
+     * Unix supports a local-command proxy. This also means we must
+     * adjust the text on the `Telnet command' control.
+     */
+    s = ctrl_getset(b, "Connection/Proxy", "basics", NULL);
+    {
+       int i;
+       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;
+           }
+       }
+    }
+
 }