Nikolay Sivov : shell32: Add IPersistFolder2 stub for printers folder.

Alexandre Julliard julliard at winehq.org
Fri Apr 16 10:56:03 CDT 2010


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Fri Apr 16 13:42:42 2010 +0400

shell32: Add IPersistFolder2 stub for printers folder.

---

 dlls/shell32/shfldr_printers.c |   71 +++++++++++++++++++++++++++++++++++++++-
 1 files changed, 70 insertions(+), 1 deletions(-)

diff --git a/dlls/shell32/shfldr_printers.c b/dlls/shell32/shfldr_printers.c
index 29d0221..4c48a10 100644
--- a/dlls/shell32/shfldr_printers.c
+++ b/dlls/shell32/shfldr_printers.c
@@ -36,9 +36,15 @@ WINE_DEFAULT_DEBUG_CHANNEL (shell);
 
 typedef struct {
     const IShellFolder2Vtbl   *lpVtbl;
-    LONG                ref;
+    const IPersistFolder2Vtbl *lpvtblPersistFolder2;
+    LONG ref;
 } IPrintersFolderImpl;
 
+static inline IPrintersFolderImpl *impl_from_IPersistFolder2(IPersistFolder2 *iface)
+{
+    return (IPrintersFolderImpl *)((char*)iface - FIELD_OFFSET(IPrintersFolderImpl, lpvtblPersistFolder2));
+}
+
 static HRESULT WINAPI IShellFolder_Printers_fnQueryInterface(IShellFolder2 *iface,
                REFIID riid, LPVOID *ppvObj)
 {
@@ -54,6 +60,12 @@ static HRESULT WINAPI IShellFolder_Printers_fnQueryInterface(IShellFolder2 *ifac
     {
         *ppvObj = This;
     }
+    else if (IsEqualIID (riid, &IID_IPersist) ||
+             IsEqualIID (riid, &IID_IPersistFolder) ||
+             IsEqualIID (riid, &IID_IPersistFolder2))
+    {
+        *ppvObj = &This->lpvtblPersistFolder2;
+    }
 
     if (*ppvObj)
     {
@@ -288,6 +300,62 @@ static const IShellFolder2Vtbl vtbl_ShellFolder2 =
     IShellFolder_Printers_fnMapColumnToSCID
 };
 
+/*** IPersistFolder2 ***/
+static HRESULT WINAPI IPersistFolder2_Printers_fnQueryInterface(IPersistFolder2 * iface,
+               REFIID iid, LPVOID * ppvObj)
+{
+    IPrintersFolderImpl *This = impl_from_IPersistFolder2(iface);
+    return IUnknown_QueryInterface( (IUnknown*) This, iid, ppvObj);
+}
+
+static ULONG WINAPI IPersistFolder2_Printers_fnAddRef(IPersistFolder2 *iface)
+{
+    IPrintersFolderImpl *This = impl_from_IPersistFolder2(iface);
+    return IUnknown_AddRef( (IUnknown*) This);
+}
+
+static ULONG WINAPI IPersistFolder2_Printers_fnRelease(IPersistFolder2 *iface)
+{
+    IPrintersFolderImpl *This = impl_from_IPersistFolder2(iface);
+    return IUnknown_Release( (IUnknown*) This);
+}
+
+static HRESULT WINAPI IPersistFolder2_Printers_fnGetClassID(IPersistFolder2 *iface, CLSID *classId)
+{
+    IPrintersFolderImpl *This = impl_from_IPersistFolder2(iface);
+
+    FIXME("(%p) stub\n", This);
+
+    if (!classId)
+        return E_POINTER;
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IPersistFolder2_Printers_fnInitialize(IPersistFolder2 *iface, LPCITEMIDLIST pidl)
+{
+    IPrintersFolderImpl *This = impl_from_IPersistFolder2(iface);
+    FIXME("(%p) stub\n", This);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IPersistFolder2_Printers_fnGetCurFolder(IPersistFolder2 *iface, LPITEMIDLIST *pidl)
+{
+    IPrintersFolderImpl *This = impl_from_IPersistFolder2(iface);
+    FIXME("(%p) stub\n", This);
+    return E_NOTIMPL;
+}
+
+static const IPersistFolder2Vtbl vtbl_PersistFolder2 =
+{
+    IPersistFolder2_Printers_fnQueryInterface,
+    IPersistFolder2_Printers_fnAddRef,
+    IPersistFolder2_Printers_fnRelease,
+    IPersistFolder2_Printers_fnGetClassID,
+    IPersistFolder2_Printers_fnInitialize,
+    IPersistFolder2_Printers_fnGetCurFolder
+};
+
 HRESULT WINAPI Printers_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv)
 {
     IPrintersFolderImpl *sf;
@@ -305,6 +373,7 @@ HRESULT WINAPI Printers_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOID *
 
     sf->ref = 0;
     sf->lpVtbl = &vtbl_ShellFolder2;
+    sf->lpvtblPersistFolder2 = &vtbl_PersistFolder2;
 
     if (IUnknown_QueryInterface((IShellFolder2 *)sf, riid, ppv) != S_OK)
     {




More information about the wine-cvs mailing list