[SHELL32] Fix Shift-Delete to Permanently Delete Files and Folders (#4004)

CORE-17802
This commit is contained in:
Doug Lyons 2022-05-05 10:30:06 -05:00 committed by GitHub
parent 212cbb6fff
commit cc0e2a3672
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 4 additions and 5 deletions

View file

@ -779,7 +779,8 @@ HRESULT CDefaultContextMenu::DoDelete(LPCMINVOKECOMMANDINFO lpcmi)
if (FAILED_UNEXPECTEDLY(hr)) if (FAILED_UNEXPECTEDLY(hr))
return hr; return hr;
SHSimulateDrop(pDT, m_pDataObj, 0, NULL, NULL); DWORD grfKeyState = (lpcmi->fMask & CMIC_MASK_SHIFT_DOWN) ? MK_SHIFT : 0;
SHSimulateDrop(pDT, m_pDataObj, grfKeyState, NULL, NULL);
return S_OK; return S_OK;
} }

View file

@ -140,12 +140,10 @@ class CRecyclerDropTarget :
} }
HRESULT WINAPI Drop(IDataObject *pDataObject, HRESULT WINAPI Drop(IDataObject *pDataObject,
DWORD dwKeyState, POINTL pt, DWORD *pdwEffect) DWORD grfKeyState, POINTL pt, DWORD *pdwEffect)
{ {
TRACE("(%p) object dropped on recycle bin, effect %u\n", this, *pdwEffect); TRACE("(%p) object dropped on recycle bin, effect %u\n", this, *pdwEffect);
/* TODO: pdwEffect should be read and make the drop object be permanently deleted in the move case (shift held) */
FORMATETC fmt; FORMATETC fmt;
TRACE("(%p)->(DataObject=%p)\n", this, pDataObject); TRACE("(%p)->(DataObject=%p)\n", this, pDataObject);
InitFormatEtc (fmt, cfShellIDList, TYMED_HGLOBAL); InitFormatEtc (fmt, cfShellIDList, TYMED_HGLOBAL);
@ -155,7 +153,7 @@ class CRecyclerDropTarget :
{ {
DWORD fMask = 0; DWORD fMask = 0;
if ((dwKeyState & MK_SHIFT) == MK_SHIFT) if ((grfKeyState & MK_SHIFT) == MK_SHIFT)
fMask |= CMIC_MASK_SHIFT_DOWN; fMask |= CMIC_MASK_SHIFT_DOWN;
_DoDeleteAsync(pDataObject, fMask); _DoDeleteAsync(pDataObject, fMask);