X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=windows%2Fwinctrls.c;h=428b6e5565a0e449dadf98c6403dd3f73b8436ad;hb=5471539a6738484b48fb938c88dce547a3e4b299;hp=4afd3d0149e74c8cbedcdfa7417d614f6f6fd0f7;hpb=9c75fe9a3fa5e6b709f1c210795d1140ca1be2e8;p=PuTTY.git diff --git a/windows/winctrls.c b/windows/winctrls.c index 4afd3d01..428b6e55 100644 --- a/windows/winctrls.c +++ b/windows/winctrls.c @@ -372,7 +372,6 @@ void checkbox(struct ctlpos *cp, char *text, int id) char *staticwrap(struct ctlpos *cp, HWND hwnd, char *text, int *lines) { HDC hdc = GetDC(hwnd); - int lpx = GetDeviceCaps(hdc, LOGPIXELSX); int width, nlines, j; INT *pwidths, nfit; SIZE size; @@ -448,6 +447,8 @@ char *staticwrap(struct ctlpos *cp, HWND hwnd, char *text, int *lines) if (lines) *lines = nlines; + sfree(pwidths); + return ret; } @@ -1665,7 +1666,9 @@ void winctrl_layout(struct dlgparam *dp, struct winctrls *wc, winctrl_add_shortcuts(dp, c); if (actual_base_id == base_id) base_id += num_ids; - } + } else { + sfree(data); + } if (colstart >= 0) { /* @@ -2102,19 +2105,8 @@ char *dlg_editbox_get(union control *ctrl, void *dlg) { struct dlgparam *dp = (struct dlgparam *)dlg; struct winctrl *c = dlg_findbyctrl(dp, ctrl); - char *ret; - int size; assert(c && c->ctrl->generic.type == CTRL_EDITBOX); - - size = 0; - ret = NULL; - do { - size = size * 4 / 3 + 512; - ret = sresize(ret, size, char); - GetDlgItemText(dp->hwnd, c->base_id+1, ret, size); - } while (!memchr(ret, '\0', size-1)); - - return ret; + return GetDlgItemText_alloc(dp->hwnd, c->base_id+1); } /* The `listbox' functions can also apply to combo boxes. */ @@ -2294,21 +2286,25 @@ void dlg_label_change(union control *ctrl, void *dlg, char const *text) } } -void dlg_filesel_set(union control *ctrl, void *dlg, Filename fn) +void dlg_filesel_set(union control *ctrl, void *dlg, Filename *fn) { struct dlgparam *dp = (struct dlgparam *)dlg; struct winctrl *c = dlg_findbyctrl(dp, ctrl); assert(c && c->ctrl->generic.type == CTRL_FILESELECT); - SetDlgItemText(dp->hwnd, c->base_id+1, fn.path); + SetDlgItemText(dp->hwnd, c->base_id+1, fn->path); } -void dlg_filesel_get(union control *ctrl, void *dlg, Filename *fn) +Filename *dlg_filesel_get(union control *ctrl, void *dlg) { struct dlgparam *dp = (struct dlgparam *)dlg; struct winctrl *c = dlg_findbyctrl(dp, ctrl); + char *tmp; + Filename *ret; assert(c && c->ctrl->generic.type == CTRL_FILESELECT); - GetDlgItemText(dp->hwnd, c->base_id+1, fn->path, lenof(fn->path)); - fn->path[lenof(fn->path)-1] = '\0'; + tmp = GetDlgItemText_alloc(dp->hwnd, c->base_id+1); + ret = filename_from_str(tmp); + sfree(tmp); + return ret; } void dlg_fontsel_set(union control *ctrl, void *dlg, FontSpec *fs) @@ -2373,6 +2369,8 @@ void dlg_set_focus(union control *ctrl, void *dlg) struct winctrl *c = dlg_findbyctrl(dp, ctrl); int id; HWND ctl; + if (!c) + return; switch (ctrl->generic.type) { case CTRL_EDITBOX: id = c->base_id + 1; break; case CTRL_RADIO: @@ -2407,7 +2405,7 @@ void dlg_beep(void *dlg) MessageBeep(0); } -void dlg_error_msg(void *dlg, char *msg) +void dlg_error_msg(void *dlg, const char *msg) { struct dlgparam *dp = (struct dlgparam *)dlg; MessageBox(dp->hwnd, msg, @@ -2533,23 +2531,6 @@ void dlg_set_fixed_pitch_flag(void *dlg, int flag) dp->fixed_pitch_fonts = flag; } -struct perctrl_privdata { - union control *ctrl; - void *data; - int needs_free; -}; - -static int perctrl_privdata_cmp(void *av, void *bv) -{ - struct perctrl_privdata *a = (struct perctrl_privdata *)av; - struct perctrl_privdata *b = (struct perctrl_privdata *)bv; - if (a->ctrl < b->ctrl) - return -1; - else if (a->ctrl > b->ctrl) - return +1; - return 0; -} - void dp_init(struct dlgparam *dp) { dp->nctrltrees = 0; @@ -2559,7 +2540,6 @@ void dp_init(struct dlgparam *dp) memset(dp->shortcuts, 0, sizeof(dp->shortcuts)); dp->hwnd = NULL; dp->wintitle = dp->errtitle = NULL; - dp->privdata = newtree234(perctrl_privdata_cmp); dp->fixed_pitch_fonts = TRUE; } @@ -2571,67 +2551,6 @@ void dp_add_tree(struct dlgparam *dp, struct winctrls *wc) void dp_cleanup(struct dlgparam *dp) { - struct perctrl_privdata *p; - - if (dp->privdata) { - while ( (p = index234(dp->privdata, 0)) != NULL ) { - del234(dp->privdata, p); - if (p->needs_free) - sfree(p->data); - sfree(p); - } - freetree234(dp->privdata); - dp->privdata = NULL; - } sfree(dp->wintitle); sfree(dp->errtitle); } - -void *dlg_get_privdata(union control *ctrl, void *dlg) -{ - struct dlgparam *dp = (struct dlgparam *)dlg; - struct perctrl_privdata tmp, *p; - tmp.ctrl = ctrl; - p = find234(dp->privdata, &tmp, NULL); - if (p) - return p->data; - else - return NULL; -} - -void dlg_set_privdata(union control *ctrl, void *dlg, void *ptr) -{ - struct dlgparam *dp = (struct dlgparam *)dlg; - struct perctrl_privdata tmp, *p; - tmp.ctrl = ctrl; - p = find234(dp->privdata, &tmp, NULL); - if (!p) { - p = snew(struct perctrl_privdata); - p->ctrl = ctrl; - p->needs_free = FALSE; - add234(dp->privdata, p); - } - p->data = ptr; -} - -void *dlg_alloc_privdata(union control *ctrl, void *dlg, size_t size) -{ - struct dlgparam *dp = (struct dlgparam *)dlg; - struct perctrl_privdata tmp, *p; - tmp.ctrl = ctrl; - p = find234(dp->privdata, &tmp, NULL); - if (!p) { - p = snew(struct perctrl_privdata); - p->ctrl = ctrl; - p->needs_free = FALSE; - add234(dp->privdata, p); - } - assert(!p->needs_free); - p->needs_free = TRUE; - /* - * This is an internal allocation routine, so it's allowed to - * use smalloc directly. - */ - p->data = smalloc(size); - return p->data; -}