Mercurial > dwindows
comparison win/dw.c @ 291:70480069392b
Fixed memory leak in the tree control on Windows.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Sun, 23 Mar 2003 16:05:32 +0000 |
parents | 3431e445d831 |
children | 651b70046c6a |
comparison
equal
deleted
inserted
replaced
290:8ea5b2c35bfe | 291:70480069392b |
---|---|
363 { | 363 { |
364 void *data = dw_window_get_data(handle, "_dw_percent"); | 364 void *data = dw_window_get_data(handle, "_dw_percent"); |
365 | 365 |
366 if(data) | 366 if(data) |
367 free(data); | 367 free(data); |
368 } | |
369 else if(strnicmp(tmpbuf, WC_TREEVIEW, strlen(WC_TREEVIEW)+1)==0) | |
370 { | |
371 dw_tree_clear(handle); | |
368 } | 372 } |
369 else if(strnicmp(tmpbuf, WC_TABCONTROL, strlen(WC_TABCONTROL)+1)==0) /* Notebook */ | 373 else if(strnicmp(tmpbuf, WC_TABCONTROL, strlen(WC_TABCONTROL)+1)==0) /* Notebook */ |
370 { | 374 { |
371 NotebookPage **array = (NotebookPage **)dw_window_get_data(handle, "_dw_array"); | 375 NotebookPage **array = (NotebookPage **)dw_window_get_data(handle, "_dw_array"); |
372 | 376 |
5855 void API dw_tree_item_select(HWND handle, HWND item) | 5859 void API dw_tree_item_select(HWND handle, HWND item) |
5856 { | 5860 { |
5857 TreeView_SelectItem(handle, (HTREEITEM)item); | 5861 TreeView_SelectItem(handle, (HTREEITEM)item); |
5858 } | 5862 } |
5859 | 5863 |
5864 /* Delete all tree subitems */ | |
5865 void _dw_tree_delete_recursive(HWND handle, HTREEITEM node) | |
5866 { | |
5867 HTREEITEM hti; | |
5868 | |
5869 hti = TreeView_GetChild(handle, node); | |
5870 | |
5871 while(hti) | |
5872 { | |
5873 HTREEITEM lastitem = hti; | |
5874 | |
5875 _dw_tree_delete_recursive(handle, hti); | |
5876 hti = TreeView_GetNextSibling(handle, hti); | |
5877 dw_tree_delete(handle, (HWND)lastitem); | |
5878 } | |
5879 } | |
5880 | |
5860 /* | 5881 /* |
5861 * Removes all nodes from a tree. | 5882 * Removes all nodes from a tree. |
5862 * Parameters: | 5883 * Parameters: |
5863 * handle: Handle to the window (widget) to be cleared. | 5884 * handle: Handle to the window (widget) to be cleared. |
5864 */ | 5885 */ |
5865 void API dw_tree_clear(HWND handle) | 5886 void API dw_tree_clear(HWND handle) |
5866 { | 5887 { |
5867 TreeView_DeleteAllItems(handle); | 5888 HTREEITEM hti = TreeView_GetRoot(handle); |
5889 | |
5890 while(hti) | |
5891 { | |
5892 HTREEITEM lastitem = hti; | |
5893 | |
5894 _dw_tree_delete_recursive(handle, hti); | |
5895 hti = TreeView_GetNextSibling(handle, hti); | |
5896 dw_tree_delete(handle, (HWND)lastitem); | |
5897 } | |
5868 } | 5898 } |
5869 | 5899 |
5870 /* | 5900 /* |
5871 * Expands a node on a tree. | 5901 * Expands a node on a tree. |
5872 * Parameters: | 5902 * Parameters: |
5895 * handle: Handle to the window (widget) to be cleared. | 5925 * handle: Handle to the window (widget) to be cleared. |
5896 * item: Handle to node to be deleted. | 5926 * item: Handle to node to be deleted. |
5897 */ | 5927 */ |
5898 void API dw_tree_delete(HWND handle, HWND item) | 5928 void API dw_tree_delete(HWND handle, HWND item) |
5899 { | 5929 { |
5930 TVITEM tvi; | |
5931 void **ptrs; | |
5932 | |
5900 if((HTREEITEM)item == TVI_ROOT || !item) | 5933 if((HTREEITEM)item == TVI_ROOT || !item) |
5901 return; | 5934 return; |
5902 | 5935 |
5936 tvi.mask = TVIF_HANDLE; | |
5937 tvi.hItem = (HTREEITEM)item; | |
5938 | |
5939 if(TreeView_GetItem(handle, &tvi)) | |
5940 ptrs = (void **)tvi.lParam; | |
5941 | |
5903 TreeView_DeleteItem(handle, (HTREEITEM)item); | 5942 TreeView_DeleteItem(handle, (HTREEITEM)item); |
5943 if(ptrs) | |
5944 free(ptrs); | |
5904 } | 5945 } |
5905 | 5946 |
5906 /* | 5947 /* |
5907 * Sets up the container columns. | 5948 * Sets up the container columns. |
5908 * Parameters: | 5949 * Parameters: |