Piotr Caban : shdocvw: Added IShellBrowser interface stub.

Alexandre Julliard julliard at winehq.org
Tue Mar 15 11:33:54 CDT 2011


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

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Mon Mar 14 17:49:37 2011 +0100

shdocvw: Added IShellBrowser interface stub.

---

 dlls/shdocvw/Makefile.in    |    1 +
 dlls/shdocvw/client.c       |   15 +++
 dlls/shdocvw/shdocvw.h      |    1 +
 dlls/shdocvw/shellbrowser.c |  264 +++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 281 insertions(+), 0 deletions(-)

diff --git a/dlls/shdocvw/Makefile.in b/dlls/shdocvw/Makefile.in
index c4ffa16..fe85d48 100644
--- a/dlls/shdocvw/Makefile.in
+++ b/dlls/shdocvw/Makefile.in
@@ -18,6 +18,7 @@ C_SRCS = \
 	oleobject.c \
 	persist.c \
 	shdocvw_main.c \
+	shellbrowser.c \
 	shlinstobj.c \
 	taskbarlist.c \
 	urlhist.c \
diff --git a/dlls/shdocvw/client.c b/dlls/shdocvw/client.c
index 12fd464..3443170 100644
--- a/dlls/shdocvw/client.c
+++ b/dlls/shdocvw/client.c
@@ -622,6 +622,21 @@ static HRESULT WINAPI ClServiceProvider_QueryService(IServiceProvider *iface, RE
         return IDispatch_QueryInterface(This->disp, riid, ppv);
     }
 
+    if(IsEqualGUID(&IID_IShellBrowser, guidService)) {
+        IShellBrowser *sb;
+        HRESULT hres;
+
+        TRACE("(%p)->(IID_IShellBrowser %s %p)\n", This, debugstr_guid(riid), ppv);
+
+        hres = ShellBrowser_Create(&sb);
+        if(FAILED(hres))
+            return hres;
+
+        hres = IShellBrowser_QueryInterface(sb, riid, ppv);
+        IShellBrowser_Release(sb);
+        return hres;
+    }
+
     FIXME("(%p)->(%s %s %p)\n", This, debugstr_guid(guidService), debugstr_guid(riid), ppv);
 
     return E_NOINTERFACE;
diff --git a/dlls/shdocvw/shdocvw.h b/dlls/shdocvw/shdocvw.h
index 7abd004..7a68499 100644
--- a/dlls/shdocvw/shdocvw.h
+++ b/dlls/shdocvw/shdocvw.h
@@ -229,6 +229,7 @@ void ConnectionPointContainer_Destroy(ConnectionPointContainer*);
 void HlinkFrame_Init(HlinkFrame*,IUnknown*,DocHost*);
 BOOL HlinkFrame_QI(HlinkFrame*,REFIID,void**);
 
+HRESULT ShellBrowser_Create(IShellBrowser**);
 HRESULT WebBrowserV1_Create(IUnknown*,REFIID,void**);
 HRESULT WebBrowserV2_Create(IUnknown*,REFIID,void**);
 
