From 0260b269623820630529fb32e53b4f29cc2ac111 Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Tue, 18 Jul 2006 12:55:31 +0200 Subject: [PATCH] oleview: Added data freeing in TypeLib Viewer. --- programs/oleview/typelib.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/programs/oleview/typelib.c b/programs/oleview/typelib.c index ff5fb1cf2ca..c516a6ac038 100644 --- a/programs/oleview/typelib.c +++ b/programs/oleview/typelib.c @@ -560,6 +560,36 @@ void UpdateTypeLibStatusBar(int itemID) SendMessage(typelib.hStatusBar, SB_SETTEXT, 0, (LPARAM)info); } +void EmptyTLTree(void) +{ + HTREEITEM cur, del; + TVITEM tvi; + + tvi.mask = TVIF_PARAM; + cur = TreeView_GetChild(typelib.hTree, TVI_ROOT); + + while(TRUE) + { + del = cur; + cur = TreeView_GetChild(typelib.hTree, del); + + if(!cur) cur = TreeView_GetNextSibling(typelib.hTree, del); + if(!cur) cur = TreeView_GetParent(typelib.hTree, del); + + tvi.hItem = del; + SendMessage(typelib.hTree, TVM_GETITEM, 0, (LPARAM)&tvi); + if(tvi.lParam) + { + HeapFree(GetProcessHeap(), 0, ((TYPELIB_DATA *)tvi.lParam)->idl); + HeapFree(GetProcessHeap(), 0, (TYPELIB_DATA *)tvi.lParam); + } + + SendMessage(typelib.hTree, TVM_DELETEITEM, 0, (LPARAM)del); + + if(!cur) break; + } +} + LRESULT CALLBACK TypeLibProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) @@ -596,6 +626,7 @@ LRESULT CALLBACK TypeLibProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) TypeLibResizeChild(); break; case WM_DESTROY: + EmptyTLTree(); break; default: return DefWindowProc(hWnd, uMsg, wParam, lParam);