diff --git a/config.c b/config.c index 39740b8d..1fedd284 100644 --- a/config.c +++ b/config.c @@ -90,7 +90,7 @@ struct hostport { void config_protocolbuttons_handler(union control *ctrl, void *dlg, void *data, int event) { - int button, defport; + int button; Config *cfg = (Config *)data; struct hostport *hp = (struct hostport *)ctrl->radio.context.p; @@ -114,15 +114,20 @@ void config_protocolbuttons_handler(union control *ctrl, void *dlg, assert(button >= 0 && button < ctrl->radio.nbuttons); cfg->protocol = ctrl->radio.buttondata[button].i; if (oldproto != cfg->protocol) { - defport = -1; - switch (cfg->protocol) { - case PROT_SSH: defport = 22; break; - case PROT_TELNET: defport = 23; break; - case PROT_RLOGIN: defport = 513; break; - } - if (defport > 0 && cfg->port != defport) { - cfg->port = defport; - } + Backend *ob = backend_from_proto(oldproto); + 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) + cfg->port = nb->default_port; } dlg_refresh(hp->host, dlg); dlg_refresh(hp->port, dlg); diff --git a/raw.c b/raw.c index 49ca1ce2..b4b1108f 100644 --- a/raw.c +++ b/raw.c @@ -280,5 +280,5 @@ Backend raw_backend = { raw_cfg_info, "raw", PROT_RAW, - 1 + 0 }; diff --git a/rlogin.c b/rlogin.c index f9a546e9..e40f1597 100644 --- a/rlogin.c +++ b/rlogin.c @@ -351,5 +351,5 @@ Backend rlogin_backend = { rlogin_cfg_info, "rlogin", PROT_RLOGIN, - 1 + 513 }; diff --git a/unix/uxpty.c b/unix/uxpty.c index 2e165cf2..60dc7f7d 100644 --- a/unix/uxpty.c +++ b/unix/uxpty.c @@ -1087,5 +1087,5 @@ Backend pty_backend = { pty_cfg_info, "pty", -1, - 1 + 0 }; diff --git a/unix/uxser.c b/unix/uxser.c index a12fdec7..92961a7d 100644 --- a/unix/uxser.c +++ b/unix/uxser.c @@ -538,5 +538,5 @@ Backend serial_backend = { serial_cfg_info, "serial", PROT_SERIAL, - 1 + 0 }; diff --git a/windows/winser.c b/windows/winser.c index 1188c46a..ab88406d 100644 --- a/windows/winser.c +++ b/windows/winser.c @@ -456,5 +456,5 @@ Backend serial_backend = { serial_cfg_info, "serial", PROT_SERIAL, - 1 + 0 };