[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; FORMATETC formatetc;
STGMEDIUM medium;
InitFormatEtc(formatetc, RegisterClipboardFormatW(CFSTR_PREFERREDDROPEFFECT), TYMED_HGLOBAL); InitFormatEtc(formatetc, RegisterClipboardFormatW(CFSTR_PREFERREDDROPEFFECT), TYMED_HGLOBAL);
m_pDataObj->GetData(&formatetc, &medium); STGMEDIUM medium = {0};
DWORD * pdwFlag = (DWORD*)GlobalLock(medium.hGlobal); medium.tymed = TYMED_HGLOBAL;
medium.hGlobal = GlobalAlloc(GHND, sizeof(DWORD));
DWORD* pdwFlag = (DWORD*)GlobalLock(medium.hGlobal);
if (pdwFlag) if (pdwFlag)
*pdwFlag = DROPEFFECT_MOVE; *pdwFlag = bCopy ? DROPEFFECT_COPY : 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))