Commit 4c55ea3e authored by Nikolay Sivov's avatar Nikolay Sivov Committed by Alexandre Julliard

oleview: Use Treeview notifications to release created instances.

parent 455f5f23
...@@ -469,8 +469,8 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, ...@@ -469,8 +469,8 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg,
MenuCommand(LOWORD(wParam), hWnd); MenuCommand(LOWORD(wParam), hWnd);
break; break;
case WM_DESTROY: case WM_DESTROY:
OleUninitialize();
EmptyTree(); EmptyTree();
OleUninitialize();
PostQuitMessage(0); PostQuitMessage(0);
break; break;
case WM_MENUSELECT: case WM_MENUSELECT:
......
...@@ -604,40 +604,7 @@ static void AddBaseEntries(void) ...@@ -604,40 +604,7 @@ static void AddBaseEntries(void)
void EmptyTree(void) void EmptyTree(void)
{ {
HTREEITEM cur, del; SendMessageW(globals.hTree, TVM_DELETEITEM, 0, (LPARAM)TVI_ROOT);
TVITEMW tvi;
tvi.mask = TVIF_PARAM;
cur = (HTREEITEM)SendMessageW(globals.hTree, TVM_GETNEXTITEM,
TVGN_CHILD, (LPARAM)TVI_ROOT);
while(TRUE)
{
del = cur;
cur = (HTREEITEM)SendMessageW(globals.hTree, TVM_GETNEXTITEM,
TVGN_CHILD, (LPARAM)del);
if(!cur) cur = (HTREEITEM)SendMessageW(globals.hTree,
TVM_GETNEXTITEM, TVGN_NEXT, (LPARAM)del);
if(!cur)
{
cur = (HTREEITEM)SendMessageW(globals.hTree, TVM_GETNEXTITEM,
TVGN_PREVIOUS, (LPARAM)del);
if(!cur) cur = (HTREEITEM)SendMessageW(globals.hTree,
TVM_GETNEXTITEM, TVGN_PARENT, (LPARAM)del);
tvi.hItem = del;
if(SendMessageW(globals.hTree, TVM_GETITEMW, 0, (LPARAM)&tvi) && tvi.lParam)
{
if(((ITEM_INFO *)tvi.lParam)->loaded) ReleaseInst(del);
HeapFree(GetProcessHeap(), 0, (ITEM_INFO *)tvi.lParam);
SendMessageW(globals.hTree, TVM_DELETEITEM, 0, (LPARAM)del);
}
if(!cur) break;
}
}
} }
void AddTreeEx(void) void AddTreeEx(void)
...@@ -678,6 +645,19 @@ static LRESULT CALLBACK TreeProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPa ...@@ -678,6 +645,19 @@ static LRESULT CALLBACK TreeProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPa
RefreshMenu(((NMTREEVIEWW *)lParam)->itemNew.hItem); RefreshMenu(((NMTREEVIEWW *)lParam)->itemNew.hItem);
RefreshDetails(((NMTREEVIEWW *)lParam)->itemNew.hItem); RefreshDetails(((NMTREEVIEWW *)lParam)->itemNew.hItem);
break; break;
case TVN_DELETEITEMW:
{
NMTREEVIEWW *nm = (NMTREEVIEWW*)lParam;
ITEM_INFO *info = (ITEM_INFO*)nm->itemOld.lParam;
if (info)
{
if (info->loaded)
ReleaseInst(nm->itemOld.hItem);
HeapFree(GetProcessHeap(), 0, info);
}
break;
}
} }
break; break;
case WM_SIZE: case WM_SIZE:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment