Added patch to implement FolterImpl_Items and stubbed FolderItems interface.

This commit is contained in:
Sebastian Lackner 2015-09-04 23:52:08 +02:00
parent 12beeb3ac9
commit b61581b653
5 changed files with 310 additions and 1 deletions

View File

@ -39,7 +39,7 @@ Wine. All those differences are also documented on the
Included bug fixes and improvements
-----------------------------------
**Bug fixes and features included in the next upcoming release [13]:**
**Bug fixes and features included in the next upcoming release [14]:**
* Add stub for winspool.SetPrinterW level 8 ([Wine Bug #24645](https://bugs.winehq.org/show_bug.cgi?id=24645))
* Allow non-nullterminated string as working directory in kernel32.create_startup_info
@ -48,6 +48,7 @@ Included bug fixes and improvements
* Fix access violation in MSYS2 git when cloning repository
* Fix error handling in DeferWindowPos when passing an invalid HWND ([Wine Bug #23187](https://bugs.winehq.org/show_bug.cgi?id=23187))
* Fix failure to create anonymous file mapping after failed open_fd server call
* Implement FolterImpl_Items and stubbed FolderItems interface
* Implement a Courier New replacement font ([Wine Bug #20456](https://bugs.winehq.org/show_bug.cgi?id=20456))
* Implement a Times New Roman replacement font ([Wine Bug #32342](https://bugs.winehq.org/show_bug.cgi?id=32342))
* Map EXDEV error code to STATUS_NOT_SAME_DEVICE

1
debian/changelog vendored
View File

@ -26,6 +26,7 @@ wine-staging (1.7.51) UNRELEASED; urgency=low
* Added patch to create Microsoft\Windows\Themes directory during Wineprefix
creation.
* Added patch to avoid deprecation warning for OpenCL 1.2 APIs.
* Added patch to implement FolterImpl_Items and stubbed FolderItems interface.
* Removed patch to fix bug in wineserver debug_children inheritance (accepted
upstream).
* Removed patch to use helper function for NtWaitForMultipleObjects and

View File

@ -243,6 +243,7 @@ patch_enable_all ()
enable_shdocvw_ParseURLFromOutsideSource_Tests="$1"
enable_shell32_Default_Path="$1"
enable_shell32_File_Property_Dialog="$1"
enable_shell32_FolderItems_Stub_Iface="$1"
enable_shell32_IDragSourceHelper="$1"
enable_shell32_Icons="$1"
enable_shell32_Microsoft_Windows_Themes="$1"
@ -817,6 +818,9 @@ patch_enable ()
shell32-File_Property_Dialog)
enable_shell32_File_Property_Dialog="$2"
;;
shell32-FolderItems_Stub_Iface)
enable_shell32_FolderItems_Stub_Iface="$2"
;;
shell32-IDragSourceHelper)
enable_shell32_IDragSourceHelper="$2"
;;
@ -4820,6 +4824,18 @@ if test "$enable_shell32_File_Property_Dialog" -eq 1; then
) >> "$patchlist"
fi
# Patchset shell32-FolderItems_Stub_Iface
# |
# | Modified files:
# | * dlls/shell32/shell32_main.h, dlls/shell32/shelldispatch.c
# |
if test "$enable_shell32_FolderItems_Stub_Iface" -eq 1; then
patch_apply shell32-FolderItems_Stub_Iface/0001-shell32-Implement-FolterImpl_Items-and-stubbed-Folde.patch
(
echo '+ { "Christian Costa", "shell32: Implement FolterImpl_Items and stubbed FolderItems interface.", 1 },';
) >> "$patchlist"
fi
# Patchset shell32-IDragSourceHelper
# |
# | This patchset fixes the following Wine bugs:

View File

@ -0,0 +1,290 @@
From 668d55704db4f9ccbc91cf38eaa912448305e285 Mon Sep 17 00:00:00 2001
From: Christian Costa <titan.costa@gmail.com>
Date: Thu, 3 Sep 2015 12:08:54 -0300
Subject: shell32: Implement FolterImpl_Items and stubbed FolderItems
interface.
---
dlls/shell32/shell32_main.h | 1 +
dlls/shell32/shelldispatch.c | 224 ++++++++++++++++++++++++++++++++++++++++++-
2 files changed, 222 insertions(+), 3 deletions(-)
diff --git a/dlls/shell32/shell32_main.h b/dlls/shell32/shell32_main.h
index 492f79f..9142681 100644
--- a/dlls/shell32/shell32_main.h
+++ b/dlls/shell32/shell32_main.h
@@ -235,6 +235,7 @@ enum tid_t {
IShellFolderViewDual3_tid,
Folder3_tid,
FolderItem2_tid,
+ FolderItems_tid,
FolderItemVerb_tid,
FolderItemVerbs_tid,
LAST_tid
diff --git a/dlls/shell32/shelldispatch.c b/dlls/shell32/shelldispatch.c
index f5eca28..130047a 100644
--- a/dlls/shell32/shelldispatch.c
+++ b/dlls/shell32/shelldispatch.c
@@ -48,6 +48,7 @@ static const IID * const tid_ids[] =
&IID_IShellFolderViewDual3,
&IID_Folder3,
&IID_FolderItem2,
+ &IID_FolderItems,
&IID_FolderItemVerb,
&IID_FolderItemVerbs
};
@@ -71,6 +72,12 @@ typedef struct {
} FolderItemImpl;
typedef struct {
+ FolderItems FolderItems_iface;
+ LONG ref;
+ VARIANT dir;
+} FolderItemsImpl;
+
+typedef struct {
FolderItemVerbs FolderItemVerbs_iface;
LONG ref;
@@ -102,6 +109,11 @@ static inline FolderItemImpl *impl_from_FolderItem(FolderItem2 *iface)
return CONTAINING_RECORD(iface, FolderItemImpl, FolderItem2_iface);
}
+static inline FolderItemsImpl *impl_from_FolderItems(FolderItems *iface)
+{
+ return CONTAINING_RECORD(iface, FolderItemsImpl, FolderItems_iface);
+}
+
static inline FolderItemVerbsImpl *impl_from_FolderItemVerbs(FolderItemVerbs *iface)
{
return CONTAINING_RECORD(iface, FolderItemVerbsImpl, FolderItemVerbs_iface);
@@ -939,6 +951,211 @@ static HRESULT FolderItem_Constructor(VARIANT *dir, FolderItem **ppfi)
return ret;
}
+static HRESULT WINAPI FolderItemsImpl_QueryInterface(FolderItems *iface,
+ REFIID riid, LPVOID *ppv)
+{
+ FolderItemsImpl *This = impl_from_FolderItems(iface);
+
+ TRACE("(%p,%p,%p)\n", iface, riid, ppv);
+
+ if (!ppv) return E_INVALIDARG;
+
+ if (IsEqualIID(&IID_IUnknown, riid) ||
+ IsEqualIID(&IID_IDispatch, riid) ||
+ IsEqualIID(&IID_FolderItems, riid))
+ *ppv = &This->FolderItems_iface;
+ else
+ {
+ FIXME("not implemented for %s\n", shdebugstr_guid(riid));
+ *ppv = NULL;
+ return E_NOINTERFACE;
+ }
+ IUnknown_AddRef((IUnknown*)*ppv);
+ return S_OK;
+}
+
+static ULONG WINAPI FolderItemsImpl_AddRef(FolderItems *iface)
+{
+ FolderItemsImpl *This = impl_from_FolderItems(iface);
+ ULONG ref = InterlockedIncrement(&This->ref);
+
+ TRACE("(%p), new refcount=%i\n", iface, ref);
+
+ return ref;
+}
+
+static ULONG WINAPI FolderItemsImpl_Release(FolderItems *iface)
+{
+ FolderItemsImpl *This = impl_from_FolderItems(iface);
+ ULONG ref = InterlockedDecrement(&This->ref);
+
+ TRACE("(%p), new refcount=%i\n", iface, ref);
+
+ if (!ref)
+ {
+ VariantClear(&This->dir);
+ HeapFree(GetProcessHeap(), 0, This);
+ }
+ return ref;
+}
+
+static HRESULT WINAPI FolderItemsImpl_GetTypeInfoCount(FolderItems *iface,
+ UINT *pctinfo)
+{
+ TRACE("(%p,%p)\n", iface, pctinfo);
+
+ *pctinfo = 1;
+ return S_OK;
+}
+
+static HRESULT WINAPI FolderItemsImpl_GetTypeInfo(FolderItems *iface, UINT iTInfo,
+ LCID lcid, ITypeInfo **ppTInfo)
+{
+ HRESULT hr;
+
+ TRACE("(%p,%u,%d,%p)\n", iface, iTInfo, lcid, ppTInfo);
+
+ hr = get_typeinfo(FolderItems_tid, ppTInfo);
+ if (SUCCEEDED(hr))
+ ITypeInfo_AddRef(*ppTInfo);
+ return hr;
+}
+
+static HRESULT WINAPI FolderItemsImpl_GetIDsOfNames(FolderItems *iface,
+ REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid,
+ DISPID *rgDispId)
+{
+ ITypeInfo *ti;
+ HRESULT hr;
+
+ TRACE("(%p,%p,%p,%u,%d,%p)\n", iface, riid, rgszNames, cNames, lcid,
+ rgDispId);
+
+ hr = get_typeinfo(FolderItems_tid, &ti);
+ if (SUCCEEDED(hr))
+ hr = ITypeInfo_GetIDsOfNames(ti, rgszNames, cNames, rgDispId);
+ return hr;
+}
+
+static HRESULT WINAPI FolderItemsImpl_Invoke(FolderItems *iface,
+ DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags,
+ DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo,
+ UINT *puArgErr)
+{
+ FolderItemsImpl *This = impl_from_FolderItems(iface);
+ ITypeInfo *ti;
+ HRESULT hr;
+
+ TRACE("(%p,%d,%p,%d,%u,%p,%p,%p,%p)\n", iface, dispIdMember, riid, lcid,
+ wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
+
+ hr = get_typeinfo(FolderItems_tid, &ti);
+ if (SUCCEEDED(hr))
+ hr = ITypeInfo_Invoke(ti, This, dispIdMember, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
+ return hr;
+}
+
+static HRESULT WINAPI FolderItemsImpl_get_Count(FolderItems *iface, LONG *plCount)
+{
+ FIXME("(%p,%p): stub\n", iface, plCount);
+
+ if (!plCount)
+ return E_POINTER;
+
+ *plCount = 0;
+
+ return S_OK;
+}
+
+static HRESULT WINAPI FolderItemsImpl_get_Application(FolderItems *iface, IDispatch **ppid)
+{
+ FIXME("(%p,%p): stub\n", iface, ppid);
+
+ if (!ppid)
+ return E_POINTER;
+
+ *ppid = NULL;
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI FolderItemsImpl_get_Parent(FolderItems *iface, IDispatch **ppid)
+{
+ FIXME("(%p,%p): stub\n", iface, ppid);
+
+ if (!ppid)
+ return E_POINTER;
+
+ *ppid = NULL;
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI FolderItemsImpl_Item(FolderItems *iface, VARIANT index, FolderItem **ppid)
+{
+ FIXME("(%p,%s,%p): stub\n", iface, debugstr_variant(&index), ppid);
+
+ if (!ppid)
+ return E_POINTER;
+
+ *ppid = NULL;
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI FolderItemsImpl__NewEnum(FolderItems *iface, IUnknown **ppunk)
+{
+ FIXME("(%p,%p): stub\n", iface, ppunk);
+
+ if (!ppunk)
+ return E_POINTER;
+
+ *ppunk = NULL;
+
+ return E_NOTIMPL;
+}
+
+static const FolderItemsVtbl FolderItemsImpl_Vtbl = {
+ FolderItemsImpl_QueryInterface,
+ FolderItemsImpl_AddRef,
+ FolderItemsImpl_Release,
+ FolderItemsImpl_GetTypeInfoCount,
+ FolderItemsImpl_GetTypeInfo,
+ FolderItemsImpl_GetIDsOfNames,
+ FolderItemsImpl_Invoke,
+ FolderItemsImpl_get_Count,
+ FolderItemsImpl_get_Application,
+ FolderItemsImpl_get_Parent,
+ FolderItemsImpl_Item,
+ FolderItemsImpl__NewEnum
+};
+
+static HRESULT FolderItems_Constructor(VARIANT *dir, FolderItems **ppfi)
+{
+ FolderItemsImpl *This;
+ HRESULT ret;
+
+ TRACE("%s\n", debugstr_variant(dir));
+
+ *ppfi = NULL;
+
+ This = HeapAlloc(GetProcessHeap(), 0, sizeof(FolderItemsImpl));
+ if (!This) return E_OUTOFMEMORY;
+ This->FolderItems_iface.lpVtbl = &FolderItemsImpl_Vtbl;
+ This->ref = 1;
+
+ VariantInit(&This->dir);
+ ret = VariantCopy(&This->dir, dir);
+ if (FAILED(ret))
+ {
+ HeapFree(GetProcessHeap(), 0, This);
+ return E_OUTOFMEMORY;
+ }
+
+ *ppfi = (FolderItems*)&This->FolderItems_iface;
+ return ret;
+}
+
static HRESULT WINAPI FolderImpl_QueryInterface(Folder3 *iface, REFIID riid,
LPVOID *ppv)
{
@@ -1091,10 +1308,11 @@ static HRESULT WINAPI FolderImpl_get_ParentFolder(Folder3 *iface, Folder **ppsf)
static HRESULT WINAPI FolderImpl_Items(Folder3 *iface, FolderItems **ppid)
{
- FIXME("(%p,%p)\n", iface, ppid);
+ FolderImpl *This = impl_from_Folder(iface);
- *ppid = NULL;
- return E_NOTIMPL;
+ TRACE("(%p,%p)\n", iface, ppid);
+
+ return FolderItems_Constructor(&This->dir, ppid);
}
static HRESULT WINAPI FolderImpl_ParseName(Folder3 *iface, BSTR name, FolderItem **item)
--
2.5.1

View File

@ -0,0 +1 @@
Fixes: Implement FolterImpl_Items and stubbed FolderItems interface