From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/shell32/shell32_classes.idl | 5 + dlls/shell32/shell32_main.h | 2 + dlls/shell32/shellole.c | 1 + dlls/shell32/shfldr_desktop.c | 209 +++++++++++++++++++++++++++++++ 4 files changed, 217 insertions(+)
diff --git a/dlls/shell32/shell32_classes.idl b/dlls/shell32/shell32_classes.idl index 22ef49ae5c7..dc65ed3728d 100644 --- a/dlls/shell32/shell32_classes.idl +++ b/dlls/shell32/shell32_classes.idl @@ -178,3 +178,8 @@ coclass KnownFolderManager { interface IKnownFolderManager; } threading(apartment), uuid(3ad05575-8857-4850-9277-11b85bdb8e09) ] coclass FileOperation { interface IFileOperation; } + +[ + threading(apartment), + uuid(75048700-ef1f-11d0-9888-006097deacf9) +] coclass ActiveDesktop { interface IActiveDesktop; } diff --git a/dlls/shell32/shell32_main.h b/dlls/shell32/shell32_main.h index ca93293e50b..7bb26e46a6e 100644 --- a/dlls/shell32/shell32_main.h +++ b/dlls/shell32/shell32_main.h @@ -102,6 +102,8 @@ HRESULT WINAPI QueryAssociations_Constructor(IUnknown *pUnkOuter, REFIID riid, L HRESULT WINAPI ExplorerBrowser_Constructor(IUnknown *pUnkOuter, REFIID riid, LPVOID *ppv) DECLSPEC_HIDDEN; HRESULT WINAPI KnownFolderManager_Constructor(IUnknown *pUnkOuter, REFIID riid, LPVOID *ppv) DECLSPEC_HIDDEN; HRESULT WINAPI IFileOperation_Constructor(IUnknown *outer, REFIID riid, void **out) DECLSPEC_HIDDEN; +HRESULT WINAPI ActiveDesktop_Constructor(IUnknown *outer, REFIID riid, void **out) DECLSPEC_HIDDEN; + extern HRESULT CPanel_GetIconLocationW(LPCITEMIDLIST, LPWSTR, UINT, int*) DECLSPEC_HIDDEN; HRESULT WINAPI CPanel_ExtractIconA(LPITEMIDLIST pidl, LPCSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize) DECLSPEC_HIDDEN; HRESULT WINAPI CPanel_ExtractIconW(LPITEMIDLIST pidl, LPCWSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize) DECLSPEC_HIDDEN; diff --git a/dlls/shell32/shellole.c b/dlls/shell32/shellole.c index 7cd46ba2d98..589e5c5170a 100644 --- a/dlls/shell32/shellole.c +++ b/dlls/shell32/shellole.c @@ -87,6 +87,7 @@ static const struct { {&CLSID_DestinationList, CustomDestinationList_Constructor}, {&CLSID_ShellImageDataFactory, ShellImageDataFactory_Constructor}, {&CLSID_FileOperation, IFileOperation_Constructor}, + {&CLSID_ActiveDesktop, ActiveDesktop_Constructor}, {NULL, NULL} };
diff --git a/dlls/shell32/shfldr_desktop.c b/dlls/shell32/shfldr_desktop.c index f8672836da9..7bf54c4e7d0 100644 --- a/dlls/shell32/shfldr_desktop.c +++ b/dlls/shell32/shfldr_desktop.c @@ -38,6 +38,7 @@ #include "ole2.h" #include "shlguid.h"
+#include "wininet.h" #include "pidl.h" #include "shell32_main.h" #include "shresdef.h" @@ -939,3 +940,211 @@ HRESULT WINAPI ISF_Desktop_Constructor (
return IShellFolder2_QueryInterface( &cached_sf->IShellFolder2_iface, riid, ppv ); } + +static HRESULT WINAPI active_desktop_QueryInterface(IActiveDesktop *iface, REFIID riid, void **obj) +{ + TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), obj); + + *obj = NULL; + + if (IsEqualIID(riid, &IID_IActiveDesktop) + || IsEqualIID(riid, &IID_IUnknown)) + { + *obj = iface; + } + + if (*obj) + { + IUnknown_AddRef((IUnknown *)*obj); + return S_OK; + } + + WARN("Unsupported interface %s.\n", debugstr_guid(riid)); + *obj = NULL; + return E_NOINTERFACE; +} + +static ULONG WINAPI active_desktop_AddRef(IActiveDesktop *iface) +{ + return 2; +} + +static ULONG WINAPI active_desktop_Release(IActiveDesktop *iface) +{ + return 1; +} + +static HRESULT WINAPI active_desktop_ApplyChanges(IActiveDesktop *iface, DWORD flags) +{ + FIXME("%p, %#lx.\n", iface, flags); + + return E_NOTIMPL; +} + +static HRESULT WINAPI active_desktop_GetWallpaper(IActiveDesktop *iface, PWSTR wallpaper, UINT length, DWORD flags) +{ + FIXME("%p, %p, %u, %#lx.\n", iface, wallpaper, length, flags); + + return E_NOTIMPL; +} + +static HRESULT WINAPI active_desktop_SetWallpaper(IActiveDesktop *iface, PCWSTR wallpaper, DWORD reserved) +{ + FIXME("%p, %s, %#lx.\n", iface, debugstr_w(wallpaper), reserved); + + return E_NOTIMPL; +} + +static HRESULT WINAPI active_desktop_GetWallpaperOptions(IActiveDesktop *iface, LPWALLPAPEROPT options, DWORD reserved) +{ + FIXME("%p, %p, %#lx.\n", iface, options, reserved); + + return E_NOTIMPL; +} + +static HRESULT WINAPI active_desktop_SetWallpaperOptions(IActiveDesktop *iface, LPCWALLPAPEROPT options, DWORD reserved) +{ + FIXME("%p, %p, %#lx.\n", iface, options, reserved); + + return E_NOTIMPL; +} + +static HRESULT WINAPI active_desktop_GetPattern(IActiveDesktop *iface, PWSTR pattern, UINT length, DWORD reserved) +{ + FIXME("%p, %p, %u, %#lx.\n", iface, pattern, length, reserved); + + return E_NOTIMPL; +} + +static HRESULT WINAPI active_desktop_SetPattern(IActiveDesktop *iface, PCWSTR pattern, DWORD reserved) +{ + FIXME("%p, %s, %#lx.\n", iface, debugstr_w(pattern), reserved); + + return E_NOTIMPL; +} + +static HRESULT WINAPI active_desktop_GetDesktopItemOptions(IActiveDesktop *iface, LPCOMPONENTSOPT options, DWORD reserved) +{ + FIXME("%p, %p, %#lx.\n", iface, options, reserved); + + return E_NOTIMPL; +} + +static HRESULT WINAPI active_desktop_SetDesktopItemOptions(IActiveDesktop *iface, LPCCOMPONENTSOPT options, DWORD reserved) +{ + FIXME("%p, %p, %#lx.\n", iface, options, reserved); + + return E_NOTIMPL; +} + +static HRESULT WINAPI active_desktop_AddDesktopItem(IActiveDesktop *iface, LPCCOMPONENT component, DWORD reserved) +{ + FIXME("%p, %p, %#lx.\n", iface, component, reserved); + + return E_NOTIMPL; +} + +static HRESULT WINAPI active_desktop_AddDesktopItemWithUI(IActiveDesktop *iface, HWND hwnd, LPCOMPONENT component, DWORD reserved) +{ + FIXME("%p, %p, %p, %#lx.\n", iface, hwnd, component, reserved); + + return E_NOTIMPL; +} + +static HRESULT WINAPI active_desktop_ModifyDesktopItem(IActiveDesktop *iface, LPCCOMPONENT component, DWORD flags) +{ + FIXME("%p, %p, %#lx.\n", iface, component, flags); + + return E_NOTIMPL; +} + +static HRESULT WINAPI active_desktop_RemoveDesktopItem(IActiveDesktop *iface, LPCCOMPONENT component, DWORD reserved) +{ + FIXME("%p, %p, %#lx.\n", iface, component, reserved); + + return E_NOTIMPL; +} + +static HRESULT WINAPI active_desktop_GetDesktopItemCount(IActiveDesktop *iface, int *count, DWORD reserved) +{ + FIXME("%p, %p, %#lx.\n", iface, count, reserved); + + return E_NOTIMPL; +} + +static HRESULT WINAPI active_desktop_GetDesktopItem(IActiveDesktop *iface, int index, LPCOMPONENT component, DWORD reserved) +{ + FIXME("%p, %d, %p, %#lx.\n", iface, index, component, reserved); + + return E_NOTIMPL; +} + +static HRESULT WINAPI active_desktop_GetDesktopItemByID(IActiveDesktop *iface, ULONG_PTR id, LPCOMPONENT component, DWORD reserved) +{ + FIXME("%p, %Ix, %p, %#lx.\n", iface, id, component, reserved); + + return E_NOTIMPL; +} + +static HRESULT WINAPI active_desktop_GenerateDesktopItemHtml(IActiveDesktop *iface, PCWSTR filename, LPCOMPONENT component, DWORD reserved) +{ + FIXME("%p, %s, %p, %#lx.\n", iface, debugstr_w(filename), component, reserved); + + return E_NOTIMPL; +} + +static HRESULT WINAPI active_desktop_AddUrl(IActiveDesktop *iface, HWND hwnd, PCWSTR source, LPCOMPONENT component, DWORD flags) +{ + FIXME("%p, %p, %s, %p, %#lx.\n", iface, hwnd, debugstr_w(source), component, flags); + + return E_NOTIMPL; +} + +static HRESULT WINAPI active_desktop_GetDesktopItemBySource(IActiveDesktop *iface, PCWSTR source, LPCOMPONENT component, DWORD reserved) +{ + FIXME("%p, %s, %p, %#lx.\n", iface, debugstr_w(source), component, reserved); + + return E_NOTIMPL; +} + +static const IActiveDesktopVtbl active_desktop_vtbl = +{ + active_desktop_QueryInterface, + active_desktop_AddRef, + active_desktop_Release, + active_desktop_ApplyChanges, + active_desktop_GetWallpaper, + active_desktop_SetWallpaper, + active_desktop_GetWallpaperOptions, + active_desktop_SetWallpaperOptions, + active_desktop_GetPattern, + active_desktop_SetPattern, + active_desktop_GetDesktopItemOptions, + active_desktop_SetDesktopItemOptions, + active_desktop_AddDesktopItem, + active_desktop_AddDesktopItemWithUI, + active_desktop_ModifyDesktopItem, + active_desktop_RemoveDesktopItem, + active_desktop_GetDesktopItemCount, + active_desktop_GetDesktopItem, + active_desktop_GetDesktopItemByID, + active_desktop_GenerateDesktopItemHtml, + active_desktop_AddUrl, + active_desktop_GetDesktopItemBySource, +}; + +HRESULT WINAPI ActiveDesktop_Constructor(IUnknown *outer, REFIID riid, void **obj) +{ + static IActiveDesktop object = { &active_desktop_vtbl }; + HRESULT hr; + + TRACE("%p, %s, %p.\n", outer, debugstr_guid(riid), obj); + + if (outer) + return CLASS_E_NOAGGREGATION; + + hr = IUnknown_QueryInterface(&object, riid, obj); + IUnknown_Release(&object); + + return hr; +}