X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/d437fc9de7950e99879184b01c6c81e88d607b9a..3f935d5bf975b26836da2fac5cd6e3df67a5e184:/config.c diff --git a/config.c b/config.c index 59546175..7204a6c3 100644 --- a/config.c +++ b/config.c @@ -110,7 +110,7 @@ static void cipherlist_handler(union control *ctrl, void *dlg, break; } } - dlg_listbox_addwithindex(ctrl, dlg, cstr, c); + dlg_listbox_addwithid(ctrl, dlg, cstr, c); } dlg_update_done(ctrl, dlg); @@ -179,9 +179,9 @@ static void sshbug_handler(union control *ctrl, void *dlg, if (event == EVENT_REFRESH) { dlg_update_start(ctrl, dlg); dlg_listbox_clear(ctrl, dlg); - dlg_listbox_addwithindex(ctrl, dlg, "Auto", AUTO); - dlg_listbox_addwithindex(ctrl, dlg, "Off", FORCE_OFF); - dlg_listbox_addwithindex(ctrl, dlg, "On", FORCE_ON); + dlg_listbox_addwithid(ctrl, dlg, "Auto", AUTO); + dlg_listbox_addwithid(ctrl, dlg, "Off", FORCE_OFF); + dlg_listbox_addwithid(ctrl, dlg, "On", FORCE_ON); switch (*(int *)ATOFFSET(data, ctrl->listbox.context.i)) { case AUTO: dlg_listbox_select(ctrl, dlg, 0); break; case FORCE_OFF: dlg_listbox_select(ctrl, dlg, 1); break; @@ -305,7 +305,13 @@ static void sessionsaver_handler(union control *ctrl, void *dlg, savedsession[0] = '\0'; } } - save_settings(savedsession, !isdef, cfg); + { + char *errmsg = save_settings(savedsession, !isdef, cfg); + if (errmsg) { + dlg_error_msg(dlg, errmsg); + sfree(errmsg); + } + } get_sesslist(ssd->sesslist, FALSE); get_sesslist(ssd->sesslist, TRUE); dlg_refresh(ssd->editbox, dlg); @@ -328,7 +334,7 @@ static void sessionsaver_handler(union control *ctrl, void *dlg, * there was a session selected in that which had a * valid host name in it, then load it and go. */ - if (dlg_last_focused(dlg) == ssd->listbox && !*cfg->host) { + if (dlg_last_focused(ctrl, dlg) == ssd->listbox && !*cfg->host) { Config cfg2; if (!load_selected_session(ssd, savedsession, dlg, &cfg2)) { dlg_beep(dlg); @@ -396,7 +402,7 @@ static void charclass_handler(union control *ctrl, void *dlg, } struct colour_data { - union control *listbox, *rgbtext, *button; + union control *listbox, *redit, *gedit, *bedit, *button; }; static const char *const colours[] = { @@ -429,7 +435,9 @@ static void colour_handler(union control *ctrl, void *dlg, for (i = 0; i < lenof(colours); i++) dlg_listbox_add(ctrl, dlg, colours[i]); dlg_update_done(ctrl, dlg); - dlg_text_set(cd->rgbtext, dlg, ""); + dlg_editbox_set(cd->redit, dlg, ""); + dlg_editbox_set(cd->gedit, dlg, ""); + dlg_editbox_set(cd->bedit, dlg, ""); } } else if (event == EVENT_SELCHANGE) { if (ctrl == cd->listbox) { @@ -444,6 +452,25 @@ static void colour_handler(union control *ctrl, void *dlg, b = cfg->colours[i][2]; update = TRUE; } + } else if (event == EVENT_VALCHANGE) { + if (ctrl == cd->redit || ctrl == cd->gedit || ctrl == cd->bedit) { + /* The user has changed the colour using the edit boxes. */ + char buf[80]; + int i, cval; + + dlg_editbox_get(ctrl, dlg, buf, lenof(buf)); + cval = atoi(buf) & 255; + + i = dlg_listbox_index(cd->listbox, dlg); + if (i >= 0) { + if (ctrl == cd->redit) + cfg->colours[i][0] = cval; + else if (ctrl == cd->gedit) + cfg->colours[i][1] = cval; + else if (ctrl == cd->bedit) + cfg->colours[i][2] = cval; + } + } } else if (event == EVENT_ACTION) { if (ctrl == cd->button) { int i = dlg_listbox_index(cd->listbox, dlg); @@ -480,8 +507,9 @@ static void colour_handler(union control *ctrl, void *dlg, if (update) { char buf[40]; - sprintf(buf, "%02x/%02x/%02x", r, g, b); - dlg_text_set(cd->rgbtext, dlg, buf); + sprintf(buf, "%d", r); dlg_editbox_set(cd->redit, dlg, buf); + sprintf(buf, "%d", g); dlg_editbox_set(cd->gedit, dlg, buf); + sprintf(buf, "%d", b); dlg_editbox_set(cd->bedit, dlg, buf); } } @@ -596,6 +624,11 @@ static void portfwd_handler(union control *ctrl, void *dlg, p += strlen(p) + 1; } dlg_update_done(ctrl, dlg); + } else if (ctrl == pfd->direction) { + /* + * Default is Local. + */ + dlg_radiobutton_set(ctrl, dlg, 0); } } else if (event == EVENT_ACTION) { if (ctrl == pfd->addbutton) { @@ -700,6 +733,7 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist, ssd->okbutton->generic.column = 3; ssd->cancelbutton = ctrl_pushbutton(s, "Cancel", 'c', HELPCTX(no_help), sessionsaver_handler, P(ssd)); + ssd->cancelbutton->button.iscancel = TRUE; ssd->cancelbutton->generic.column = 4; /* We carefully don't close the 5-column part, so that platform- * specific add-ons can put extra buttons alongside Open and Cancel. */ @@ -754,6 +788,11 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist, * than alongside that edit box. */ ctrl_columns(s, 1, 100); ctrl_columns(s, 2, 75, 25); + ssd->listbox = ctrl_listbox(s, NULL, NO_SHORTCUT, + HELPCTX(session_saved), + sessionsaver_handler, P(ssd)); + ssd->listbox->generic.column = 0; + ssd->listbox->listbox.height = 7; ssd->loadbutton = ctrl_pushbutton(s, "Load", 'l', HELPCTX(session_saved), sessionsaver_handler, P(ssd)); @@ -766,11 +805,6 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist, HELPCTX(session_saved), sessionsaver_handler, P(ssd)); ssd->delbutton->generic.column = 1; - ssd->listbox = ctrl_listbox(s, NULL, NO_SHORTCUT, - HELPCTX(session_saved), - sessionsaver_handler, P(ssd)); - ssd->listbox->generic.column = 0; - ssd->listbox->listbox.height = 7; ctrl_columns(s, 1, 100); } @@ -1113,7 +1147,7 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist, charclass_handler, P(ccd)); ccd->listbox->listbox.multisel = 1; ccd->listbox->listbox.ncols = 4; - ccd->listbox->listbox.percentages = smalloc(4*sizeof(int)); + ccd->listbox->listbox.percentages = snewn(4, int); ccd->listbox->listbox.percentages[0] = 15; ccd->listbox->listbox.percentages[1] = 25; ccd->listbox->listbox.percentages[2] = 20; @@ -1150,10 +1184,18 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist, cd->listbox = ctrl_listbox(s, "Select a colour to adjust:", 'u', HELPCTX(colours_config), colour_handler, P(cd)); cd->listbox->generic.column = 0; + cd->listbox->listbox.height = 7; c = ctrl_text(s, "RGB value:", HELPCTX(colours_config)); c->generic.column = 1; - cd->rgbtext = ctrl_text(s, "00/00/00", HELPCTX(colours_config)); - cd->rgbtext->generic.column = 1; + cd->redit = ctrl_editbox(s, "Red", 'r', 50, HELPCTX(colours_config), + colour_handler, P(cd), P(NULL)); + cd->redit->generic.column = 1; + cd->gedit = ctrl_editbox(s, "Green", 'n', 50, HELPCTX(colours_config), + colour_handler, P(cd), P(NULL)); + cd->gedit->generic.column = 1; + cd->bedit = ctrl_editbox(s, "Blue", 'e', 50, HELPCTX(colours_config), + colour_handler, P(cd), P(NULL)); + cd->bedit->generic.column = 1; cd->button = ctrl_pushbutton(s, "Modify", 'm', HELPCTX(colours_config), colour_handler, P(cd)); cd->button->generic.column = 1; @@ -1309,7 +1351,7 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist, environ_handler, P(ed)); ed->listbox->listbox.height = 3; ed->listbox->listbox.ncols = 2; - ed->listbox->listbox.percentages = smalloc(2*sizeof(int)); + ed->listbox->listbox.percentages = snewn(2, int); ed->listbox->listbox.percentages[0] = 30; ed->listbox->listbox.percentages[1] = 70; } @@ -1489,7 +1531,7 @@ void setup_config_box(struct controlbox *b, struct sesslist *sesslist, portfwd_handler, P(pfd)); pfd->listbox->listbox.height = 3; pfd->listbox->listbox.ncols = 2; - pfd->listbox->listbox.percentages = smalloc(2*sizeof(int)); + pfd->listbox->listbox.percentages = snewn(2, int); pfd->listbox->listbox.percentages[0] = 20; pfd->listbox->listbox.percentages[1] = 80; ctrl_tabdelay(s, pfd->rembutton);