hlink: Implement IHlinkBrowseContext::GetBrowseWindowInfo.
authorAndrew Eikum <aeikum@codeweavers.com>
Tue, 16 Mar 2010 21:49:23 +0000 (16:49 -0500)
committerAlexandre Julliard <julliard@winehq.org>
Wed, 17 Mar 2010 09:59:08 +0000 (10:59 +0100)
dlls/hlink/browse_ctx.c
dlls/hlink/tests/browse_ctx.c

index a5b73c10bc12f2a2236e0ae1892cdd51ce3c8030..1e15c13a5439b7a26a39a45c6518349c60a78fe3 100644 (file)
@@ -155,6 +155,9 @@ static HRESULT WINAPI IHlinkBC_SetBrowseWindowInfo(IHlinkBrowseContext* iface,
     HlinkBCImpl  *This = (HlinkBCImpl*)iface;
     TRACE("(%p)->(%p)\n", This, phlbwi);
 
+    if(!phlbwi)
+        return E_INVALIDARG;
+
     heap_free(This->BrowseWindowInfo);
     This->BrowseWindowInfo = heap_alloc(phlbwi->cbSize);
     memcpy(This->BrowseWindowInfo, phlbwi, phlbwi->cbSize);
@@ -165,8 +168,18 @@ static HRESULT WINAPI IHlinkBC_SetBrowseWindowInfo(IHlinkBrowseContext* iface,
 static HRESULT WINAPI IHlinkBC_GetBrowseWindowInfo(IHlinkBrowseContext* iface,
         HLBWINFO *phlbwi)
 {
-    FIXME("\n");
-    return E_NOTIMPL;
+    HlinkBCImpl  *This = (HlinkBCImpl*)iface;
+    TRACE("(%p)->(%p)\n", This, phlbwi);
+
+    if(!phlbwi)
+        return E_INVALIDARG;
+
+    if(!This->BrowseWindowInfo)
+        phlbwi->cbSize = 0;
+    else
+        memcpy(phlbwi, This->BrowseWindowInfo, This->BrowseWindowInfo->cbSize);
+
+    return S_OK;
 }
 
 static HRESULT WINAPI IHlinkBC_SetInitialHlink(IHlinkBrowseContext* iface,
index a9b26e72fb7acbc8a80fbd85b5cd236db738ca01..30cd559402efd95b198f2f41fe08a08a94e4f81b 100644 (file)
@@ -80,11 +80,58 @@ static void test_SetInitialHlink(void)
     IMoniker_Release(dummy);
 }
 
+static void test_BrowseWindowInfo(void)
+{
+    IHlinkBrowseContext *bc;
+    HLBWINFO bwinfo_set, bwinfo_get;
+    HRESULT hres;
+
+    hres = HlinkCreateBrowseContext(NULL, &IID_IHlinkBrowseContext, (void**)&bc);
+    ok(hres == S_OK, "HlinkCreateBrowseContext failed: 0x%08x\n", hres);
+
+    hres = IHlinkBrowseContext_GetBrowseWindowInfo(bc, NULL);
+    ok(hres == E_INVALIDARG, "GetBrowseWindow failed with wrong code: 0x%08x\n", hres);
+
+    hres = IHlinkBrowseContext_SetBrowseWindowInfo(bc, NULL);
+    ok(hres == E_INVALIDARG, "SetBrowseWindow failed with wrong code: 0x%08x\n", hres);
+
+    memset(&bwinfo_get, -1, sizeof(HLBWINFO));
+
+    hres = IHlinkBrowseContext_GetBrowseWindowInfo(bc, &bwinfo_get);
+    ok(hres == S_OK, "GetBrowseWindowInfo failed: 0x%08x\n", hres);
+    ok(bwinfo_get.cbSize == 0, "Got wrong size: %x\n", bwinfo_get.cbSize);
+
+    bwinfo_set.cbSize = sizeof(HLBWINFO);
+    bwinfo_set.grfHLBWIF = HLBWIF_WEBTOOLBARHIDDEN;
+    bwinfo_set.rcFramePos.left = 1;
+    bwinfo_set.rcFramePos.right = 2;
+    bwinfo_set.rcFramePos.top = 3;
+    bwinfo_set.rcFramePos.bottom = 4;
+    bwinfo_set.rcDocPos.left = 5;
+    bwinfo_set.rcDocPos.right = 6;
+    bwinfo_set.rcDocPos.top = 7;
+    bwinfo_set.rcDocPos.bottom = 8;
+    bwinfo_set.hltbinfo.uDockType = 4321;
+    bwinfo_set.hltbinfo.rcTbPos.left = 9;
+    bwinfo_set.hltbinfo.rcTbPos.right = 10;
+    bwinfo_set.hltbinfo.rcTbPos.top = 11;
+    bwinfo_set.hltbinfo.rcTbPos.bottom = 12;
+    hres = IHlinkBrowseContext_SetBrowseWindowInfo(bc, &bwinfo_set);
+    ok(hres == S_OK, "SetBrowseWindowInfo failed: 0x%08x\n", hres);
+
+    memset(&bwinfo_get, 0, sizeof(HLBWINFO));
+
+    hres = IHlinkBrowseContext_GetBrowseWindowInfo(bc, &bwinfo_get);
+    ok(hres == S_OK, "GetBrowseWindowInfo failed: 0x%08x\n", hres);
+    ok(!memcmp(&bwinfo_set, &bwinfo_get, sizeof(HLBWINFO)), "Set and Get differ");
+}
+
 START_TEST(browse_ctx)
 {
     CoInitialize(NULL);
 
     test_SetInitialHlink();
+    test_BrowseWindowInfo();
 
     CoUninitialize();
 }