diff --git a/dll/win32/shell32/wine/brsfolder.c b/dll/win32/shell32/wine/brsfolder.c index be45792654f..cfe982d53d9 100644 --- a/dll/win32/shell32/wine/brsfolder.c +++ b/dll/win32/shell32/wine/brsfolder.c @@ -625,6 +625,40 @@ static HRESULT BrsFolder_Rename(browse_info *info, HTREEITEM rename) return S_OK; } +#ifdef __REACTOS__ +static void +BrsFolder_Delete(browse_info *info, HTREEITEM selected_item) +{ + TV_ITEMW item; + TV_ITEMDATA *item_data; + SHFILEOPSTRUCTW fileop = { info->hwndTreeView }; + WCHAR szzFrom[MAX_PATH + 1]; + + /* get item_data */ + item.mask = TVIF_HANDLE | TVIF_PARAM; + item.hItem = selected_item; + if (!SendMessageW(info->hwndTreeView, TVM_GETITEMW, 0, (LPARAM)&item)) + { + ERR("TVM_GETITEMW failed\n"); + return; + } + item_data = (TV_ITEMDATA *)item.lParam; + + /* get the path */ + if (!SHGetPathFromIDListW(item_data->lpifq, szzFrom)) + { + ERR("SHGetPathFromIDListW failed\n"); + return; + } + szzFrom[lstrlenW(szzFrom) + 1] = 0; /* double NULL-terminated */ + fileop.pFrom = szzFrom; + + /* delete folder */ + fileop.fFlags = FOF_ALLOWUNDO; + fileop.wFunc = FO_DELETE; + SHFileOperationW(&fileop); +} +#endif static LRESULT BrsFolder_Treeview_Keydown(browse_info *info, LPNMTVKEYDOWN keydown) { HTREEITEM selected_item; @@ -643,14 +677,7 @@ static LRESULT BrsFolder_Treeview_Keydown(browse_info *info, LPNMTVKEYDOWN keydo case VK_DELETE: { #ifdef __REACTOS__ - /********************************************************* - FIXME: Add a proper alternative implementation for ReactOS - - NOTES: Wine makes use of the ISFHelper interface, which we - don't have in ReactOS. - It's defined in dlls/shell32/shellfolder.h and implemented - in dlls/shell32/shfldr_fs.c on Wine's side. - *********************************************************/ + BrsFolder_Delete(info, selected_item); #else const ITEMIDLIST *item_id; ISFHelper *psfhlp;