[SHELL32] Implement VK_DELETE on SHBrowseForFolder (#2661)

Enable Del/Delete key to delete the selected folder in "Browse for Folder" dialog.
You can use https://jira.reactos.org/secure/attachment/40118/getfolder.zip as a test program.
CORE-7592
This commit is contained in:
Katayama Hirofumi MZ 2020-04-26 22:06:19 +09:00 committed by GitHub
parent 2391e31cf0
commit 771457f37f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -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;