[PATCH 2/5] shell32: Get ExplorerPaneVisibility from site of the ExplorerBrowser control. (resend)
David Hedberg
david.hedberg at gmail.com
Thu Aug 26 06:58:17 CDT 2010
---
dlls/shell32/ebrowser.c | 11 ++++
dlls/shell32/tests/ebrowser.c | 102 ++++++++++++++++++++++++++++++++++++++++-
2 files changed, 112 insertions(+), 1 deletions(-)
diff --git a/dlls/shell32/ebrowser.c b/dlls/shell32/ebrowser.c
index c448daa..7e6f2b5 100644
--- a/dlls/shell32/ebrowser.c
+++ b/dlls/shell32/ebrowser.c
@@ -76,6 +76,7 @@ typedef struct _ExplorerBrowserImpl {
ICommDlgBrowser *pcdb_site;
ICommDlgBrowser2 *pcdb2_site;
ICommDlgBrowser3 *pcdb3_site;
+ IExplorerPaneVisibility *pepv_site;
} ExplorerBrowserImpl;
/**************************************************************************
@@ -352,6 +353,12 @@ static void get_interfaces_from_site(ExplorerBrowserImpl *This)
This->pcdb_site = This->pcdb2_site = This->pcdb3_site = NULL;
}
+ if(This->pepv_site)
+ {
+ IExplorerPaneVisibility_Release(This->pepv_site);
+ This->pepv_site = NULL;
+ }
+
if(!This->punk_site)
return;
@@ -370,6 +377,10 @@ static void get_interfaces_from_site(ExplorerBrowserImpl *This)
IServiceProvider_QueryService(psp, &SID_SExplorerBrowserFrame, &IID_ICommDlgBrowser3,
(void**)&This->pcdb3_site);
+ /* IExplorerPaneVisibility */
+ IServiceProvider_QueryService(psp, &SID_ExplorerPaneVisibility, &IID_IExplorerPaneVisibility,
+ (void**)&This->pepv_site);
+
IServiceProvider_Release(psp);
}
diff --git a/dlls/shell32/tests/ebrowser.c b/dlls/shell32/tests/ebrowser.c
index ab66103..8bd60aa 100644
--- a/dlls/shell32/tests/ebrowser.c
+++ b/dlls/shell32/tests/ebrowser.c
@@ -188,6 +188,91 @@ static const IExplorerBrowserEventsVtbl ebevents =
};
/*********************************************************************
+ * IExplorerPaneVisibility implementation
+ */
+typedef struct
+{
+ const IExplorerPaneVisibilityVtbl *lpVtbl;
+ LONG ref;
+ LONG count;
+ LONG np, cp, cp_o, cp_v, dp, pp, qp, aqp, unk; /* The panes */
+} IExplorerPaneVisibilityImpl;
+
+static HRESULT WINAPI IExplorerPaneVisibility_fnQueryInterface(IExplorerPaneVisibility *iface,
+ REFIID riid, LPVOID *ppvObj)
+{
+ ok(0, "Not called.\n");
+ trace("REFIID:"); dbg_print_guid(riid);
+ *ppvObj = NULL;
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI IExplorerPaneVisibility_fnAddRef(IExplorerPaneVisibility *iface)
+{
+ IExplorerPaneVisibilityImpl *This = (IExplorerPaneVisibilityImpl *)iface;
+ return InterlockedIncrement(&This->ref);
+}
+
+static ULONG WINAPI IExplorerPaneVisibility_fnRelease(IExplorerPaneVisibility *iface)
+{
+ IExplorerPaneVisibilityImpl *This = (IExplorerPaneVisibilityImpl *)iface;
+ ULONG ref = InterlockedDecrement(&This->ref);
+
+ if(!ref)
+ HeapFree(GetProcessHeap(), 0, This);
+
+ return ref;
+}
+
+static HRESULT WINAPI IExplorerPaneVisibility_fnGetPaneState(IExplorerPaneVisibility *iface,
+ REFEXPLORERPANE ep,
+ EXPLORERPANESTATE *peps)
+{
+ IExplorerPaneVisibilityImpl *This = (IExplorerPaneVisibilityImpl *)iface;
+ This->count++;
+
+ ok(ep != NULL, "ep is NULL.\n");
+ ok(peps != NULL, "peps is NULL.\n");
+ ok(*peps == 0, "got %d\n", *peps);
+
+ *peps = EPS_FORCE;
+ if(IsEqualGUID(&EP_NavPane, ep)) This->np++;
+ else if(IsEqualGUID(&EP_Commands, ep)) This->cp++;
+ else if(IsEqualGUID(&EP_Commands_Organize, ep)) This->cp_o++;
+ else if(IsEqualGUID(&EP_Commands_View, ep)) This->cp_v++;
+ else if(IsEqualGUID(&EP_DetailsPane, ep)) This->dp++;
+ else if(IsEqualGUID(&EP_PreviewPane, ep)) This->pp++;
+ else if(IsEqualGUID(&EP_QueryPane, ep)) This->qp++;
+ else if(IsEqualGUID(&EP_AdvQueryPane, ep)) This->aqp++;
+ else
+ {
+ trace("Unknown explorer pane: "); dbg_print_guid(ep);
+ This->unk++;
+ }
+
+ return S_OK;
+}
+
+static const IExplorerPaneVisibilityVtbl epvvt =
+{
+ IExplorerPaneVisibility_fnQueryInterface,
+ IExplorerPaneVisibility_fnAddRef,
+ IExplorerPaneVisibility_fnRelease,
+ IExplorerPaneVisibility_fnGetPaneState
+};
+
+static IExplorerPaneVisibilityImpl *create_explorerpanevisibility(void)
+{
+ IExplorerPaneVisibilityImpl *epv;
+
+ epv = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IExplorerPaneVisibilityImpl));
+ epv->lpVtbl = &epvvt;
+ epv->ref = 1;
+
+ return epv;
+}
+
+/*********************************************************************
* ICommDlgBrowser3 implementation
*/
typedef struct
@@ -787,6 +872,7 @@ static void test_SetSite(void)
IExplorerBrowser *peb;
IServiceProviderImpl *spimpl = create_serviceprovider();
ICommDlgBrowser3Impl *cdbimpl = create_commdlgbrowser3();
+ IExplorerPaneVisibilityImpl *epvimpl = create_explorerpanevisibility();
IObjectWithSite *pow;
HRESULT hr;
LONG ref;
@@ -800,7 +886,7 @@ static void test_SetSite(void)
{ &SID_STopLevelBrowser, &IID_IConnectionPointContainer, 0, NULL },
{ &SID_STopLevelBrowser, &IID_IProfferService, 0, NULL },
{ &SID_STopLevelBrowser, &IID_UnknownInterface9, 0, NULL },
- { &SID_ExplorerPaneVisibility, &IID_IExplorerPaneVisibility, 0, NULL },
+ { &SID_ExplorerPaneVisibility, &IID_IExplorerPaneVisibility, 0, epvimpl },
{ &SID_SExplorerBrowserFrame, &IID_ICommDlgBrowser2, 0, cdbimpl },
{ &SID_SExplorerBrowserFrame, &IID_ICommDlgBrowser3, 0, cdbimpl },
{ &IID_IFileDialogPrivate, &IID_IFileDialogPrivate, 0, NULL },
@@ -856,6 +942,7 @@ static void test_SetSite(void)
IServiceProvider_Release((IServiceProvider*)spimpl);
ICommDlgBrowser3_Release((ICommDlgBrowser3*)cdbimpl);
+ IExplorerPaneVisibility_Release((IExplorerPaneVisibility*)epvimpl);
IExplorerBrowser_Destroy(peb);
ref = IExplorerBrowser_Release(peb);
ok(ref == 0, "Got ref %d\n", ref);
@@ -885,6 +972,17 @@ static void test_SetSite(void)
ok(!cdbimpl->GetCurrentFilter, "Got %d\n", cdbimpl->GetCurrentFilter);
todo_wine ok(cdbimpl->OnPreviewCreated, "Got %d\n", cdbimpl->OnPreviewCreated);
+ /* IExplorerPaneVisibility */
+ todo_wine ok(epvimpl->np, "Got %d\n", epvimpl->np);
+ todo_wine ok(epvimpl->cp, "Got %d\n", epvimpl->cp);
+ todo_wine ok(epvimpl->cp_o, "Got %d\n", epvimpl->cp_o);
+ todo_wine ok(epvimpl->cp_v, "Got %d\n", epvimpl->cp_v);
+ todo_wine ok(epvimpl->dp, "Got %d\n", epvimpl->dp);
+ todo_wine ok(epvimpl->pp, "Got %d\n", epvimpl->pp);
+ ok(!epvimpl->qp, "Got %d\n", epvimpl->qp);
+ ok(!epvimpl->aqp, "Got %d\n", epvimpl->aqp);
+ ok(!epvimpl->unk, "Got %d\n", epvimpl->unk);
+
if(0)
{
for(i = 0; expected[i].service != NULL; i++)
@@ -925,6 +1023,8 @@ static void test_SetSite(void)
ref = ICommDlgBrowser3_Release((ICommDlgBrowser3*)cdbimpl);
ok(ref == 0, "Got ref %d\n", ref);
+ ref = IExplorerPaneVisibility_Release((IExplorerPaneVisibility*)epvimpl);
+ ok(ref == 0, "Got ref %d\n", ref);
}
static void test_basics(void)
--
1.7.2.2
More information about the wine-patches
mailing list