ole32: Fix OLEClipbrd_IDataObject_QueryGetData to conform to the tests.
This commit is contained in:
parent
e0ef1f061a
commit
2cd4117f81
|
@ -1312,42 +1312,21 @@ static HRESULT WINAPI OLEClipbrd_IDataObject_QueryGetData(
|
|||
IDataObject* iface,
|
||||
LPFORMATETC pformatetc)
|
||||
{
|
||||
/*
|
||||
* Declare "This" pointer
|
||||
*/
|
||||
OLEClipbrd *This = (OLEClipbrd *)iface;
|
||||
|
||||
TRACE("(%p, %p)\n", iface, pformatetc);
|
||||
|
||||
/*
|
||||
* If we have a data source placed on the clipboard (via OleSetClipboard)
|
||||
* simply delegate to the source object's QueryGetData
|
||||
*/
|
||||
if ( This->pIDataObjectSrc )
|
||||
{
|
||||
return IDataObject_QueryGetData(This->pIDataObjectSrc, pformatetc);
|
||||
}
|
||||
|
||||
if (!pformatetc)
|
||||
return E_INVALIDARG;
|
||||
/*
|
||||
if ( pformatetc->dwAspect != DVASPECT_CONTENT )
|
||||
return DV_E_DVASPECT;
|
||||
*/
|
||||
if ( pformatetc->lindex != -1 )
|
||||
return DV_E_LINDEX;
|
||||
|
||||
/* TODO: Handle TYMED_IStorage media which were put on the clipboard
|
||||
* by copying the storage into global memory. We must convert this
|
||||
* TYMED_HGLOBAL back to TYMED_IStorage.
|
||||
*/
|
||||
if ( pformatetc->tymed != TYMED_HGLOBAL )
|
||||
return DV_E_TYMED;
|
||||
if ( pformatetc->dwAspect != DVASPECT_CONTENT )
|
||||
return DV_E_FORMATETC;
|
||||
|
||||
if ( pformatetc->lindex != -1 )
|
||||
return DV_E_FORMATETC;
|
||||
|
||||
/*
|
||||
* Delegate to the Windows clipboard function IsClipboardFormatAvailable
|
||||
*/
|
||||
return (IsClipboardFormatAvailable(pformatetc->cfFormat)) ? S_OK : DV_E_FORMATETC;
|
||||
return (IsClipboardFormatAvailable(pformatetc->cfFormat)) ? S_OK : DV_E_CLIPFORMAT;
|
||||
}
|
||||
|
||||
/************************************************************************
|
||||
|
|
|
@ -226,7 +226,7 @@ static HRESULT WINAPI DataObjectImpl_QueryGetData(IDataObject* iface, FORMATETC
|
|||
BOOL foundFormat = FALSE;
|
||||
|
||||
if (!expect_DataObjectImpl_QueryGetData)
|
||||
todo_wine ok(0, "unexpected call to DataObjectImpl_QueryGetData\n");
|
||||
ok(0, "unexpected call to DataObjectImpl_QueryGetData\n");
|
||||
|
||||
if(pformatetc->lindex != -1)
|
||||
return DV_E_LINDEX;
|
||||
|
@ -343,25 +343,26 @@ static void test_get_clipboard(void)
|
|||
InitFormatEtc(fmtetc, CF_TEXT, TYMED_HGLOBAL);
|
||||
fmtetc.dwAspect = 0xdeadbeef;
|
||||
hr = IDataObject_QueryGetData(data_obj, &fmtetc);
|
||||
todo_wine
|
||||
ok(hr == DV_E_FORMATETC, "IDataObject_QueryGetData should have failed with DV_E_FORMATETC instead of 0x%08x\n", hr);
|
||||
|
||||
InitFormatEtc(fmtetc, CF_TEXT, TYMED_HGLOBAL);
|
||||
fmtetc.dwAspect = DVASPECT_THUMBNAIL;
|
||||
hr = IDataObject_QueryGetData(data_obj, &fmtetc);
|
||||
ok(hr == DV_E_FORMATETC, "IDataObject_QueryGetData should have failed with DV_E_FORMATETC instead of 0x%08x\n", hr);
|
||||
|
||||
InitFormatEtc(fmtetc, CF_TEXT, TYMED_HGLOBAL);
|
||||
fmtetc.lindex = 256;
|
||||
hr = IDataObject_QueryGetData(data_obj, &fmtetc);
|
||||
todo_wine
|
||||
ok(hr == DV_E_FORMATETC, "IDataObject_QueryGetData should have failed with DV_E_FORMATETC instead of 0x%08x\n", hr);
|
||||
|
||||
InitFormatEtc(fmtetc, CF_TEXT, TYMED_HGLOBAL);
|
||||
fmtetc.cfFormat = CF_RIFF;
|
||||
hr = IDataObject_QueryGetData(data_obj, &fmtetc);
|
||||
todo_wine
|
||||
ok(hr == DV_E_CLIPFORMAT, "IDataObject_QueryGetData should have failed with DV_E_CLIPFORMAT instead of 0x%08x\n", hr);
|
||||
|
||||
InitFormatEtc(fmtetc, CF_TEXT, TYMED_HGLOBAL);
|
||||
fmtetc.tymed = TYMED_FILE;
|
||||
hr = IDataObject_QueryGetData(data_obj, &fmtetc);
|
||||
todo_wine
|
||||
ok(hr == S_OK, "IDataObject_QueryGetData failed with error 0x%08x\n", hr);
|
||||
|
||||
expect_DataObjectImpl_QueryGetData = TRUE;
|
||||
|
|
Loading…
Reference in New Issue