[SHELL32] CDefaultContextMenu: Always add the wanted operation to the IDataObject

This commit is contained in:
Mark Jansen 2019-10-20 00:54:11 +02:00
parent c31327114b
commit e45beb55f8
No known key found for this signature in database
GPG key ID: B39240EE84BEAE8B

View file

@ -840,18 +840,16 @@ HRESULT CDefaultContextMenu::DoCopyOrCut(LPCMINVOKECOMMANDINFO lpcmi, BOOL bCopy
if (!m_cidl || !m_pDataObj) if (!m_cidl || !m_pDataObj)
return E_FAIL; return E_FAIL;
if (!bCopy) FORMATETC formatetc;
{ InitFormatEtc(formatetc, RegisterClipboardFormatW(CFSTR_PREFERREDDROPEFFECT), TYMED_HGLOBAL);
FORMATETC formatetc; STGMEDIUM medium = {0};
STGMEDIUM medium; medium.tymed = TYMED_HGLOBAL;
InitFormatEtc(formatetc, RegisterClipboardFormatW(CFSTR_PREFERREDDROPEFFECT), TYMED_HGLOBAL); medium.hGlobal = GlobalAlloc(GHND, sizeof(DWORD));
m_pDataObj->GetData(&formatetc, &medium); DWORD* pdwFlag = (DWORD*)GlobalLock(medium.hGlobal);
DWORD * pdwFlag = (DWORD*)GlobalLock(medium.hGlobal); if (pdwFlag)
if (pdwFlag) *pdwFlag = bCopy ? DROPEFFECT_COPY : DROPEFFECT_MOVE;
*pdwFlag = DROPEFFECT_MOVE; GlobalUnlock(medium.hGlobal);
GlobalUnlock(medium.hGlobal); m_pDataObj->SetData(&formatetc, &medium, TRUE);
m_pDataObj->SetData(&formatetc, &medium, TRUE);
}
HRESULT hr = OleSetClipboard(m_pDataObj); HRESULT hr = OleSetClipboard(m_pDataObj);
if (FAILED_UNEXPECTEDLY(hr)) if (FAILED_UNEXPECTEDLY(hr))