Commit 1372806e authored by Nikolay Sivov's avatar Nikolay Sivov Committed by Alexandre Julliard

shlwapi: Use public define for QISearch table entry, make it available by name (as on Vista+).

parent 66aa3dc8
...@@ -1634,6 +1634,8 @@ BOOL WINAPI SHLoadMenuPopup(HINSTANCE hInst, LPCWSTR szName) ...@@ -1634,6 +1634,8 @@ BOOL WINAPI SHLoadMenuPopup(HINSTANCE hInst, LPCWSTR szName)
{ {
HMENU hMenu; HMENU hMenu;
TRACE("%p %s\n", hInst, debugstr_w(szName));
if ((hMenu = LoadMenuW(hInst, szName))) if ((hMenu = LoadMenuW(hInst, szName)))
{ {
if (GetSubMenu(hMenu, 0)) if (GetSubMenu(hMenu, 0))
...@@ -1791,6 +1793,8 @@ BOOL WINAPI SHSimulateDrop(IDropTarget *pDrop, IDataObject *pDataObj, ...@@ -1791,6 +1793,8 @@ BOOL WINAPI SHSimulateDrop(IDropTarget *pDrop, IDataObject *pDataObj,
DWORD dwEffect = DROPEFFECT_LINK | DROPEFFECT_MOVE | DROPEFFECT_COPY; DWORD dwEffect = DROPEFFECT_LINK | DROPEFFECT_MOVE | DROPEFFECT_COPY;
POINTL pt = { 0, 0 }; POINTL pt = { 0, 0 };
TRACE("%p %p 0x%08x %p %p\n", pDrop, pDataObj, grfKeyState, lpPt, pdwEffect);
if (!lpPt) if (!lpPt)
lpPt = &pt; lpPt = &pt;
...@@ -1799,7 +1803,7 @@ BOOL WINAPI SHSimulateDrop(IDropTarget *pDrop, IDataObject *pDataObj, ...@@ -1799,7 +1803,7 @@ BOOL WINAPI SHSimulateDrop(IDropTarget *pDrop, IDataObject *pDataObj,
IDropTarget_DragEnter(pDrop, pDataObj, grfKeyState, *lpPt, pdwEffect); IDropTarget_DragEnter(pDrop, pDataObj, grfKeyState, *lpPt, pdwEffect);
if (*pdwEffect) if (*pdwEffect != DROPEFFECT_NONE)
return IDropTarget_Drop(pDrop, pDataObj, grfKeyState, *lpPt, pdwEffect); return IDropTarget_Drop(pDrop, pDataObj, grfKeyState, *lpPt, pdwEffect);
IDropTarget_DragLeave(pDrop); IDropTarget_DragLeave(pDrop);
...@@ -1891,7 +1895,7 @@ HRESULT WINAPI IUnknown_OnFocusOCS(IUnknown *lpUnknown, BOOL fGotFocus) ...@@ -1891,7 +1895,7 @@ HRESULT WINAPI IUnknown_OnFocusOCS(IUnknown *lpUnknown, BOOL fGotFocus)
IOleControlSite* lpCSite = NULL; IOleControlSite* lpCSite = NULL;
HRESULT hRet = E_FAIL; HRESULT hRet = E_FAIL;
TRACE("(%p,%s)\n", lpUnknown, fGotFocus ? "TRUE" : "FALSE"); TRACE("(%p, %d)\n", lpUnknown, fGotFocus);
if (lpUnknown) if (lpUnknown)
{ {
hRet = IUnknown_QueryInterface(lpUnknown, &IID_IOleControlSite, hRet = IUnknown_QueryInterface(lpUnknown, &IID_IOleControlSite,
...@@ -2149,12 +2153,10 @@ VOID WINAPI IUnknown_Set(IUnknown **lppDest, IUnknown *lpUnknown) ...@@ -2149,12 +2153,10 @@ VOID WINAPI IUnknown_Set(IUnknown **lppDest, IUnknown *lpUnknown)
{ {
TRACE("(%p,%p)\n", lppDest, lpUnknown); TRACE("(%p,%p)\n", lppDest, lpUnknown);
if (lppDest) IUnknown_AtomicRelease(lppDest);
IUnknown_AtomicRelease(lppDest); /* Release existing interface */
if (lpUnknown) if (lpUnknown)
{ {
/* Copy */
IUnknown_AddRef(lpUnknown); IUnknown_AddRef(lpUnknown);
*lppDest = lpUnknown; *lppDest = lpUnknown;
} }
...@@ -2344,12 +2346,6 @@ BOOL WINAPI FDSA_DeleteItem(FDSA_info *info, DWORD where) ...@@ -2344,12 +2346,6 @@ BOOL WINAPI FDSA_DeleteItem(FDSA_info *info, DWORD where)
return TRUE; return TRUE;
} }
typedef struct {
REFIID refid;
DWORD indx;
} IFACE_INDEX_TBL;
/************************************************************************* /*************************************************************************
* @ [SHLWAPI.219] * @ [SHLWAPI.219]
* *
...@@ -2360,22 +2356,22 @@ typedef struct { ...@@ -2360,22 +2356,22 @@ typedef struct {
* Failure: E_POINTER or E_NOINTERFACE. * Failure: E_POINTER or E_NOINTERFACE.
*/ */
HRESULT WINAPI QISearch( HRESULT WINAPI QISearch(
LPVOID w, /* [in] Table of interfaces */ void *base, /* [in] Table of interfaces */
IFACE_INDEX_TBL *x, /* [in] Array of REFIIDs and indexes into the table */ const QITAB *table, /* [in] Array of REFIIDs and indexes into the table */
REFIID riid, /* [in] REFIID to get interface for */ REFIID riid, /* [in] REFIID to get interface for */
LPVOID *ppv) /* [out] Destination for interface pointer */ void **ppv) /* [out] Destination for interface pointer */
{ {
HRESULT ret; HRESULT ret;
IUnknown *a_vtbl; 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) { if (ppv) {
xmove = x; xmove = table;
while (xmove->refid) { while (xmove->piid) {
TRACE("trying (indx %d) %s\n", xmove->indx, debugstr_guid(xmove->refid)); TRACE("trying (offset %d) %s\n", xmove->dwOffset, debugstr_guid(xmove->piid));
if (IsEqualIID(riid, xmove->refid)) { if (IsEqualIID(riid, xmove->piid)) {
a_vtbl = (IUnknown*)(xmove->indx + (LPBYTE)w); a_vtbl = (IUnknown*)(xmove->dwOffset + (LPBYTE)base);
TRACE("matched, returning (%p)\n", a_vtbl); TRACE("matched, returning (%p)\n", a_vtbl);
*ppv = a_vtbl; *ppv = a_vtbl;
IUnknown_AddRef(a_vtbl); IUnknown_AddRef(a_vtbl);
...@@ -2385,7 +2381,7 @@ HRESULT WINAPI QISearch( ...@@ -2385,7 +2381,7 @@ HRESULT WINAPI QISearch(
} }
if (IsEqualIID(riid, &IID_IUnknown)) { 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); TRACE("returning first for IUnknown (%p)\n", a_vtbl);
*ppv = a_vtbl; *ppv = a_vtbl;
IUnknown_AddRef(a_vtbl); IUnknown_AddRef(a_vtbl);
......
...@@ -216,7 +216,7 @@ ...@@ -216,7 +216,7 @@
216 stdcall -noname SHAnsiToUnicodeCP(long str ptr long) 216 stdcall -noname SHAnsiToUnicodeCP(long str ptr long)
217 stdcall -noname SHUnicodeToAnsi(wstr ptr ptr) 217 stdcall -noname SHUnicodeToAnsi(wstr ptr ptr)
218 stdcall -noname SHUnicodeToAnsiCP(long wstr ptr long) 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) 220 stdcall -noname SHSetDefaultDialogFont(ptr long)
221 stdcall -noname SHRemoveDefaultDialogFont(ptr) 221 stdcall -noname SHRemoveDefaultDialogFont(ptr)
222 stdcall -noname SHGlobalCounterCreate(long) 222 stdcall -noname SHGlobalCounterCreate(long)
......
...@@ -1085,6 +1085,15 @@ BOOL WINAPI IsOS(DWORD); ...@@ -1085,6 +1085,15 @@ BOOL WINAPI IsOS(DWORD);
#define FDTF_RTLDATE 0x00000200 #define FDTF_RTLDATE 0x00000200
#define FDTF_NOAUTOREADINGORDER 0x00000400 #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> #include <poppack.h>
#ifdef __cplusplus #ifdef __cplusplus
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment