Sebastian Kuschel reports that pfd_closing can be called for a socket
[u/mdw/putty] / unix / uxcfg.c
index 8d8d65e..e48a9b6 100644 (file)
 #include "dialog.h"
 #include "storage.h"
 
-static void about_handler(union control *ctrl, void *dlg,
-                         void *data, int event)
+void unix_setup_config_box(struct controlbox *b, int midsession, int protocol)
 {
-    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;
+    struct controlset *s;
     union control *c;
-    int i;
-
-    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(win));
-       c->generic.column = 0;
-    }
 
     /*
-     * The Config structure contains two Unix-specific elements
-     * which are not configured in here: stamp_utmp and
-     * login_shell. This is because pterm does not put up a
-     * configuration box right at the start, which is the only time
-     * when these elements would be useful to configure.
+     * The Conf structure contains two Unix-specific elements which
+     * are not configured in here: stamp_utmp and login_shell. This
+     * is because pterm does not put up a configuration box right at
+     * the start, which is the only time when these elements would
+     * be useful to configure.
      */
 
     /*
@@ -51,93 +32,17 @@ void unix_setup_config_box(struct controlbox *b, int midsession, void *win)
     s->ctrls[0]->editbox.has_list = 0;
 
     /*
-     * GTK makes it rather easier to put the scrollbar on the left
-     * than Windows does!
-     */
-    s = ctrl_getset(b, "Window", "scrollback",
-                   "Control the scrollback in the window");
-    ctrl_checkbox(s, "Scrollbar on left", 'l',
-                 HELPCTX(no_help),
-                 dlg_stdcheckbox_handler,
-                  I(offsetof(Config,scrollbar_on_left)));
-    /*
-     * Really this wants to go just after `Display scrollbar'. See
-     * if we can find that control, and do some shuffling.
-     */
-    for (i = 0; i < s->ncontrols; i++) {
-        c = s->ctrls[i];
-        if (c->generic.type == CTRL_CHECKBOX &&
-            c->generic.context.i == offsetof(Config,scrollbar)) {
-            /*
-             * Control i is the scrollbar checkbox.
-             * Control s->ncontrols-1 is the scrollbar-on-left one.
-             */
-            if (i < s->ncontrols-2) {
-                c = s->ctrls[s->ncontrols-1];
-                memmove(s->ctrls+i+2, s->ctrls+i+1,
-                        (s->ncontrols-i-2)*sizeof(union control *));
-                s->ctrls[i+1] = c;
-            }
-            break;
-        }
-    }
-
-    /*
-     * X requires three more fonts: bold, wide, and wide-bold; also
-     * we need the fiddly shadow-bold-offset control. This would
-     * make the Window/Appearance panel rather unwieldy and large,
-     * so I think the sensible thing here is to _move_ this
-     * controlset into a separate Window/Fonts panel!
-     */
-    s2 = ctrl_getset(b, "Window/Appearance", "font",
-                     "Font settings");
-    /* Remove this controlset from b. */
-    for (i = 0; i < b->nctrlsets; i++) {
-        if (b->ctrlsets[i] == s2) {
-            memmove(b->ctrlsets+i, b->ctrlsets+i+1,
-                    (b->nctrlsets-i-1) * sizeof(*b->ctrlsets));
-            b->nctrlsets--;
-            break;
-        }
-    }
-    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", 'f',
-                HELPCTX(no_help),
-                dlg_stdfontsel_handler, I(offsetof(Config,font)));
-    ctrl_fontsel(s, "Font used for wide (CJK) text", 'w',
-                HELPCTX(no_help),
-                dlg_stdfontsel_handler, I(offsetof(Config,widefont)));
-    s = ctrl_getset(b, "Window/Fonts", "fontbold",
-                    "Fonts for displaying bolded text");
-    ctrl_fontsel(s, "Font used for bolded text", 'b',
-                HELPCTX(no_help),
-                dlg_stdfontsel_handler, I(offsetof(Config,boldfont)));
-    ctrl_fontsel(s, "Font used for bold wide text", 'i',
-                HELPCTX(no_help),
-                dlg_stdfontsel_handler, I(offsetof(Config,wideboldfont)));
-    ctrl_text(s, "If you leave the bold font selectors blank, bold text"
-              " will be displayed by overprinting (\"shadow bold\"). Note"
-              " that this only applies if you have not requested bolding"
-              " to be done by changing the text colour.",
-              HELPCTX(no_help));
-    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);
-    {
+    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->generic.context.i == CONF_proxy_type) {
+               assert(c->generic.handler == conf_radiobutton_handler);
                c->radio.nbuttons++;
                c->radio.buttons =
                    sresize(c->radio.buttons, c->radio.nbuttons, char *);
@@ -153,9 +58,8 @@ void unix_setup_config_box(struct controlbox *b, int midsession, void *win)
        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);
+               c->generic.context.i == CONF_proxy_telnet_command) {
+               assert(c->generic.handler == conf_editbox_handler);
                sfree(c->generic.label);
                c->generic.label = dupstr("Telnet command, or local"
                                          " proxy command");
@@ -164,4 +68,12 @@ void unix_setup_config_box(struct controlbox *b, int midsession, void *win)
        }
     }
 
+    /*
+     * Serial back end is available on Unix. However, we have to
+     * mask out a couple of the configuration options: mark and
+     * space parity are not conveniently supported, and neither is
+     * DSR/DTR flow control.
+     */
+    if (!midsession || (protocol == PROT_SERIAL))
+        ser_setup_config_box(b, midsession, 0x07, 0x07);
 }