[PATCH] Use public define for QISearch table entry, make it available by name (as on Vista+)
Nikolay Sivov
nsivov at codeweavers.com
Sat Mar 27 11:23:19 CDT 2010
---
dlls/shlwapi/ordinal.c | 40 ++++++++++++++++++----------------------
dlls/shlwapi/shlwapi.spec | 2 +-
include/shlwapi.h | 9 +++++++++
3 files changed, 28 insertions(+), 23 deletions(-)
diff --git a/dlls/shlwapi/ordinal.c b/dlls/shlwapi/ordinal.c
index bb17734..a79eace 100644
--- a/dlls/shlwapi/ordinal.c
+++ b/dlls/shlwapi/ordinal.c
@@ -1634,6 +1634,8 @@ BOOL WINAPI SHLoadMenuPopup(HINSTANCE hInst, LPCWSTR szName)
{
HMENU hMenu;
+ TRACE("%p %s\n", hInst, debugstr_w(szName));
+
if ((hMenu = LoadMenuW(hInst, szName)))
{
if (GetSubMenu(hMenu, 0))
@@ -1791,6 +1793,8 @@ BOOL WINAPI SHSimulateDrop(IDropTarget *pDrop, IDataObject *pDataObj,
DWORD dwEffect = DROPEFFECT_LINK | DROPEFFECT_MOVE | DROPEFFECT_COPY;
POINTL pt = { 0, 0 };
+ TRACE("%p %p 0x%08x %p %p\n", pDrop, pDataObj, grfKeyState, lpPt, pdwEffect);
+
if (!lpPt)
lpPt = &pt;
@@ -1799,7 +1803,7 @@ BOOL WINAPI SHSimulateDrop(IDropTarget *pDrop, IDataObject *pDataObj,
IDropTarget_DragEnter(pDrop, pDataObj, grfKeyState, *lpPt, pdwEffect);
- if (*pdwEffect)
+ if (*pdwEffect != DROPEFFECT_NONE)
return IDropTarget_Drop(pDrop, pDataObj, grfKeyState, *lpPt, pdwEffect);
IDropTarget_DragLeave(pDrop);
@@ -1891,7 +1895,7 @@ HRESULT WINAPI IUnknown_OnFocusOCS(IUnknown *lpUnknown, BOOL fGotFocus)
IOleControlSite* lpCSite = NULL;
HRESULT hRet = E_FAIL;
- TRACE("(%p,%s)\n", lpUnknown, fGotFocus ? "TRUE" : "FALSE");
+ TRACE("(%p, %d)\n", lpUnknown, fGotFocus);
if (lpUnknown)
{
hRet = IUnknown_QueryInterface(lpUnknown, &IID_IOleControlSite,
@@ -2149,12 +2153,10 @@ VOID WINAPI IUnknown_Set(IUnknown **lppDest, IUnknown *lpUnknown)
{
TRACE("(%p,%p)\n", lppDest, lpUnknown);
- if (lppDest)
- IUnknown_AtomicRelease(lppDest); /* Release existing interface */
+ IUnknown_AtomicRelease(lppDest);
if (lpUnknown)
{
- /* Copy */
IUnknown_AddRef(lpUnknown);
*lppDest = lpUnknown;
}
@@ -2344,12 +2346,6 @@ BOOL WINAPI FDSA_DeleteItem(FDSA_info *info, DWORD where)
return TRUE;
}
-
-typedef struct {
- REFIID refid;
- DWORD indx;
-} IFACE_INDEX_TBL;
-
/*************************************************************************
* @ [SHLWAPI.219]
*
@@ -2360,22 +2356,22 @@ typedef struct {
* Failure: E_POINTER or E_NOINTERFACE.
*/
HRESULT WINAPI QISearch(
- LPVOID w, /* [in] Table of interfaces */
- IFACE_INDEX_TBL *x, /* [in] Array of REFIIDs and indexes into the table */
+ void *base, /* [in] Table of interfaces */
+ const QITAB *table, /* [in] Array of REFIIDs and indexes into the table */
REFIID riid, /* [in] REFIID to get interface for */
- LPVOID *ppv) /* [out] Destination for interface pointer */
+ void **ppv) /* [out] Destination for interface pointer */
{
HRESULT ret;
IUnknown *a_vtbl;
- IFACE_INDEX_TBL *xmove;
+ const QITAB *xmove;
- TRACE("(%p %p %s %p)\n", w,x,debugstr_guid(riid),ppv);
+ TRACE("(%p %p %s %p)\n", base, table, debugstr_guid(riid), ppv);
if (ppv) {
- xmove = x;
- while (xmove->refid) {
- TRACE("trying (indx %d) %s\n", xmove->indx, debugstr_guid(xmove->refid));
- if (IsEqualIID(riid, xmove->refid)) {
- a_vtbl = (IUnknown*)(xmove->indx + (LPBYTE)w);
+ xmove = table;
+ while (xmove->piid) {
+ TRACE("trying (offset %d) %s\n", xmove->dwOffset, debugstr_guid(xmove->piid));
+ if (IsEqualIID(riid, xmove->piid)) {
+ a_vtbl = (IUnknown*)(xmove->dwOffset + (LPBYTE)base);
TRACE("matched, returning (%p)\n", a_vtbl);
*ppv = a_vtbl;
IUnknown_AddRef(a_vtbl);
@@ -2385,7 +2381,7 @@ HRESULT WINAPI QISearch(
}
if (IsEqualIID(riid, &IID_IUnknown)) {
- a_vtbl = (IUnknown*)(x->indx + (LPBYTE)w);
+ a_vtbl = (IUnknown*)(table->dwOffset + (LPBYTE)base);
TRACE("returning first for IUnknown (%p)\n", a_vtbl);
*ppv = a_vtbl;
IUnknown_AddRef(a_vtbl);
diff --git a/dlls/shlwapi/shlwapi.spec b/dlls/shlwapi/shlwapi.spec
index d899232..367046b 100644
--- a/dlls/shlwapi/shlwapi.spec
+++ b/dlls/shlwapi/shlwapi.spec
@@ -216,7 +216,7 @@
216 stdcall -noname SHAnsiToUnicodeCP(long str ptr long)
217 stdcall -noname SHUnicodeToAnsi(wstr ptr ptr)
218 stdcall -noname SHUnicodeToAnsiCP(long wstr ptr long)
-219 stdcall -noname QISearch(long long long long)
+219 stdcall QISearch(long long long long)
220 stdcall -noname SHSetDefaultDialogFont(ptr long)
221 stdcall -noname SHRemoveDefaultDialogFont(ptr)
222 stdcall -noname SHGlobalCounterCreate(long)
diff --git a/include/shlwapi.h b/include/shlwapi.h
index b449cfa..223bcdd 100644
--- a/include/shlwapi.h
+++ b/include/shlwapi.h
@@ -1085,6 +1085,15 @@ BOOL WINAPI IsOS(DWORD);
#define FDTF_RTLDATE 0x00000200
#define FDTF_NOAUTOREADINGORDER 0x00000400
+
+typedef struct
+{
+ const IID *piid;
+ int dwOffset;
+} QITAB, *LPQITAB;
+
+HRESULT WINAPI QISearch(void* base, const QITAB *pqit, REFIID riid, void **ppv);
+
#include <poppack.h>
#ifdef __cplusplus
--
1.5.6.5
--=-/aECs8k5M2qLfgFWKITQ--
More information about the wine-patches
mailing list