Mercurial > dwindows
comparison win/dw.c @ 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 | c836603d3f14 |
children | a2d556368be1 |
comparison
equal
deleted
inserted
replaced
1867:a3e356948426 | 1868:dc3260e1a915 |
---|---|
1932 { | 1932 { |
1933 if(tmp->window == tem->hdr.hwndFrom && !dw_window_get_data(tmp->window, "_dw_select_item")) | 1933 if(tmp->window == tem->hdr.hwndFrom && !dw_window_get_data(tmp->window, "_dw_select_item")) |
1934 { | 1934 { |
1935 int (DWSIGNAL *treeselectfunc)(HWND, HTREEITEM, char *, void *, void *) = tmp->signalfunction; | 1935 int (DWSIGNAL *treeselectfunc)(HWND, HTREEITEM, char *, void *, void *) = tmp->signalfunction; |
1936 TVITEM tvi; | 1936 TVITEM tvi; |
1937 void **ptrs; | 1937 TCHAR textbuf[1025] = {0}, *textptr = textbuf; |
1938 | 1938 |
1939 tvi.mask = TVIF_HANDLE | TVIF_PARAM; | 1939 tvi.mask = TVIF_HANDLE | TVIF_PARAM | TVIF_TEXT; |
1940 tvi.hItem = tem->itemNew.hItem; | 1940 tvi.hItem = tem->itemNew.hItem; |
1941 tvi.pszText = textbuf; | |
1942 tvi.cchTextMax = 1024; | |
1941 | 1943 |
1942 TreeView_GetItem(tmp->window, &tvi); | 1944 TreeView_GetItem(tmp->window, &tvi); |
1943 | 1945 |
1944 ptrs = (void **)tvi.lParam; | 1946 result = treeselectfunc(tmp->window, tem->itemNew.hItem, WideToUTF8(textptr), tmp->data, (void *)tvi.lParam); |
1945 if(ptrs) | |
1946 result = treeselectfunc(tmp->window, tem->itemNew.hItem, (char *)ptrs[0], tmp->data, (void *)ptrs[1]); | |
1947 | 1947 |
1948 tmp = NULL; | 1948 tmp = NULL; |
1949 } | 1949 } |
1950 } | 1950 } |
1951 else if(tem->hdr.code == TVN_ITEMEXPANDED && tmp->message == TVN_ITEMEXPANDED) | 1951 else if(tem->hdr.code == TVN_ITEMEXPANDED && tmp->message == TVN_ITEMEXPANDED) |
1964 { | 1964 { |
1965 int (DWSIGNAL *containercontextfunc)(HWND, char *, int, int, void *, void *) = tmp->signalfunction; | 1965 int (DWSIGNAL *containercontextfunc)(HWND, char *, int, int, void *, void *) = tmp->signalfunction; |
1966 HTREEITEM hti; | 1966 HTREEITEM hti; |
1967 TVITEM tvi; | 1967 TVITEM tvi; |
1968 TVHITTESTINFO thi; | 1968 TVHITTESTINFO thi; |
1969 void **ptrs = NULL; | 1969 void *itemdata = NULL; |
1970 LONG x, y; | 1970 LONG x, y; |
1971 TCHAR textbuf[1025] = {0}, *textptr = textbuf; | |
1971 | 1972 |
1972 dw_pointer_query_pos(&x, &y); | 1973 dw_pointer_query_pos(&x, &y); |
1973 | 1974 |
1974 thi.pt.x = x; | 1975 thi.pt.x = x; |
1975 thi.pt.y = y; | 1976 thi.pt.y = y; |
1978 | 1979 |
1979 hti = TreeView_HitTest(tmp->window, &thi); | 1980 hti = TreeView_HitTest(tmp->window, &thi); |
1980 | 1981 |
1981 if(hti) | 1982 if(hti) |
1982 { | 1983 { |
1983 tvi.mask = TVIF_HANDLE | TVIF_PARAM; | 1984 tvi.mask = TVIF_HANDLE | TVIF_PARAM | TVIF_TEXT; |
1984 tvi.hItem = hti; | 1985 tvi.hItem = hti; |
1986 tvi.pszText = textbuf; | |
1987 tvi.cchTextMax = 1024; | |
1985 | 1988 |
1986 TreeView_GetItem(tmp->window, &tvi); | 1989 TreeView_GetItem(tmp->window, &tvi); |
1987 TreeView_SelectItem(tmp->window, hti); | 1990 TreeView_SelectItem(tmp->window, hti); |
1988 | 1991 |
1989 ptrs = (void **)tvi.lParam; | 1992 itemdata = (void *)tvi.lParam; |
1990 } | 1993 } |
1991 containercontextfunc(tmp->window, ptrs ? (char *)ptrs[0] : NULL, x, y, tmp->data, ptrs ? ptrs[1] : NULL); | 1994 containercontextfunc(tmp->window, WideToUTF8(textptr), x, y, tmp->data, itemdata); |
1992 tmp = NULL; | 1995 tmp = NULL; |
1993 } | 1996 } |
1994 } | 1997 } |
1995 } | 1998 } |
1996 else if(_tcsnicmp(tmpbuf, WC_LISTVIEW, _tcslen(WC_LISTVIEW)+1)==0) | 1999 else if(_tcsnicmp(tmpbuf, WC_LISTVIEW, _tcslen(WC_LISTVIEW)+1)==0) |
8690 HTREEITEM API dw_tree_insert_after(HWND handle, HTREEITEM item, char *title, HICN icon, HTREEITEM parent, void *itemdata) | 8693 HTREEITEM API dw_tree_insert_after(HWND handle, HTREEITEM item, char *title, HICN icon, HTREEITEM parent, void *itemdata) |
8691 { | 8694 { |
8692 TVITEM tvi; | 8695 TVITEM tvi; |
8693 TVINSERTSTRUCT tvins; | 8696 TVINSERTSTRUCT tvins; |
8694 HTREEITEM hti; | 8697 HTREEITEM hti; |
8695 void **ptrs= malloc(sizeof(void *) * 2); | |
8696 | |
8697 ptrs[0] = title; | |
8698 ptrs[1] = itemdata; | |
8699 | 8698 |
8700 tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM; | 8699 tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM; |
8701 tvi.pszText = UTF8toWide(title); | 8700 tvi.pszText = UTF8toWide(title); |
8702 tvi.lParam = (LPARAM)ptrs; | 8701 tvi.lParam = (LPARAM)itemdata; |
8703 tvi.cchTextMax = (int)_tcslen(tvi.pszText); | 8702 tvi.cchTextMax = (int)_tcslen(tvi.pszText); |
8704 tvi.iSelectedImage = tvi.iImage = _lookup_icon(handle, (HICON)icon, 1); | 8703 tvi.iSelectedImage = tvi.iImage = _lookup_icon(handle, (HICON)icon, 1); |
8705 | 8704 |
8706 tvins.item = tvi; | 8705 tvins.item = tvi; |
8707 tvins.hParent = parent; | 8706 tvins.hParent = parent; |
8724 HTREEITEM API dw_tree_insert(HWND handle, char *title, HICN icon, HTREEITEM parent, void *itemdata) | 8723 HTREEITEM API dw_tree_insert(HWND handle, char *title, HICN icon, HTREEITEM parent, void *itemdata) |
8725 { | 8724 { |
8726 TVITEM tvi; | 8725 TVITEM tvi; |
8727 TVINSERTSTRUCT tvins; | 8726 TVINSERTSTRUCT tvins; |
8728 HTREEITEM hti; | 8727 HTREEITEM hti; |
8729 void **ptrs= malloc(sizeof(void *) * 2); | |
8730 | |
8731 ptrs[0] = title; | |
8732 ptrs[1] = itemdata; | |
8733 | 8728 |
8734 tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM; | 8729 tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM; |
8735 tvi.pszText = UTF8toWide(title); | 8730 tvi.pszText = UTF8toWide(title); |
8736 tvi.lParam = (LPARAM)ptrs; | 8731 tvi.lParam = (LPARAM)itemdata; |
8737 tvi.cchTextMax = (int)_tcslen(tvi.pszText); | 8732 tvi.cchTextMax = (int)_tcslen(tvi.pszText); |
8738 tvi.iSelectedImage = tvi.iImage = _lookup_icon(handle, (HICON)icon, 1); | 8733 tvi.iSelectedImage = tvi.iImage = _lookup_icon(handle, (HICON)icon, 1); |
8739 | 8734 |
8740 tvins.item = tvi; | 8735 tvins.item = tvi; |
8741 tvins.hParent = parent; | 8736 tvins.hParent = parent; |
8755 * icon: Handle to coresponding icon. | 8750 * icon: Handle to coresponding icon. |
8756 */ | 8751 */ |
8757 void API dw_tree_item_change(HWND handle, HTREEITEM item, char *title, HICN icon) | 8752 void API dw_tree_item_change(HWND handle, HTREEITEM item, char *title, HICN icon) |
8758 { | 8753 { |
8759 TVITEM tvi; | 8754 TVITEM tvi; |
8760 void **ptrs; | |
8761 | 8755 |
8762 tvi.mask = TVIF_HANDLE; | 8756 tvi.mask = TVIF_HANDLE; |
8763 tvi.hItem = item; | 8757 tvi.hItem = item; |
8764 | 8758 |
8765 if(TreeView_GetItem(handle, &tvi)) | 8759 if(TreeView_GetItem(handle, &tvi)) |
8766 { | 8760 { |
8767 | |
8768 ptrs = (void **)tvi.lParam; | |
8769 ptrs[0] = title; | |
8770 | |
8771 tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE; | 8761 tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE; |
8772 tvi.pszText = UTF8toWide(title); | 8762 tvi.pszText = UTF8toWide(title); |
8773 tvi.cchTextMax = (int)_tcslen(tvi.pszText); | 8763 tvi.cchTextMax = (int)_tcslen(tvi.pszText); |
8774 tvi.iSelectedImage = tvi.iImage = _lookup_icon(handle, (HICON)icon, 1); | 8764 tvi.iSelectedImage = tvi.iImage = _lookup_icon(handle, (HICON)icon, 1); |
8775 tvi.hItem = (HTREEITEM)item; | 8765 tvi.hItem = (HTREEITEM)item; |