Rob Shearman : ole32: Fix OLEClipbrd_IDataObject_QueryGetData to conform to the tests.

Alexandre Julliard julliard at winehq.org
Wed Apr 16 08:09:46 CDT 2008


Module: wine
Branch: master
Commit: 2cd4117f81cb93da8a5b4ad13573d132e8118fc2
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=2cd4117f81cb93da8a5b4ad13573d132e8118fc2

Author: Rob Shearman <rob at codeweavers.com>
Date:   Tue Apr 15 18:29:32 2008 +0100

ole32: Fix OLEClipbrd_IDataObject_QueryGetData to conform to the tests.

---

 dlls/ole32/clipboard.c       |   33 ++++++---------------------------
 dlls/ole32/tests/clipboard.c |   11 ++++++-----
 2 files changed, 12 insertions(+), 32 deletions(-)

diff --git a/dlls/ole32/clipboard.c b/dlls/ole32/clipboard.c
index ad15219..a74e71a 100644
--- a/dlls/ole32/clipboard.c
+++ b/dlls/ole32/clipboard.c
@@ -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;
 }
 
 /************************************************************************
diff --git a/dlls/ole32/tests/clipboard.c b/dlls/ole32/tests/clipboard.c
index aa2f622..c6371cd 100644
--- a/dlls/ole32/tests/clipboard.c
+++ b/dlls/ole32/tests/clipboard.c
@@ -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;




More information about the wine-cvs mailing list