ole32: Fix OLEClipbrd_IDataObject_QueryGetData to conform to the tests.
authorRob Shearman <rob@codeweavers.com>
Tue, 15 Apr 2008 17:29:32 +0000 (18:29 +0100)
committerAlexandre Julliard <julliard@winehq.org>
Wed, 16 Apr 2008 12:07:19 +0000 (14:07 +0200)
dlls/ole32/clipboard.c
dlls/ole32/tests/clipboard.c

index ad15219a6aa07b07436b9d5eb95af79003d7c8a8..a74e71a12e689c7bfcbdb3e63b0a6a52a3414bd3 100644 (file)
@@ -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;
 }
 
 /************************************************************************
index aa2f622efae54c9b88f0d825db8d795a1642e42b..c6371cd52e418cd68c9cb4000763704295255dac 100644 (file)
@@ -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;