X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/putty/blobdiff_plain/7e5a1e3104a4f60e60abc5217474bbf403035a94..f43e4b678f0b7aa847a3eeb3fab536058710d69f:/windows/winctrls.c diff --git a/windows/winctrls.c b/windows/winctrls.c index c2d344a1..a618a696 100644 --- a/windows/winctrls.c +++ b/windows/winctrls.c @@ -1050,7 +1050,7 @@ int handle_prefslist(struct prefslist *hdl, hdl->srcitem = LBItemFromPt(dlm->hWnd, dlm->ptCursor, TRUE); hdl->dragging = 0; /* XXX hack Q183115 */ - SetWindowLong(hwnd, DWL_MSGRESULT, TRUE); + SetWindowLongPtr(hwnd, DWLP_MSGRESULT, TRUE); ret |= 1; break; case DL_CANCELDRAG: DrawInsert(hwnd, dlm->hWnd, -1); /* Clear arrow */ @@ -1064,9 +1064,9 @@ int handle_prefslist(struct prefslist *hdl, if (dest > hdl->dummyitem) dest = hdl->dummyitem; DrawInsert (hwnd, dlm->hWnd, dest); if (dest >= 0) - SetWindowLong(hwnd, DWL_MSGRESULT, DL_MOVECURSOR); + SetWindowLongPtr(hwnd, DWLP_MSGRESULT, DL_MOVECURSOR); else - SetWindowLong(hwnd, DWL_MSGRESULT, DL_STOPCURSOR); + SetWindowLongPtr(hwnd, DWLP_MSGRESULT, DL_STOPCURSOR); ret |= 1; break; case DL_DROPPED: if (hdl->dragging) { @@ -1161,10 +1161,11 @@ void progressbar(struct ctlpos *cp, int id) * Return value is a malloc'ed copy of the processed version of the * string. */ -static char *shortcut_escape(char *text, char shortcut) +static char *shortcut_escape(const char *text, char shortcut) { char *ret; - char *p, *q; + char const *p; + char *q; if (!text) return NULL; /* sfree won't choke on this */ @@ -2004,13 +2005,12 @@ int winctrl_handle_command(struct dlgparam *dp, UINT msg, /* * This function can be called to produce context help on a - * control. Returns TRUE if it has actually launched WinHelp. + * control. Returns TRUE if it has actually launched some help. */ int winctrl_context_help(struct dlgparam *dp, HWND hwnd, int id) { int i; struct winctrl *c; - char *cmd; /* * Look up the control ID in our data. @@ -2031,9 +2031,7 @@ int winctrl_context_help(struct dlgparam *dp, HWND hwnd, int id) if (!c->ctrl || !c->ctrl->generic.helpctx.p) return 0; /* no help available for this ctrl */ - cmd = dupprintf("JI(`',`%s')", c->ctrl->generic.helpctx.p); - WinHelp(hwnd, help_path, HELP_COMMAND, (DWORD)cmd); - sfree(cmd); + launch_help(hwnd, c->ctrl->generic.helpctx.p); return 1; } @@ -2196,8 +2194,13 @@ int dlg_listbox_index(union control *ctrl, void *dlg) struct dlgparam *dp = (struct dlgparam *)dlg; struct winctrl *c = dlg_findbyctrl(dp, ctrl); int msg, ret; - assert(c && c->ctrl->generic.type == CTRL_LISTBOX && - !c->ctrl->listbox.multisel); + assert(c && c->ctrl->generic.type == CTRL_LISTBOX); + if (c->ctrl->listbox.multisel) { + assert(c->ctrl->listbox.height != 0); /* not combo box */ + ret = SendDlgItemMessage(dp->hwnd, c->base_id+1, LB_GETSELCOUNT, 0, 0); + if (ret == LB_ERR || ret > 1) + return -1; + } msg = (c->ctrl->listbox.height != 0 ? LB_GETCURSEL : CB_GETCURSEL); ret = SendDlgItemMessage(dp->hwnd, c->base_id+1, msg, 0, 0); if (ret == LB_ERR) @@ -2236,6 +2239,53 @@ void dlg_text_set(union control *ctrl, void *dlg, char const *text) SetDlgItemText(dp->hwnd, c->base_id, text); } +void dlg_label_change(union control *ctrl, void *dlg, char const *text) +{ + struct dlgparam *dp = (struct dlgparam *)dlg; + struct winctrl *c = dlg_findbyctrl(dp, ctrl); + char *escaped = NULL; + int id = -1; + + assert(c); + switch (c->ctrl->generic.type) { + case CTRL_EDITBOX: + escaped = shortcut_escape(text, c->ctrl->editbox.shortcut); + id = c->base_id; + break; + case CTRL_RADIO: + escaped = shortcut_escape(text, c->ctrl->radio.shortcut); + id = c->base_id; + break; + case CTRL_CHECKBOX: + escaped = shortcut_escape(text, ctrl->checkbox.shortcut); + id = c->base_id; + break; + case CTRL_BUTTON: + escaped = shortcut_escape(text, ctrl->button.shortcut); + id = c->base_id; + break; + case CTRL_LISTBOX: + escaped = shortcut_escape(text, ctrl->listbox.shortcut); + id = c->base_id; + break; + case CTRL_FILESELECT: + escaped = shortcut_escape(text, ctrl->fileselect.shortcut); + id = c->base_id; + break; + case CTRL_FONTSELECT: + escaped = shortcut_escape(text, ctrl->fontselect.shortcut); + id = c->base_id; + break; + default: + assert(!"Can't happen"); + break; + } + if (escaped) { + SetDlgItemText(dp->hwnd, id, escaped); + sfree(escaped); + } +} + void dlg_filesel_set(union control *ctrl, void *dlg, Filename fn) { struct dlgparam *dp = (struct dlgparam *)dlg;