Tweak to r7635: when changing between protocols in the configuration dialog

and avoiding trashing a non-default port, don't treat a port of 0 as special;
this was causing defaults to "freeze in" for sequences of clicks like SSH,
Raw, Telnet.
Arrange that a port of 0 (which in a backend indicates no default) is displayed
as a blank in the port box, to make this less jarring.

[originally from svn r9077]
[r7635 == db7cc1cba6]
This commit is contained in:
Jacob Nevins 2011-01-14 19:57:00 +00:00
Родитель c5228adce3
Коммит b570f28224
1 изменённых файлов: 16 добавлений и 11 удалений

Просмотреть файл

@ -52,7 +52,7 @@ static void config_port_handler(union control *ctrl, void *dlg,
char buf[80];
/*
* This function works just like the standard edit box handler,
* This function works similarly to the standard edit box handler,
* only it has to choose the control's label and text from two
* different places depending on the protocol.
*/
@ -66,7 +66,11 @@ static void config_port_handler(union control *ctrl, void *dlg,
sprintf(buf, "%d", cfg->serspeed);
} else {
dlg_label_change(ctrl, dlg, PORT_BOX_TITLE);
sprintf(buf, "%d", cfg->port);
if (cfg->port != 0)
sprintf(buf, "%d", cfg->port);
else
/* Display an (invalid) port of 0 as blank */
buf[0] = '\0';
}
dlg_editbox_set(ctrl, dlg, buf);
} else if (event == EVENT_VALCHANGE) {
@ -118,15 +122,16 @@ void config_protocolbuttons_handler(union control *ctrl, void *dlg,
Backend *nb = backend_from_proto(cfg->protocol);
assert(ob);
assert(nb);
/* Iff the user hasn't changed the port from the protocol
* default (if any), update it with the new protocol's
* default.
* (XXX: this isn't perfect; a default can become permanent
* by going via the serial backend. However, it helps with
* the common case of tabbing through the controls in order
* and setting a non-default port.) */
if (cfg->port == ob->default_port &&
cfg->port > 0 && nb->default_port > 0)
/* Iff the user hasn't changed the port from the old protocol's
* default, update it with the new protocol's default.
* (This includes a "default" of 0, implying that there is no
* sensible default for that protocol; in this case it's
* displayed as a blank.)
* This helps with the common case of tabbing through the
* controls in order and setting a non-default port before
* getting to the protocol; we want that non-default port
* to be preserved. */
if (cfg->port == ob->default_port)
cfg->port = nb->default_port;
}
dlg_refresh(hp->host, dlg);