X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=windows%2Fwinctrls.c;h=9bee927472d5fb36bd7e1a653682bd6cbe99e6ba;hb=42c592c4ef024af30af91241f651f699d6dbff0b;hp=c9300cdd82d10057c08cdda34a0a1d8d011cc407;hpb=535d77abf017ef36de213e4d1313c35e760788b4;p=PuTTY.git diff --git a/windows/winctrls.c b/windows/winctrls.c index c9300cdd..9bee9274 100644 --- a/windows/winctrls.c +++ b/windows/winctrls.c @@ -448,6 +448,8 @@ char *staticwrap(struct ctlpos *cp, HWND hwnd, char *text, int *lines) if (lines) *lines = nlines; + sfree(pwidths); + return ret; } @@ -1665,7 +1667,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) { /* @@ -2366,6 +2370,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: @@ -2526,23 +2532,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; @@ -2552,7 +2541,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; } @@ -2564,67 +2552,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; -}