From 1cd480517052e34be81b4b315c25c92d2d964a09 Mon Sep 17 00:00:00 2001 From: simon Date: Mon, 5 Feb 2001 13:42:33 +0000 Subject: [PATCH] Modifications to the new Close On Exit option: - wording change (required a patch to winctrls.c:radioline()) - `only on clean exit' is used when an old-style config says `yes', on the grounds that it's more generally useful than `always' and also we want to map the old default to the new default. git-svn-id: svn://svn.tartarus.org/sgt/putty@928 cda61777-01e9-0310-a592-d414129be87e --- putty.h | 4 ++-- winctrls.c | 19 ++++++++++++++++--- windlg.c | 20 ++++++++++---------- 3 files changed, 28 insertions(+), 15 deletions(-) diff --git a/putty.h b/putty.h index 88774e0d..2e72b565 100644 --- a/putty.h +++ b/putty.h @@ -135,8 +135,8 @@ enum { * Close On Exit behaviours. (cfg.close_on_exit) */ COE_NEVER, /* Never close the window */ - COE_ALWAYS, /* Always close the window */ - COE_NORMAL /* Close window on "normal" (non-error) exits only */ + COE_NORMAL, /* Close window on "normal" (non-error) exits only */ + COE_ALWAYS /* Always close the window */ }; typedef struct { diff --git a/winctrls.c b/winctrls.c index 3e4ce5d8..2ead90f0 100644 --- a/winctrls.c +++ b/winctrls.c @@ -145,6 +145,13 @@ void multiedit(struct ctlpos *cp, ...) { * (you might want this not to equal the number of buttons if you * needed to line up some 2s and some 3s to look good in the same * panel). + * + * There's a bit of a hack in here to ensure that if nacross + * exceeds the actual number of buttons, the rightmost button + * really does get all the space right to the edge of the line, so + * you can do things like + * + * (*) Button1 (*) Button2 (*) ButtonWithReallyLongTitle */ void radioline(struct ctlpos *cp, char *text, int id, int nacross, ...) { @@ -152,6 +159,7 @@ void radioline(struct ctlpos *cp, va_list ap; int group; int i; + char *btext; r.left = GAPBETWEEN; r.top = cp->ypos; r.right = cp->width; r.bottom = STATICHEIGHT; @@ -160,15 +168,19 @@ void radioline(struct ctlpos *cp, va_start(ap, nacross); group = WS_GROUP; i = 0; + btext = va_arg(ap, char *); while (1) { - char *btext; + char *nextbtext; int bid; - btext = va_arg(ap, char *); if (!btext) break; bid = va_arg(ap, int); + nextbtext = va_arg(ap, char *); r.left = GAPBETWEEN + i * (cp->width+GAPBETWEEN)/nacross; - r.right = (i+1) * (cp->width+GAPBETWEEN)/nacross - r.left; + if (nextbtext) + r.right = (i+1) * (cp->width+GAPBETWEEN)/nacross - r.left; + else + r.right = cp->width - r.left; r.top = cp->ypos; r.bottom = RADIOHEIGHT; doctl(cp, r, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP | group, @@ -176,6 +188,7 @@ void radioline(struct ctlpos *cp, btext, bid); group = 0; i++; + btext = nextbtext; } va_end(ap); cp->ypos += r.bottom + GAPBETWEEN; diff --git a/windlg.c b/windlg.c index b7e878d6..f164f3e0 100644 --- a/windlg.c +++ b/windlg.c @@ -205,8 +205,8 @@ enum { IDCX_ABOUT = IDC_ABOUT, IDCX_TVSTATIC, IDCX_TREEVIEW, controlstartvalue, IDC_SESSDEL, IDC_CLOSEEXIT, IDC_COEALWAYS, - IDC_COENORMAL, IDC_COENEVER, + IDC_COENORMAL, sessionpanelend, loggingpanelstart, @@ -540,9 +540,9 @@ static void init_dlg_ctrls(HWND hwnd) { CheckDlgButton (hwnd, IDC_BLINKCUR, cfg.blink_cur); CheckDlgButton (hwnd, IDC_SCROLLBAR, cfg.scrollbar); CheckDlgButton (hwnd, IDC_LOCKSIZE, cfg.locksize); - CheckRadioButton (hwnd, IDC_COEALWAYS, IDC_COENEVER, - cfg.close_on_exit==COE_NEVER ? IDC_COENEVER : - cfg.close_on_exit==COE_NORMAL ? IDC_COENORMAL : IDC_COEALWAYS); + CheckRadioButton (hwnd, IDC_COEALWAYS, IDC_COENORMAL, + cfg.close_on_exit==COE_NORMAL ? IDC_COENORMAL : + cfg.close_on_exit==COE_NEVER ? IDC_COENEVER : IDC_COEALWAYS); CheckDlgButton (hwnd, IDC_CLOSEWARN, cfg.warn_on_close); SetDlgItemText (hwnd, IDC_TTEDIT, cfg.termtype); @@ -704,10 +704,10 @@ static void create_controls(HWND hwnd, int dlgtype, int panel) { endbox(&cp); } beginbox(&cp, NULL, IDC_BOX_SESSION3); - radioline(&cp, "At session end, close &window:", IDC_CLOSEEXIT, 3, + radioline(&cp, "Close &window on exit:", IDC_CLOSEEXIT, 4, "Always", IDC_COEALWAYS, - "On clean exit", IDC_COENORMAL, - "Never", IDC_COENEVER, NULL); + "Never", IDC_COENEVER, + "Only on clean exit", IDC_COENORMAL, NULL); endbox(&cp); } @@ -1605,13 +1605,13 @@ static int GenericMainDlgProc (HWND hwnd, UINT msg, sizeof(cfg.wintitle)-1); break; case IDC_COEALWAYS: - case IDC_COENORMAL: case IDC_COENEVER: + case IDC_COENORMAL: if (HIWORD(wParam) == BN_CLICKED || HIWORD(wParam) == BN_DOUBLECLICKED) { cfg.close_on_exit = IsDlgButtonChecked (hwnd, IDC_COEALWAYS) ? COE_ALWAYS : - IsDlgButtonChecked (hwnd, IDC_COENORMAL) ? COE_NORMAL : - COE_NEVER; + IsDlgButtonChecked (hwnd, IDC_COENEVER) ? COE_NEVER : + COE_NORMAL; } break; case IDC_CLOSEWARN: -- 2.11.0