From a4451dd11df30dc2d0d262dd6c36642aa2a02b91 Mon Sep 17 00:00:00 2001 From: jacob Date: Sun, 1 Jul 2007 15:47:31 +0000 Subject: [PATCH] Implement Marcin Bulandra's suggestion of only automatically updating the port number in the GUI when the connection type is changed if the current port number is the standard one for the current protocol. It's not perfect, but it should make the common case of tabbing through the Session panel easier when starting non-SSH connections on odd ports. git-svn-id: svn://svn.tartarus.org/sgt/putty@7635 cda61777-01e9-0310-a592-d414129be87e --- config.c | 25 +++++++++++++++---------- raw.c | 2 +- rlogin.c | 2 +- unix/uxpty.c | 2 +- unix/uxser.c | 2 +- windows/winser.c | 2 +- 6 files changed, 20 insertions(+), 15 deletions(-) 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 }; -- 2.11.0