Mercurial > dwindows
changeset 1868:dc3260e1a915
Use the cached text from the tree on Windows instead of caching parameters...
This also fixes a memory leak in the tree code.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Thu, 21 Mar 2013 21:14:04 +0000 |
parents | a3e356948426 |
children | a2d556368be1 |
files | win/dw.c |
diffstat | 1 files changed, 15 insertions(+), 25 deletions(-) [+] |
line wrap: on
line diff
--- a/win/dw.c Tue Mar 19 07:03:29 2013 +0000 +++ b/win/dw.c Thu Mar 21 21:14:04 2013 +0000 @@ -1934,16 +1934,16 @@ { int (DWSIGNAL *treeselectfunc)(HWND, HTREEITEM, char *, void *, void *) = tmp->signalfunction; TVITEM tvi; - void **ptrs; - - tvi.mask = TVIF_HANDLE | TVIF_PARAM; + TCHAR textbuf[1025] = {0}, *textptr = textbuf; + + tvi.mask = TVIF_HANDLE | TVIF_PARAM | TVIF_TEXT; tvi.hItem = tem->itemNew.hItem; + tvi.pszText = textbuf; + tvi.cchTextMax = 1024; TreeView_GetItem(tmp->window, &tvi); - ptrs = (void **)tvi.lParam; - if(ptrs) - result = treeselectfunc(tmp->window, tem->itemNew.hItem, (char *)ptrs[0], tmp->data, (void *)ptrs[1]); + result = treeselectfunc(tmp->window, tem->itemNew.hItem, WideToUTF8(textptr), tmp->data, (void *)tvi.lParam); tmp = NULL; } @@ -1966,8 +1966,9 @@ HTREEITEM hti; TVITEM tvi; TVHITTESTINFO thi; - void **ptrs = NULL; + void *itemdata = NULL; LONG x, y; + TCHAR textbuf[1025] = {0}, *textptr = textbuf; dw_pointer_query_pos(&x, &y); @@ -1980,15 +1981,17 @@ if(hti) { - tvi.mask = TVIF_HANDLE | TVIF_PARAM; + tvi.mask = TVIF_HANDLE | TVIF_PARAM | TVIF_TEXT; tvi.hItem = hti; + tvi.pszText = textbuf; + tvi.cchTextMax = 1024; TreeView_GetItem(tmp->window, &tvi); TreeView_SelectItem(tmp->window, hti); - ptrs = (void **)tvi.lParam; + itemdata = (void *)tvi.lParam; } - containercontextfunc(tmp->window, ptrs ? (char *)ptrs[0] : NULL, x, y, tmp->data, ptrs ? ptrs[1] : NULL); + containercontextfunc(tmp->window, WideToUTF8(textptr), x, y, tmp->data, itemdata); tmp = NULL; } } @@ -8692,14 +8695,10 @@ TVITEM tvi; TVINSERTSTRUCT tvins; HTREEITEM hti; - void **ptrs= malloc(sizeof(void *) * 2); - - ptrs[0] = title; - ptrs[1] = itemdata; tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM; tvi.pszText = UTF8toWide(title); - tvi.lParam = (LPARAM)ptrs; + tvi.lParam = (LPARAM)itemdata; tvi.cchTextMax = (int)_tcslen(tvi.pszText); tvi.iSelectedImage = tvi.iImage = _lookup_icon(handle, (HICON)icon, 1); @@ -8726,14 +8725,10 @@ TVITEM tvi; TVINSERTSTRUCT tvins; HTREEITEM hti; - void **ptrs= malloc(sizeof(void *) * 2); - - ptrs[0] = title; - ptrs[1] = itemdata; tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM; tvi.pszText = UTF8toWide(title); - tvi.lParam = (LPARAM)ptrs; + tvi.lParam = (LPARAM)itemdata; tvi.cchTextMax = (int)_tcslen(tvi.pszText); tvi.iSelectedImage = tvi.iImage = _lookup_icon(handle, (HICON)icon, 1); @@ -8757,17 +8752,12 @@ void API dw_tree_item_change(HWND handle, HTREEITEM item, char *title, HICN icon) { TVITEM tvi; - void **ptrs; tvi.mask = TVIF_HANDLE; tvi.hItem = item; if(TreeView_GetItem(handle, &tvi)) { - - ptrs = (void **)tvi.lParam; - ptrs[0] = title; - tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE; tvi.pszText = UTF8toWide(title); tvi.cchTextMax = (int)_tcslen(tvi.pszText);