mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-01-28 22:04:43 -08:00
Added patch to implement FolterImpl_Items and stubbed FolderItems interface.
This commit is contained in:
parent
12beeb3ac9
commit
b61581b653
@ -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
1
debian/changelog
vendored
@ -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
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
|
1
patches/shell32-FolderItems_Stub_Iface/definition
Normal file
1
patches/shell32-FolderItems_Stub_Iface/definition
Normal file
@ -0,0 +1 @@
|
||||
Fixes: Implement FolterImpl_Items and stubbed FolderItems interface
|
Loading…
x
Reference in New Issue
Block a user