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