const IShellFolder2Vtbl *lpVtbl;
const IPersistFolder2Vtbl *lpvtblPersistFolder2;
LONG ref;
+
+ LPITEMIDLIST pidl;
} IPrintersFolderImpl;
static inline IPrintersFolderImpl *impl_from_IPersistFolder2(IPersistFolder2 *iface)
if (!refCount)
{
TRACE ("-- destroying IShellFolder(%p)\n", This);
+ SHFree(This->pidl);
LocalFree (This);
}
return refCount;
static HRESULT WINAPI IPersistFolder2_Printers_fnInitialize(IPersistFolder2 *iface, LPCITEMIDLIST pidl)
{
IPrintersFolderImpl *This = impl_from_IPersistFolder2(iface);
- FIXME("(%p) stub\n", This);
- return E_NOTIMPL;
+
+ TRACE("(%p)->(%p)\n", This, pidl);
+
+ SHFree(This->pidl);
+ This->pidl = ILClone(pidl);
+
+ return S_OK;
}
static HRESULT WINAPI IPersistFolder2_Printers_fnGetCurFolder(IPersistFolder2 *iface, LPITEMIDLIST *pidl)
{
IPrintersFolderImpl *This = impl_from_IPersistFolder2(iface);
- FIXME("(%p) stub\n", This);
- return E_NOTIMPL;
+
+ TRACE("(%p)->(%p)\n", This, pidl);
+
+ *pidl = ILClone(This->pidl);
+
+ return *pidl ? S_OK : S_FALSE;
}
static const IPersistFolder2Vtbl vtbl_PersistFolder2 =
return E_OUTOFMEMORY;
sf->ref = 0;
+ sf->pidl = NULL;
sf->lpVtbl = &vtbl_ShellFolder2;
sf->lpvtblPersistFolder2 = &vtbl_PersistFolder2;
static void test_printers_folder(void)
{
IShellFolder2 *folder;
+ IPersistFolder2 *pf;
SHELLDETAILS details;
SHCOLSTATEF state;
+ LPITEMIDLIST pidl1, pidl2;
INT i;
HRESULT hr;
/* crashes on XP */
hr = IShellFolder2_GetDetailsOf(folder, NULL, 0, NULL);
hr = IShellFolder2_GetDefaultColumnState(folder, 0, NULL);
+ hr = IPersistFolder2_GetCurFolder(pf, NULL);
}
/* 5 columns defined */
ok(state == (SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT), "got 0x%x\n", state);
}
+ /* default pidl */
+ hr = IShellFolder2_QueryInterface(folder, &IID_IPersistFolder2, (void**)&pf);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ /* not initialized */
+ pidl1 = (void*)0xdeadbeef;
+ hr = IPersistFolder2_GetCurFolder(pf, &pidl1);
+ ok(hr == S_FALSE, "got 0x%08x\n", hr);
+ ok(pidl1 == NULL, "got %p\n", pidl1);
+
+ hr = SHGetSpecialFolderLocation(NULL, CSIDL_PRINTERS, &pidl2);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ hr = IPersistFolder2_Initialize(pf, pidl2);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ hr = IPersistFolder2_GetCurFolder(pf, &pidl1);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ ok(ILIsEqual(pidl1, pidl2), "expected same PIDL\n");
+ IPersistFolder2_Release(pf);
+
+ ILFree(pidl1);
+ ILFree(pidl2);
IShellFolder2_Release(folder);
CoUninitialize();