Implement Marcin Bulandra's suggestion of only automatically updating the
authorjacob <jacob@cda61777-01e9-0310-a592-d414129be87e>
Sun, 1 Jul 2007 15:47:31 +0000 (15:47 +0000)
committerjacob <jacob@cda61777-01e9-0310-a592-d414129be87e>
Sun, 1 Jul 2007 15:47:31 +0000 (15:47 +0000)
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
raw.c
rlogin.c
unix/uxpty.c
unix/uxser.c
windows/winser.c

index 39740b8..1fedd28 100644 (file)
--- 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 49ca1ce..b4b1108 100644 (file)
--- a/raw.c
+++ b/raw.c
@@ -280,5 +280,5 @@ Backend raw_backend = {
     raw_cfg_info,
     "raw",
     PROT_RAW,
-    1
+    0
 };
index f9a546e..e40f159 100644 (file)
--- a/rlogin.c
+++ b/rlogin.c
@@ -351,5 +351,5 @@ Backend rlogin_backend = {
     rlogin_cfg_info,
     "rlogin",
     PROT_RLOGIN,
-    1
+    513
 };
index 2e165cf..60dc7f7 100644 (file)
@@ -1087,5 +1087,5 @@ Backend pty_backend = {
     pty_cfg_info,
     "pty",
     -1,
-    1
+    0
 };
index a12fdec..92961a7 100644 (file)
@@ -538,5 +538,5 @@ Backend serial_backend = {
     serial_cfg_info,
     "serial",
     PROT_SERIAL,
-    1
+    0
 };
index 1188c46..ab88406 100644 (file)
@@ -456,5 +456,5 @@ Backend serial_backend = {
     serial_cfg_info,
     "serial",
     PROT_SERIAL,
-    1
+    0
 };