Implemented Change Settings under Unix. We are gradually getting there.
[u/mdw/putty] / config.c
index 239247d..e8b7c57 100644 (file)
--- a/config.c
+++ b/config.c
@@ -256,8 +256,12 @@ static void sessionsaver_handler(union control *ctrl, void *dlg,
      * allocate space to store the current contents of the saved
      * session edit box (since it must persist even when we switch
      * panels, but is not part of the Config).
+     * 
+     * Of course, this doesn't need to be done mid-session.
      */
-    if (!dlg_get_privdata(ssd->editbox, dlg)) {
+    if (!ssd->editbox) {
+        savedsession = NULL;
+    } else if (!dlg_get_privdata(ssd->editbox, dlg)) {
        savedsession = (char *)
            dlg_alloc_privdata(ssd->editbox, dlg, SAVEDSESSION_LEN);
        savedsession[0] = '\0';
@@ -333,6 +337,11 @@ static void sessionsaver_handler(union control *ctrl, void *dlg,
                dlg_refresh(ssd->listbox, dlg);
            }
        } else if (ctrl == ssd->okbutton) {
+            if (!savedsession) {
+                /* In a mid-session Change Settings, Apply is always OK. */
+               dlg_end(dlg, 1);
+                return;
+            }
            /*
             * Annoying special case. If the `Open' button is
             * pressed while no host name is currently set, _and_
@@ -726,9 +735,11 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
     struct environ_data *ed;
     struct portfwd_data *pfd;
     union control *c;
+    char *str;
 
     ssd = (struct sessionsaver_data *)
        ctrl_alloc(b, sizeof(struct sessionsaver_data));
+    memset(ssd, 0, sizeof(*ssd));
     ssd->sesslist = (midsession ? NULL : sesslist);
 
     /*
@@ -754,7 +765,9 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
     /*
      * The Session panel.
      */
-    ctrl_settitle(b, "Session", "Basic options for your PuTTY session");
+    str = dupprintf("Basic options for your %s session", appname);
+    ctrl_settitle(b, "Session", str);
+    sfree(str);
 
     if (!midsession) {
        s = ctrl_getset(b, "Session", "hostport",
@@ -1011,7 +1024,9 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
     /*
      * The Window panel.
      */
-    ctrl_settitle(b, "Window", "Options controlling PuTTY's window");
+    str = dupprintf("Options controlling %s's window", appname);
+    ctrl_settitle(b, "Window", str);
+    sfree(str);
 
     s = ctrl_getset(b, "Window", "size", "Set the size of the window");
     ctrl_columns(s, 2, 50, 50);
@@ -1047,8 +1062,9 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
     /*
      * The Window/Appearance panel.
      */
-    ctrl_settitle(b, "Window/Appearance",
-                 "Configure the appearance of PuTTY's window");
+    str = dupprintf("Configure the appearance of %s's window", appname);
+    ctrl_settitle(b, "Window/Appearance", str);
+    sfree(str);
 
     s = ctrl_getset(b, "Window/Appearance", "cursor",
                    "Adjust the use of the cursor");
@@ -1085,8 +1101,9 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
     /*
      * The Window/Behaviour panel.
      */
-    ctrl_settitle(b, "Window/Behaviour",
-                 "Configure the behaviour of PuTTY's window");
+    str = dupprintf("Configure the behaviour of %s's window", appname);
+    ctrl_settitle(b, "Window/Behaviour", str);
+    sfree(str);
 
     s = ctrl_getset(b, "Window/Behaviour", "title",
                    "Adjust the behaviour of the window title");
@@ -1116,8 +1133,9 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
                  'r', 100, HELPCTX(translation_codepage),
                  codepage_handler, P(NULL), P(NULL));
 
-    s = ctrl_getset(b, "Window/Translation", "linedraw",
-                   "Adjust how PuTTY displays line drawing characters");
+    str = dupprintf("Adjust how %s displays line drawing characters", appname);
+    s = ctrl_getset(b, "Window/Translation", "linedraw", str);
+    sfree(str);
     ctrl_radiobuttons(s, "Handling of line drawing characters:", NO_SHORTCUT,1,
                      HELPCTX(translation_linedraw),
                      dlg_stdradiobutton_handler,
@@ -1187,8 +1205,9 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
                  HELPCTX(colours_bold),
                  dlg_stdcheckbox_handler, I(offsetof(Config,bold_colour)));
 
-    s = ctrl_getset(b, "Window/Colours", "adjust",
-                   "Adjust the precise colours PuTTY displays");
+    str = dupprintf("Adjust the precise colours %s displays", appname);
+    s = ctrl_getset(b, "Window/Colours", "adjust", str);
+    sfree(str);
     ctrl_text(s, "Select a colour from the list, and then click the"
              " Modify button to change its appearance.",
              HELPCTX(colours_config));