diff --git a/dlls/shdocvw/shellbrowser.c b/dlls/shdocvw/shellbrowser.c
new file mode 100644
index 0000000..47cd095
--- /dev/null
+++ b/dlls/shdocvw/shellbrowser.c
@@ -0,0 +1,264 @@
+/*
+ * Implementation of IShellBrowser interface
+ *
+ * Copyright 2011 Piotr Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "wine/debug.h"
+#include "shdocvw.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(shdocvw);
+
+typedef struct {
+    IShellBrowser IShellBrowser_iface;
+
+    LONG ref;
+} ShellBrowser;
+
+static inline ShellBrowser *impl_from_IShellBrowser(IShellBrowser *iface)
+{
+    return CONTAINING_RECORD(iface, ShellBrowser, IShellBrowser_iface);
+}
+
+static HRESULT WINAPI ShellBrowser_QueryInterface(
+        IShellBrowser* iface,
+        REFIID riid,
+        void **ppvObject)
+{
+    ShellBrowser *This = impl_from_IShellBrowser(iface);
+    *ppvObject = NULL;
+
+    if(IsEqualGUID(&IID_IShellBrowser, riid) || IsEqualGUID(&IID_IOleWindow, riid)
+        || IsEqualGUID(&IID_IUnknown, riid))
+        *ppvObject = &This->IShellBrowser_iface;
+
+    if(*ppvObject) {
+        TRACE("%p %s %p\n", This, debugstr_guid(riid), ppvObject);
+        IUnknown_AddRef((IUnknown*)*ppvObject);
+        return S_OK;
+    }
+
+    FIXME("%p %s %p\n", This, debugstr_guid(riid), ppvObject);
+    return E_NOINTERFACE;
+}
+
+static ULONG WINAPI ShellBrowser_AddRef(
+        IShellBrowser* iface)
+{
+    ShellBrowser *This = impl_from_IShellBrowser(iface);
+    LONG ref = InterlockedIncrement(&This->ref);
+
+    TRACE("(%p) ref=%d\n", This, ref);
+
+    return ref;
+}
+
+static ULONG WINAPI ShellBrowser_Release(
+        IShellBrowser* iface)
+{
+    ShellBrowser *This = impl_from_IShellBrowser(iface);
+    LONG ref = InterlockedDecrement(&This->ref);
+
+    TRACE("(%p) ref=%d\n", This, ref);
+
+    if(!ref)
+        heap_free(This);
+    return ref;
+}
+
+static HRESULT WINAPI ShellBrowser_GetWindow(
+        IShellBrowser* iface,
+        HWND *phwnd)
+{
+    ShellBrowser *This = impl_from_IShellBrowser(iface);
+    FIXME("%p %p\n", This, phwnd);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ShellBrowser_ContextSensitiveHelp(
+        IShellBrowser* iface,
+        BOOL fEnterMode)
+{
+    ShellBrowser *This = impl_from_IShellBrowser(iface);
+    FIXME("%p %d\n", This, fEnterMode);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ShellBrowser_InsertMenusSB(
+        IShellBrowser* iface,
+        HMENU hmenuShared,
+        LPOLEMENUGROUPWIDTHS lpMenuWidths)
+{
+    ShellBrowser *This = impl_from_IShellBrowser(iface);
+    FIXME("%p %p %p\n", This, hmenuShared, lpMenuWidths);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ShellBrowser_SetMenuSB(
+        IShellBrowser* iface,
+        HMENU hmenuShared,
+        HOLEMENU holemenuReserved,
+        HWND hwndActiveObject)
+{
+    ShellBrowser *This = impl_from_IShellBrowser(iface);
+    FIXME("%p %p %p %p\n", This, hmenuShared, holemenuReserved, hwndActiveObject);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ShellBrowser_RemoveMenusSB(
+        IShellBrowser* iface,
+        HMENU hmenuShared)
+{
+    ShellBrowser *This = impl_from_IShellBrowser(iface);
+    FIXME("%p %p\n", This, hmenuShared);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ShellBrowser_SetStatusTextSB(
+        IShellBrowser* iface,
+        LPCOLESTR pszStatusText)
+{
+    ShellBrowser *This = impl_from_IShellBrowser(iface);
+    FIXME("%p %s\n", This, debugstr_w(pszStatusText));
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ShellBrowser_EnableModelessSB(
+        IShellBrowser* iface,
+        BOOL fEnable)
+{
+    ShellBrowser *This = impl_from_IShellBrowser(iface);
+    FIXME("%p %d\n", This, fEnable);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ShellBrowser_TranslateAcceleratorSB(
+        IShellBrowser* iface,
+        MSG *pmsg,
+        WORD wID)
+{
+    ShellBrowser *This = impl_from_IShellBrowser(iface);
+    FIXME("%p %p %d\n", This, pmsg, (int)wID);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ShellBrowser_BrowseObject(
+        IShellBrowser* iface,
+        LPCITEMIDLIST pidl,
+        UINT wFlags)
+{
+    ShellBrowser *This = impl_from_IShellBrowser(iface);
+    FIXME("%p %p %u\n", This, pidl, wFlags);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ShellBrowser_GetViewStateStream(
+        IShellBrowser* iface,
+        DWORD grfMode,
+        IStream **ppStrm)
+{
+    ShellBrowser *This = impl_from_IShellBrowser(iface);
+    FIXME("%p %x %p\n", This, grfMode, ppStrm);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ShellBrowser_GetControlWindow(
+        IShellBrowser* iface,
+        UINT id,
+        HWND *phwnd)
+{
+    ShellBrowser *This = impl_from_IShellBrowser(iface);
+    FIXME("%p %u %p\n", This, id, phwnd);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ShellBrowser_SendControlMsg(
+        IShellBrowser* iface,
+        UINT id,
+        UINT uMsg,
+        WPARAM wParam,
+        LPARAM lParam,
+        LRESULT *pret)
+{
+    ShellBrowser *This = impl_from_IShellBrowser(iface);
+    FIXME("%p %u %u %p\n", This, id, uMsg, pret);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ShellBrowser_QueryActiveShellView(
+        IShellBrowser* iface,
+        IShellView **ppshv)
+{
+    ShellBrowser *This = impl_from_IShellBrowser(iface);
+    FIXME("%p %p\n", This, ppshv);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ShellBrowser_OnViewWindowActive(
+        IShellBrowser* iface,
+        IShellView *pshv)
+{
+    ShellBrowser *This = impl_from_IShellBrowser(iface);
+    FIXME("%p %p\n", This, pshv);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ShellBrowser_SetToolbarItems(
+        IShellBrowser* iface,
+        LPTBBUTTONSB lpButtons,
+        UINT nButtons,
+        UINT uFlags)
+{
+    ShellBrowser *This = impl_from_IShellBrowser(iface);
+    FIXME("%p %p %u %u\n", This, lpButtons, nButtons, uFlags);
+    return E_NOTIMPL;
+}
+
+static const IShellBrowserVtbl ShellBrowserVtbl = {
+    ShellBrowser_QueryInterface,
+    ShellBrowser_AddRef,
+    ShellBrowser_Release,
+    ShellBrowser_GetWindow,
+    ShellBrowser_ContextSensitiveHelp,
+    ShellBrowser_InsertMenusSB,
+    ShellBrowser_SetMenuSB,
+    ShellBrowser_RemoveMenusSB,
+    ShellBrowser_SetStatusTextSB,
+    ShellBrowser_EnableModelessSB,
+    ShellBrowser_TranslateAcceleratorSB,
+    ShellBrowser_BrowseObject,
+    ShellBrowser_GetViewStateStream,
+    ShellBrowser_GetControlWindow,
+    ShellBrowser_SendControlMsg,
+    ShellBrowser_QueryActiveShellView,
+    ShellBrowser_OnViewWindowActive,
+    ShellBrowser_SetToolbarItems
+};
+
+HRESULT ShellBrowser_Create(IShellBrowser **ppv)
+{
+    ShellBrowser *sb = heap_alloc(sizeof(ShellBrowser));
+    if(!*ppv)
+        return E_OUTOFMEMORY;
+
+    sb->IShellBrowser_iface.lpVtbl = &ShellBrowserVtbl;
+
+    sb->ref = 1;
+
+    *ppv = &sb->IShellBrowser_iface;
+    return S_OK;
+}




More information about the wine-cvs mailing list