Skip to content

Commit cc0e2a3

Browse files
authored
[SHELL32] Fix Shift-Delete to Permanently Delete Files and Folders (reactos#4004)
CORE-17802
1 parent 212cbb6 commit cc0e2a3

File tree

2 files changed

+4
-5
lines changed

2 files changed

+4
-5
lines changed

dll/win32/shell32/CDefaultContextMenu.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -779,7 +779,8 @@ HRESULT CDefaultContextMenu::DoDelete(LPCMINVOKECOMMANDINFO lpcmi)
779779
if (FAILED_UNEXPECTEDLY(hr))
780780
return hr;
781781

782-
SHSimulateDrop(pDT, m_pDataObj, 0, NULL, NULL);
782+
DWORD grfKeyState = (lpcmi->fMask & CMIC_MASK_SHIFT_DOWN) ? MK_SHIFT : 0;
783+
SHSimulateDrop(pDT, m_pDataObj, grfKeyState, NULL, NULL);
783784

784785
return S_OK;
785786
}

dll/win32/shell32/droptargets/CRecyclerDropTarget.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -140,12 +140,10 @@ class CRecyclerDropTarget :
140140
}
141141

142142
HRESULT WINAPI Drop(IDataObject *pDataObject,
143-
DWORD dwKeyState, POINTL pt, DWORD *pdwEffect)
143+
DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
144144
{
145145
TRACE("(%p) object dropped on recycle bin, effect %u\n", this, *pdwEffect);
146146

147-
/* TODO: pdwEffect should be read and make the drop object be permanently deleted in the move case (shift held) */
148-
149147
FORMATETC fmt;
150148
TRACE("(%p)->(DataObject=%p)\n", this, pDataObject);
151149
InitFormatEtc (fmt, cfShellIDList, TYMED_HGLOBAL);
@@ -155,7 +153,7 @@ class CRecyclerDropTarget :
155153
{
156154
DWORD fMask = 0;
157155

158-
if ((dwKeyState & MK_SHIFT) == MK_SHIFT)
156+
if ((grfKeyState & MK_SHIFT) == MK_SHIFT)
159157
fMask |= CMIC_MASK_SHIFT_DOWN;
160158

161159
_DoDeleteAsync(pDataObject, fMask);

0 commit comments

Comments
 (0)