From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- include/wininet.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/include/wininet.h b/include/wininet.h index ce5aebdca8c..cef5da15de2 100644 --- a/include/wininet.h +++ b/include/wininet.h @@ -16,8 +16,8 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
-#ifndef _WINE_WININET_H_ -#define _WINE_WININET_H_ +#ifndef _WININET_ +#define _WININET_
#ifdef __cplusplus extern "C" {
From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- include/shlguid.h | 3 ++ include/shlobj.h | 98 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 101 insertions(+)
diff --git a/include/shlguid.h b/include/shlguid.h index 687bbec79e9..c6878c36864 100644 --- a/include/shlguid.h +++ b/include/shlguid.h @@ -238,4 +238,7 @@ DEFINE_GUID(BHID_ThumbnailHandler, 0x7B2E650A, 0x8E20, 0x4F4A, 0xB0,0x9E, 0x65,0 DEFINE_GUID(BHID_AssociationArray, 0xBEA9EF17, 0x82F1, 0x4F60, 0x92,0x84, 0x4F,0x8D,0xB7,0x5C,0x3B,0xE9); DEFINE_GUID(BHID_EnumAssocHandlers,0xB8AB0B9C, 0xC2EC, 0x4F7A, 0x91,0x8D, 0x31,0x49,0x00,0xE6,0x28,0x0A);
+DEFINE_GUID(CLSID_ActiveDesktop, 0x75048700, 0xef1f, 0x11d0, 0x98, 0x88, 0x00, 0x60, 0x97, 0xde, 0xac, 0xf9); +DEFINE_GUID(IID_IActiveDesktop, 0xf490eb00, 0x1240, 0x11d1, 0x98, 0x88, 0x00, 0x60, 0x97, 0xde, 0xac, 0xf9); + #endif /* __WINE_SHLGUID_H */ diff --git a/include/shlobj.h b/include/shlobj.h index 8d6eab85eb6..feee6cd9b98 100644 --- a/include/shlobj.h +++ b/include/shlobj.h @@ -754,6 +754,104 @@ DECLARE_INTERFACE_(IProgressDialog,IUnknown) #define IProgressDialog_Timer(p,a,b) (p)->lpVtbl->Timer(p,a,b) #endif
+#ifdef _WININET_ + +typedef struct _tagWALLPAPEROPT +{ + DWORD dwSize; + DWORD dwStyle; +} WALLPAPEROPT, *LPWALLPAPEROPT; + +typedef const WALLPAPEROPT *LPCWALLPAPEROPT; + +typedef struct _tagCOMPPOS +{ + DWORD dwSize; + int iLeft; + int iTop; + DWORD dwWidth; + DWORD dwHeight; + int izIndex; + BOOL fCanResize; + BOOL fCanResizeX; + BOOL fCanResizeY; + int iPreferredLeftPercent; + int iPreferredTopPercent; +} COMPPOS, *LPCOMPPOS; + +typedef const COMPPOS *LPCCOMPPOS; + +typedef struct _tagCOMPSTATEINFO +{ + DWORD dwSize; + int iLeft; + int iTop; + DWORD dwWidth; + DWORD dwHeight; + DWORD dwItemState; +} COMPSTATEINFO, *LPCOMPSTATEINFO; + +typedef const COMPSTATEINFO *LPCCOMPSTATEINFO; + +typedef struct _tagCOMPONENT +{ + DWORD dwSize; + DWORD dwID; + int iComponentType; + BOOL fChecked; + BOOL fDirty; + BOOL fNoScroll; + COMPPOS cpPos; + WCHAR wszFriendlyName[MAX_PATH]; + WCHAR wszSource[INTERNET_MAX_URL_LENGTH]; + WCHAR wszSubscribedURL[INTERNET_MAX_URL_LENGTH]; + DWORD dwCurItemState; + COMPSTATEINFO csiOriginal; + COMPSTATEINFO csiRestored; +} COMPONENT, *LPCOMPONENT; + +typedef const COMPONENT *LPCCOMPONENT; + +typedef struct _tagCOMPONENTSOPT +{ + DWORD dwSize; + BOOL fEnableComponents; + BOOL fActiveDesktop; +} COMPONENTSOPT, *LPCOMPONENTSOPT; + +typedef const COMPONENTSOPT *LPCCOMPONENTSOPT; + +#define INTERFACE IActiveDesktop +DECLARE_INTERFACE_(IActiveDesktop, IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **obj) PURE; + STDMETHOD_(ULONG, AddRef)(THIS) PURE; + STDMETHOD_(ULONG, Release)(THIS) PURE; + /*** IActiveDesktop ***/ + STDMETHOD(ApplyChanges)(THIS_ DWORD flags) PURE; + STDMETHOD(GetWallpaper)(THIS_ PWSTR wallpaper, UINT length, DWORD flags) PURE; + STDMETHOD(SetWallpaper)(THIS_ PCWSTR wallpaper, DWORD reserved) PURE; + STDMETHOD(GetWallpaperOptions)(THIS_ LPWALLPAPEROPT options, DWORD reserved) PURE; + STDMETHOD(SetWallpaperOptions)(THIS_ LPCWALLPAPEROPT options, DWORD reserved) PURE; + STDMETHOD(GetPattern)(THIS_ PWSTR pattern, UINT length, DWORD reserved) PURE; + STDMETHOD(SetPattern)(THIS_ PCWSTR pattern, DWORD reserved) PURE; + STDMETHOD(GetDesktopItemOptions)(THIS_ LPCOMPONENTSOPT options, DWORD reserved) PURE; + STDMETHOD(SetDesktopItemOptions)(THIS_ LPCCOMPONENTSOPT options, DWORD reserved) PURE; + STDMETHOD(AddDesktopItem)(THIS_ LPCCOMPONENT component, DWORD reserved) PURE; + STDMETHOD(AddDesktopItemWithUI)(THIS_ HWND hwnd, LPCOMPONENT component, DWORD reserved) PURE; + STDMETHOD(ModifyDesktopItem)(THIS_ LPCCOMPONENT component, DWORD flags) PURE; + STDMETHOD(RemoveDesktopItem)(THIS_ LPCCOMPONENT component, DWORD reserved) PURE; + STDMETHOD(GetDesktopItemCount)(THIS_ int *count, DWORD reserved) PURE; + STDMETHOD(GetDesktopItem)(THIS_ int index, LPCOMPONENT component, DWORD reserved) PURE; + STDMETHOD(GetDesktopItemByID)(THIS_ ULONG_PTR id, LPCOMPONENT component, DWORD reserved) PURE; + STDMETHOD(GenerateDesktopItemHtml)(THIS_ PCWSTR filename, LPCOMPONENT component, DWORD reserved) PURE; + STDMETHOD(AddUrl)(THIS_ HWND hwnd, PCWSTR source, LPCOMPONENT component, DWORD flags) PURE; + STDMETHOD(GetDesktopItemBySource)(THIS_ PCWSTR source, LPCOMPONENT component, DWORD reserved) PURE; +}; +#undef INTERFACE + +#endif /* _WININET_ */
/**************************************************************************** * SHAddToRecentDocs API
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; +}
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=124819
Your paranoid android.
=== debian11 (32 bit zh:CN report) ===
shell32: autocomplete.c:614: Test failed: Expected (null), got L"ab" autocomplete.c:637: Test failed: Expected (null), got L"www.ax"