Better handling of custom templates and hooks.
Bug fixes.
This commit is contained in:
parent
697a621a7c
commit
ebcc72c925
File diff suppressed because it is too large
Load Diff
|
@ -17,50 +17,29 @@
|
||||||
#include "debugtools.h"
|
#include "debugtools.h"
|
||||||
#include "cdlg.h"
|
#include "cdlg.h"
|
||||||
|
|
||||||
|
#define INITGUID
|
||||||
|
#include "initguid.h"
|
||||||
|
#include "wine/obj_serviceprovider.h"
|
||||||
|
|
||||||
DEFAULT_DEBUG_CHANNEL(commdlg);
|
DEFAULT_DEBUG_CHANNEL(commdlg);
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
|
||||||
|
ICOM_VTABLE(IShellBrowser) * lpVtbl;
|
||||||
|
ICOM_VTABLE(ICommDlgBrowser) * lpVtblCommDlgBrowser;
|
||||||
|
ICOM_VTABLE(IServiceProvider)* lpVtblServiceProvider;
|
||||||
|
DWORD ref; /* Reference counter */
|
||||||
|
HWND hwndOwner; /* Owner dialog of the interface */
|
||||||
|
|
||||||
|
} IShellBrowserImpl;
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
* Structure
|
* vtable
|
||||||
*/
|
*/
|
||||||
static ICOM_VTABLE(IShellBrowser) IShellBrowserImpl_Vtbl =
|
static ICOM_VTABLE(IShellBrowser) IShellBrowserImpl_Vtbl;
|
||||||
{
|
static ICOM_VTABLE(ICommDlgBrowser) IShellBrowserImpl_ICommDlgBrowser_Vtbl;
|
||||||
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
|
static ICOM_VTABLE(IServiceProvider) IShellBrowserImpl_IServiceProvider_Vtbl;
|
||||||
/* IUnknown */
|
|
||||||
IShellBrowserImpl_QueryInterface,
|
|
||||||
IShellBrowserImpl_AddRef,
|
|
||||||
IShellBrowserImpl_Release,
|
|
||||||
/* IOleWindow */
|
|
||||||
IShellBrowserImpl_GetWindow,
|
|
||||||
IShellBrowserImpl_ContextSensitiveHelp,
|
|
||||||
/* IShellBrowser */
|
|
||||||
IShellBrowserImpl_InsertMenusSB,
|
|
||||||
IShellBrowserImpl_SetMenuSB,
|
|
||||||
IShellBrowserImpl_RemoveMenusSB,
|
|
||||||
IShellBrowserImpl_SetStatusTextSB,
|
|
||||||
IShellBrowserImpl_EnableModelessSB,
|
|
||||||
IShellBrowserImpl_TranslateAcceleratorSB,
|
|
||||||
IShellBrowserImpl_BrowseObject,
|
|
||||||
IShellBrowserImpl_GetViewStateStream,
|
|
||||||
IShellBrowserImpl_GetControlWindow,
|
|
||||||
IShellBrowserImpl_SendControlMsg,
|
|
||||||
IShellBrowserImpl_QueryActiveShellView,
|
|
||||||
IShellBrowserImpl_OnViewWindowActive,
|
|
||||||
IShellBrowserImpl_SetToolbarItems
|
|
||||||
};
|
|
||||||
|
|
||||||
static ICOM_VTABLE(ICommDlgBrowser) IShellBrowserImpl_ICommDlgBrowser_Vtbl =
|
|
||||||
{
|
|
||||||
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
|
|
||||||
/* IUnknown */
|
|
||||||
IShellBrowserImpl_ICommDlgBrowser_QueryInterface,
|
|
||||||
IShellBrowserImpl_ICommDlgBrowser_AddRef,
|
|
||||||
IShellBrowserImpl_ICommDlgBrowser_Release,
|
|
||||||
/* ICommDlgBrowser */
|
|
||||||
IShellBrowserImpl_ICommDlgBrowser_OnDefaultCommand,
|
|
||||||
IShellBrowserImpl_ICommDlgBrowser_OnStateChange,
|
|
||||||
IShellBrowserImpl_ICommDlgBrowser_IncludeObject
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
* Local Prototypes
|
* Local Prototypes
|
||||||
|
@ -91,6 +70,47 @@ extern BOOL FILEDLG95_OnOpen(HWND hwnd);
|
||||||
extern HRESULT SendCustomDlgNotificationMessage(HWND hwndParentDlg, UINT uCode);
|
extern HRESULT SendCustomDlgNotificationMessage(HWND hwndParentDlg, UINT uCode);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Helper functions
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* copied from shell32 to avoid linking to it */
|
||||||
|
static HRESULT COMDLG32_StrRetToStrNW (LPVOID dest, DWORD len, LPSTRRET src, LPITEMIDLIST pidl)
|
||||||
|
{
|
||||||
|
TRACE("dest=0x%p len=0x%lx strret=0x%p pidl=%p stub\n",dest,len,src,pidl);
|
||||||
|
|
||||||
|
switch (src->uType)
|
||||||
|
{
|
||||||
|
case STRRET_WSTR:
|
||||||
|
lstrcpynW((LPWSTR)dest, src->u.pOleStr, len);
|
||||||
|
COMDLG32_SHFree(src->u.pOleStr);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case STRRET_CSTRA:
|
||||||
|
lstrcpynAtoW((LPWSTR)dest, src->u.cStr, len);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case STRRET_OFFSETA:
|
||||||
|
if (pidl)
|
||||||
|
{
|
||||||
|
lstrcpynAtoW((LPWSTR)dest, ((LPCSTR)&pidl->mkid)+src->u.uOffset, len);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
FIXME("unknown type!\n");
|
||||||
|
if (len)
|
||||||
|
{ *(LPSTR)dest = '\0';
|
||||||
|
}
|
||||||
|
return(FALSE);
|
||||||
|
}
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* IShellBrowser
|
||||||
|
*/
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
* IShellBrowserImpl_Construct
|
* IShellBrowserImpl_Construct
|
||||||
*/
|
*/
|
||||||
|
@ -107,8 +127,8 @@ IShellBrowser * IShellBrowserImpl_Construct(HWND hwndOwner)
|
||||||
|
|
||||||
/* Initialisation of the vTables */
|
/* Initialisation of the vTables */
|
||||||
sb->lpVtbl = &IShellBrowserImpl_Vtbl;
|
sb->lpVtbl = &IShellBrowserImpl_Vtbl;
|
||||||
sb->lpVtbl2 = &IShellBrowserImpl_ICommDlgBrowser_Vtbl;
|
sb->lpVtblCommDlgBrowser = &IShellBrowserImpl_ICommDlgBrowser_Vtbl;
|
||||||
|
sb->lpVtblServiceProvider = &IShellBrowserImpl_IServiceProvider_Vtbl;
|
||||||
COMDLG32_SHGetSpecialFolderLocation(hwndOwner, CSIDL_DESKTOP,
|
COMDLG32_SHGetSpecialFolderLocation(hwndOwner, CSIDL_DESKTOP,
|
||||||
&fodInfos->ShellInfos.pidlAbsCurrent);
|
&fodInfos->ShellInfos.pidlAbsCurrent);
|
||||||
|
|
||||||
|
@ -117,17 +137,6 @@ IShellBrowser * IShellBrowserImpl_Construct(HWND hwndOwner)
|
||||||
return (IShellBrowser *) sb;
|
return (IShellBrowser *) sb;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* The INTERFACE of the IShellBrowser object
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* IUnknown
|
|
||||||
*/
|
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
* IShellBrowserImpl_QueryInterface
|
* IShellBrowserImpl_QueryInterface
|
||||||
*/
|
*/
|
||||||
|
@ -137,7 +146,7 @@ HRESULT WINAPI IShellBrowserImpl_QueryInterface(IShellBrowser *iface,
|
||||||
{
|
{
|
||||||
ICOM_THIS(IShellBrowserImpl, iface);
|
ICOM_THIS(IShellBrowserImpl, iface);
|
||||||
|
|
||||||
TRACE("(%p)\n", This);
|
TRACE("(%p)\n\t%s\n", This, debugstr_guid(riid));
|
||||||
|
|
||||||
*ppvObj = NULL;
|
*ppvObj = NULL;
|
||||||
|
|
||||||
|
@ -153,13 +162,18 @@ HRESULT WINAPI IShellBrowserImpl_QueryInterface(IShellBrowser *iface,
|
||||||
}
|
}
|
||||||
|
|
||||||
else if(IsEqualIID(riid, &IID_ICommDlgBrowser)) /*ICommDlgBrowser*/
|
else if(IsEqualIID(riid, &IID_ICommDlgBrowser)) /*ICommDlgBrowser*/
|
||||||
{ *ppvObj = (ICommDlgBrowser*) &(This->lpVtbl2);
|
{ *ppvObj = (ICommDlgBrowser*) &(This->lpVtblCommDlgBrowser);
|
||||||
|
}
|
||||||
|
|
||||||
|
else if(IsEqualIID(riid, &IID_IServiceProvider)) /* IServiceProvider */
|
||||||
|
{ *ppvObj = (ICommDlgBrowser*) &(This->lpVtblServiceProvider);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(*ppvObj)
|
if(*ppvObj)
|
||||||
{ IUnknown_AddRef( (IShellBrowser*) *ppvObj);
|
{ IUnknown_AddRef( (IShellBrowser*) *ppvObj);
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
FIXME("Unknown interface requested\n");
|
||||||
return E_NOINTERFACE;
|
return E_NOINTERFACE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -296,7 +310,11 @@ HRESULT WINAPI IShellBrowserImpl_BrowseObject(IShellBrowser *iface,
|
||||||
psfTmp = GetShellFolderFromPidl(pidlTmp);
|
psfTmp = GetShellFolderFromPidl(pidlTmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!psfTmp) return E_FAIL;
|
if(!psfTmp)
|
||||||
|
{
|
||||||
|
ERR("could not browse to folder\n");
|
||||||
|
return E_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
/* If the pidl to browse to is equal to the actual pidl ...
|
/* If the pidl to browse to is equal to the actual pidl ...
|
||||||
do nothing and pretend you did it*/
|
do nothing and pretend you did it*/
|
||||||
|
@ -304,6 +322,7 @@ HRESULT WINAPI IShellBrowserImpl_BrowseObject(IShellBrowser *iface,
|
||||||
{
|
{
|
||||||
IShellFolder_Release(psfTmp);
|
IShellFolder_Release(psfTmp);
|
||||||
COMDLG32_SHFree(pidlTmp);
|
COMDLG32_SHFree(pidlTmp);
|
||||||
|
TRACE("keep current folder\n");
|
||||||
return NOERROR;
|
return NOERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -315,8 +334,9 @@ HRESULT WINAPI IShellBrowserImpl_BrowseObject(IShellBrowser *iface,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create the associated view */
|
/* Create the associated view */
|
||||||
|
TRACE("create view object\n");
|
||||||
if(FAILED(hRes = IShellFolder_CreateViewObject(psfTmp, fodInfos->ShellInfos.hwndOwner,
|
if(FAILED(hRes = IShellFolder_CreateViewObject(psfTmp, fodInfos->ShellInfos.hwndOwner,
|
||||||
&IID_IShellView, (LPVOID *)&psvTmp))) return hRes;
|
&IID_IShellView, (LPVOID *)&psvTmp))) goto error;
|
||||||
|
|
||||||
/* Check if listview has focus */
|
/* Check if listview has focus */
|
||||||
bViewHasFocus = IsChild(fodInfos->ShellInfos.hwndView,GetFocus());
|
bViewHasFocus = IsChild(fodInfos->ShellInfos.hwndView,GetFocus());
|
||||||
|
@ -348,7 +368,7 @@ HRESULT WINAPI IShellBrowserImpl_BrowseObject(IShellBrowser *iface,
|
||||||
TRACE("create view window\n");
|
TRACE("create view window\n");
|
||||||
if(FAILED(hRes = IShellView_CreateViewWindow(psvTmp, NULL,
|
if(FAILED(hRes = IShellView_CreateViewWindow(psvTmp, NULL,
|
||||||
&fodInfos->ShellInfos.folderSettings, fodInfos->Shell.FOIShellBrowser,
|
&fodInfos->ShellInfos.folderSettings, fodInfos->Shell.FOIShellBrowser,
|
||||||
&fodInfos->ShellInfos.rectView, &hwndView))) return hRes;
|
&fodInfos->ShellInfos.rectView, &hwndView))) goto error;
|
||||||
|
|
||||||
fodInfos->ShellInfos.hwndView = hwndView;
|
fodInfos->ShellInfos.hwndView = hwndView;
|
||||||
|
|
||||||
|
@ -364,6 +384,9 @@ HRESULT WINAPI IShellBrowserImpl_BrowseObject(IShellBrowser *iface,
|
||||||
SetFocus(fodInfos->ShellInfos.hwndView);
|
SetFocus(fodInfos->ShellInfos.hwndView);
|
||||||
|
|
||||||
return hRes;
|
return hRes;
|
||||||
|
error:
|
||||||
|
ERR("Failed with error 0x%08lx\n", hRes);
|
||||||
|
return hRes;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
|
@ -406,7 +429,7 @@ HRESULT WINAPI IShellBrowserImpl_GetViewStateStream(IShellBrowser *iface,
|
||||||
{
|
{
|
||||||
ICOM_THIS(IShellBrowserImpl, iface);
|
ICOM_THIS(IShellBrowserImpl, iface);
|
||||||
|
|
||||||
TRACE("(%p)\n", This);
|
FIXME("(%p 0x%08lx %p)\n", This, grfMode, ppStrm);
|
||||||
|
|
||||||
/* Feature not implemented */
|
/* Feature not implemented */
|
||||||
return E_NOTIMPL;
|
return E_NOTIMPL;
|
||||||
|
@ -566,6 +589,34 @@ HRESULT WINAPI IShellBrowserImpl_TranslateAcceleratorSB(IShellBrowser *iface,
|
||||||
return E_NOTIMPL;
|
return E_NOTIMPL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ICOM_VTABLE(IShellBrowser) IShellBrowserImpl_Vtbl =
|
||||||
|
{
|
||||||
|
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
|
||||||
|
/* IUnknown */
|
||||||
|
IShellBrowserImpl_QueryInterface,
|
||||||
|
IShellBrowserImpl_AddRef,
|
||||||
|
IShellBrowserImpl_Release,
|
||||||
|
/* IOleWindow */
|
||||||
|
IShellBrowserImpl_GetWindow,
|
||||||
|
IShellBrowserImpl_ContextSensitiveHelp,
|
||||||
|
/* IShellBrowser */
|
||||||
|
IShellBrowserImpl_InsertMenusSB,
|
||||||
|
IShellBrowserImpl_SetMenuSB,
|
||||||
|
IShellBrowserImpl_RemoveMenusSB,
|
||||||
|
IShellBrowserImpl_SetStatusTextSB,
|
||||||
|
IShellBrowserImpl_EnableModelessSB,
|
||||||
|
IShellBrowserImpl_TranslateAcceleratorSB,
|
||||||
|
IShellBrowserImpl_BrowseObject,
|
||||||
|
IShellBrowserImpl_GetViewStateStream,
|
||||||
|
IShellBrowserImpl_GetControlWindow,
|
||||||
|
IShellBrowserImpl_SendControlMsg,
|
||||||
|
IShellBrowserImpl_QueryActiveShellView,
|
||||||
|
IShellBrowserImpl_OnViewWindowActive,
|
||||||
|
IShellBrowserImpl_SetToolbarItems
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ICommDlgBrowser
|
* ICommDlgBrowser
|
||||||
*/
|
*/
|
||||||
|
@ -573,9 +624,10 @@ HRESULT WINAPI IShellBrowserImpl_TranslateAcceleratorSB(IShellBrowser *iface,
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
* IShellBrowserImpl_ICommDlgBrowser_QueryInterface
|
* IShellBrowserImpl_ICommDlgBrowser_QueryInterface
|
||||||
*/
|
*/
|
||||||
HRESULT WINAPI IShellBrowserImpl_ICommDlgBrowser_QueryInterface(ICommDlgBrowser *iface,
|
HRESULT WINAPI IShellBrowserImpl_ICommDlgBrowser_QueryInterface(
|
||||||
REFIID riid,
|
ICommDlgBrowser *iface,
|
||||||
LPVOID *ppvObj)
|
REFIID riid,
|
||||||
|
LPVOID *ppvObj)
|
||||||
{
|
{
|
||||||
_ICOM_THIS_FromICommDlgBrowser(IShellBrowser,iface);
|
_ICOM_THIS_FromICommDlgBrowser(IShellBrowser,iface);
|
||||||
|
|
||||||
|
@ -689,38 +741,6 @@ HRESULT WINAPI IShellBrowserImpl_ICommDlgBrowser_OnStateChange(ICommDlgBrowser *
|
||||||
return NOERROR;
|
return NOERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* copied from shell32 to avoid linking to it */
|
|
||||||
static HRESULT COMDLG32_StrRetToStrNW (LPVOID dest, DWORD len, LPSTRRET src, LPITEMIDLIST pidl)
|
|
||||||
{
|
|
||||||
TRACE("dest=0x%p len=0x%lx strret=0x%p pidl=%p stub\n",dest,len,src,pidl);
|
|
||||||
|
|
||||||
switch (src->uType)
|
|
||||||
{
|
|
||||||
case STRRET_WSTR:
|
|
||||||
lstrcpynW((LPWSTR)dest, src->u.pOleStr, len);
|
|
||||||
COMDLG32_SHFree(src->u.pOleStr);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case STRRET_CSTRA:
|
|
||||||
lstrcpynAtoW((LPWSTR)dest, src->u.cStr, len);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case STRRET_OFFSETA:
|
|
||||||
if (pidl)
|
|
||||||
{
|
|
||||||
lstrcpynAtoW((LPWSTR)dest, ((LPCSTR)&pidl->mkid)+src->u.uOffset, len);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
FIXME("unknown type!\n");
|
|
||||||
if (len)
|
|
||||||
{ *(LPSTR)dest = '\0';
|
|
||||||
}
|
|
||||||
return(FALSE);
|
|
||||||
}
|
|
||||||
return S_OK;
|
|
||||||
}
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
* IShellBrowserImpl_ICommDlgBrowser_IncludeObject
|
* IShellBrowserImpl_ICommDlgBrowser_IncludeObject
|
||||||
*/
|
*/
|
||||||
|
@ -793,3 +813,104 @@ HRESULT IShellBrowserImpl_ICommDlgBrowser_OnSelChange(ICommDlgBrowser *iface, IS
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ICOM_VTABLE(ICommDlgBrowser) IShellBrowserImpl_ICommDlgBrowser_Vtbl =
|
||||||
|
{
|
||||||
|
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
|
||||||
|
/* IUnknown */
|
||||||
|
IShellBrowserImpl_ICommDlgBrowser_QueryInterface,
|
||||||
|
IShellBrowserImpl_ICommDlgBrowser_AddRef,
|
||||||
|
IShellBrowserImpl_ICommDlgBrowser_Release,
|
||||||
|
/* ICommDlgBrowser */
|
||||||
|
IShellBrowserImpl_ICommDlgBrowser_OnDefaultCommand,
|
||||||
|
IShellBrowserImpl_ICommDlgBrowser_OnStateChange,
|
||||||
|
IShellBrowserImpl_ICommDlgBrowser_IncludeObject
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* IServiceProvider
|
||||||
|
*/
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
* IShellBrowserImpl_IServiceProvider_QueryInterface
|
||||||
|
*/
|
||||||
|
HRESULT WINAPI IShellBrowserImpl_IServiceProvider_QueryInterface(
|
||||||
|
IServiceProvider *iface,
|
||||||
|
REFIID riid,
|
||||||
|
LPVOID *ppvObj)
|
||||||
|
{
|
||||||
|
_ICOM_THIS_FromIServiceProvider(IShellBrowser,iface);
|
||||||
|
|
||||||
|
FIXME("(%p)\n", This);
|
||||||
|
|
||||||
|
return IShellBrowserImpl_QueryInterface(This,riid,ppvObj);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* IShellBrowserImpl_IServiceProvider_AddRef
|
||||||
|
*/
|
||||||
|
ULONG WINAPI IShellBrowserImpl_IServiceProvider_AddRef(IServiceProvider * iface)
|
||||||
|
{
|
||||||
|
_ICOM_THIS_FromIServiceProvider(IShellBrowser,iface);
|
||||||
|
|
||||||
|
FIXME("(%p)\n", This);
|
||||||
|
|
||||||
|
return IShellBrowserImpl_AddRef(This);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* IShellBrowserImpl_IServiceProvider_Release
|
||||||
|
*/
|
||||||
|
ULONG WINAPI IShellBrowserImpl_IServiceProvider_Release(IServiceProvider * iface)
|
||||||
|
{
|
||||||
|
_ICOM_THIS_FromIServiceProvider(IShellBrowser,iface);
|
||||||
|
|
||||||
|
FIXME("(%p)\n", This);
|
||||||
|
|
||||||
|
return IShellBrowserImpl_Release(This);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* IShellBrowserImpl_IServiceProvider_Release
|
||||||
|
*
|
||||||
|
* NOTES
|
||||||
|
* the w2k shellview asks for
|
||||||
|
* guidService = SID_STopLevelBrowser
|
||||||
|
* riid = IShellBrowser
|
||||||
|
*
|
||||||
|
* FIXME
|
||||||
|
* this is a hack!
|
||||||
|
*/
|
||||||
|
|
||||||
|
HRESULT WINAPI IShellBrowserImpl_IServiceProvider_QueryService(
|
||||||
|
IServiceProvider * iface,
|
||||||
|
REFGUID guidService,
|
||||||
|
REFIID riid,
|
||||||
|
void** ppv)
|
||||||
|
{
|
||||||
|
_ICOM_THIS_FromIServiceProvider(IShellBrowser,iface);
|
||||||
|
|
||||||
|
FIXME("(%p)\n\t%s\n\t%s\n", This,debugstr_guid(guidService), debugstr_guid(riid) );
|
||||||
|
|
||||||
|
*ppv = NULL;
|
||||||
|
if(guidService && IsEqualIID(guidService, &SID_STopLevelBrowser))
|
||||||
|
{
|
||||||
|
return IShellBrowserImpl_QueryInterface(This,riid,ppv);
|
||||||
|
}
|
||||||
|
FIXME("(%p) unknown interface requested\n", This);
|
||||||
|
return E_NOINTERFACE;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static ICOM_VTABLE(IServiceProvider) IShellBrowserImpl_IServiceProvider_Vtbl =
|
||||||
|
{
|
||||||
|
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
|
||||||
|
/* IUnknown */
|
||||||
|
IShellBrowserImpl_IServiceProvider_QueryInterface,
|
||||||
|
IShellBrowserImpl_IServiceProvider_AddRef,
|
||||||
|
IShellBrowserImpl_IServiceProvider_Release,
|
||||||
|
/* IServiceProvider */
|
||||||
|
IShellBrowserImpl_IServiceProvider_QueryService
|
||||||
|
};
|
||||||
|
|
|
@ -15,7 +15,11 @@
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* Defines and global variables
|
* Defines and global variables
|
||||||
*/
|
*/
|
||||||
#define _ICOM_THIS_FromICommDlgBrowser(Class,name) Class* This = (Class*) (((char*)name)-sizeof(void *))
|
#define _ICommDlgBrowser_Offset ((int)(&(((IShellBrowserImpl*)0)->lpVtblCommDlgBrowser)))
|
||||||
|
#define _ICOM_THIS_FromICommDlgBrowser(class, name) class* This = (class*)(((char*)name)-_ICommDlgBrowser_Offset);
|
||||||
|
|
||||||
|
#define _IServiceProvider_Offset ((int)(&(((IShellBrowserImpl*)0)->lpVtblServiceProvider)))
|
||||||
|
#define _ICOM_THIS_FromIServiceProvider(class, name) class* This = (class*)(((char*)name)-_IServiceProvider_Offset);
|
||||||
|
|
||||||
/* dialog internal property */
|
/* dialog internal property */
|
||||||
|
|
||||||
|
@ -28,16 +32,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
|
|
||||||
ICOM_VTABLE(IShellBrowser)* lpVtbl; /* IShellBrowser VTable */
|
|
||||||
ICOM_VTABLE(ICommDlgBrowser)* lpVtbl2; /* ICommDlgBrowser VTable */
|
|
||||||
DWORD ref; /* Reference counter */
|
|
||||||
HWND hwndOwner; /* Owner dialog of the interface */
|
|
||||||
|
|
||||||
} IShellBrowserImpl;
|
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -67,6 +61,13 @@ typedef struct
|
||||||
DWORD dwDlgProp;
|
DWORD dwDlgProp;
|
||||||
} DlgInfos;
|
} DlgInfos;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
UINT fileokstring;
|
||||||
|
UINT lbselchstring;
|
||||||
|
UINT helpmsgstring;
|
||||||
|
UINT sharevistring;
|
||||||
|
} HookMsg;
|
||||||
|
|
||||||
} FileOpenDlgInfos;
|
} FileOpenDlgInfos;
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
@ -124,100 +125,6 @@ typedef struct
|
||||||
/* Constructor */
|
/* Constructor */
|
||||||
IShellBrowser * IShellBrowserImpl_Construct(HWND hwndOwner);
|
IShellBrowser * IShellBrowserImpl_Construct(HWND hwndOwner);
|
||||||
|
|
||||||
/* IUnknown */
|
|
||||||
HRESULT WINAPI IShellBrowserImpl_QueryInterface(IShellBrowser *iface,
|
|
||||||
REFIID riid,
|
|
||||||
LPVOID *ppvObj);
|
|
||||||
|
|
||||||
ULONG WINAPI IShellBrowserImpl_AddRef(IShellBrowser * iface);
|
|
||||||
|
|
||||||
ULONG WINAPI IShellBrowserImpl_Release(IShellBrowser * iface);
|
|
||||||
|
|
||||||
/* IOleWindow */
|
|
||||||
HRESULT WINAPI IShellBrowserImpl_GetWindow(IShellBrowser * iface,
|
|
||||||
HWND * phwnd);
|
|
||||||
|
|
||||||
HRESULT WINAPI IShellBrowserImpl_ContextSensitiveHelp(IShellBrowser * iface,
|
|
||||||
BOOL fEnterMode);
|
|
||||||
|
|
||||||
/* IShellBrowser */
|
|
||||||
|
|
||||||
HRESULT WINAPI IShellBrowserImpl_BrowseObject(IShellBrowser *iface,
|
|
||||||
LPCITEMIDLIST pidl,
|
|
||||||
UINT wFlags);
|
|
||||||
|
|
||||||
HRESULT WINAPI IShellBrowserImpl_EnableModelessSB(IShellBrowser *iface,
|
|
||||||
BOOL fEnable);
|
|
||||||
|
|
||||||
HRESULT WINAPI IShellBrowserImpl_GetControlWindow(IShellBrowser *iface,
|
|
||||||
UINT id,
|
|
||||||
HWND *lphwnd);
|
|
||||||
|
|
||||||
HRESULT WINAPI IShellBrowserImpl_GetViewStateStream(IShellBrowser *iface,
|
|
||||||
DWORD grfMode,
|
|
||||||
LPSTREAM *ppStrm);
|
|
||||||
|
|
||||||
HRESULT WINAPI IShellBrowserImpl_InsertMenusSB(IShellBrowser *iface,
|
|
||||||
HMENU hmenuShared,
|
|
||||||
LPOLEMENUGROUPWIDTHS lpMenuWidths);
|
|
||||||
|
|
||||||
HRESULT WINAPI IShellBrowserImpl_OnViewWindowActive(IShellBrowser *iface,
|
|
||||||
IShellView *ppshv);
|
|
||||||
|
|
||||||
|
|
||||||
HRESULT WINAPI IShellBrowserImpl_QueryActiveShellView(IShellBrowser *iface,
|
|
||||||
IShellView **ppshv);
|
|
||||||
|
|
||||||
HRESULT WINAPI IShellBrowserImpl_RemoveMenusSB(IShellBrowser *iface,
|
|
||||||
HMENU hmenuShared);
|
|
||||||
|
|
||||||
HRESULT WINAPI IShellBrowserImpl_SendControlMsg(IShellBrowser *iface,
|
|
||||||
UINT id,
|
|
||||||
UINT uMsg,
|
|
||||||
WPARAM wParam,
|
|
||||||
LPARAM lParam,
|
|
||||||
LRESULT *pret);
|
|
||||||
|
|
||||||
HRESULT WINAPI IShellBrowserImpl_SetMenuSB(IShellBrowser *iface,
|
|
||||||
HMENU hmenuShared,
|
|
||||||
HOLEMENU holemenuReserved,
|
|
||||||
HWND hwndActiveObject);
|
|
||||||
|
|
||||||
HRESULT WINAPI IShellBrowserImpl_SetStatusTextSB(IShellBrowser *iface,
|
|
||||||
LPCOLESTR lpszStatusText);
|
|
||||||
|
|
||||||
|
|
||||||
HRESULT WINAPI IShellBrowserImpl_SetToolbarItems(IShellBrowser *iface,
|
|
||||||
LPTBBUTTON lpButtons,
|
|
||||||
UINT nButtons,
|
|
||||||
UINT uFlags);
|
|
||||||
|
|
||||||
HRESULT WINAPI IShellBrowserImpl_TranslateAcceleratorSB(IShellBrowser *iface,
|
|
||||||
LPMSG lpmsg,
|
|
||||||
WORD wID);
|
|
||||||
|
|
||||||
|
|
||||||
/* ICommDlgBrowser */
|
|
||||||
|
|
||||||
HRESULT WINAPI IShellBrowserImpl_ICommDlgBrowser_QueryInterface(ICommDlgBrowser *iface,
|
|
||||||
REFIID riid,
|
|
||||||
LPVOID *ppvObj);
|
|
||||||
|
|
||||||
ULONG WINAPI IShellBrowserImpl_ICommDlgBrowser_AddRef(ICommDlgBrowser * iface);
|
|
||||||
|
|
||||||
ULONG WINAPI IShellBrowserImpl_ICommDlgBrowser_Release(ICommDlgBrowser * iface);
|
|
||||||
|
|
||||||
HRESULT WINAPI IShellBrowserImpl_ICommDlgBrowser_OnDefaultCommand(ICommDlgBrowser *iface,
|
|
||||||
IShellView *ppshv);
|
|
||||||
|
|
||||||
HRESULT WINAPI IShellBrowserImpl_ICommDlgBrowser_OnStateChange(ICommDlgBrowser *iface,
|
|
||||||
IShellView *ppshv,
|
|
||||||
ULONG uChange);
|
|
||||||
|
|
||||||
HRESULT WINAPI IShellBrowserImpl_ICommDlgBrowser_IncludeObject(ICommDlgBrowser *iface,
|
|
||||||
IShellView * ppshv,
|
|
||||||
LPCITEMIDLIST pidl);
|
|
||||||
|
|
||||||
|
|
||||||
LPITEMIDLIST GetPidlFromDataObject ( IDataObject *doSelected, UINT nPidlIndex);
|
LPITEMIDLIST GetPidlFromDataObject ( IDataObject *doSelected, UINT nPidlIndex);
|
||||||
UINT GetNumSelected(IDataObject *doSelected);
|
UINT GetNumSelected(IDataObject *doSelected);
|
||||||
|
|
|
@ -36,6 +36,8 @@ extern "C" {
|
||||||
#define OFN_LONGNAMES 0x00200000
|
#define OFN_LONGNAMES 0x00200000
|
||||||
#define OFN_ENABLEINCLUDENOTIFY 0x00400000
|
#define OFN_ENABLEINCLUDENOTIFY 0x00400000
|
||||||
#define OFN_ENABLESIZING 0x00800000
|
#define OFN_ENABLESIZING 0x00800000
|
||||||
|
#define OFN_DONTADDTORECENT 0x02000000
|
||||||
|
#define OFN_FORCESHOWHIDDEN 0x10000000
|
||||||
|
|
||||||
/* WINE internal flags */
|
/* WINE internal flags */
|
||||||
#define OFN_UNICODE 0x40000000 /*to differ between 32W/A hook*/
|
#define OFN_UNICODE 0x40000000 /*to differ between 32W/A hook*/
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
/*
|
||||||
|
* Defines the COM interfaces and APIs related to IServiceProvider
|
||||||
|
*
|
||||||
|
* Depends on 'obj_base.h'.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __WINE_WINE_OBJ_SERVICEPROVIDER_H
|
||||||
|
#define __WINE_WINE_OBJ_SERVICEPROVIDER_H
|
||||||
|
|
||||||
|
#include "wine/obj_base.h"
|
||||||
|
#include "winbase.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif /* defined(__cplusplus) */
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
* Predeclare the interfaces
|
||||||
|
*/
|
||||||
|
DEFINE_GUID(IID_IServiceProvider, 0x6d5140c1, 0x7436, 0x11ce, 0x80, 0x34, 0x00, 0xaa, 0x00, 0x60, 0x09, 0xfa);
|
||||||
|
typedef struct IServiceProvider IServiceProvider, *LPSERVICEPROVIDER;
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
* IServiceProvider interface
|
||||||
|
*/
|
||||||
|
#define ICOM_INTERFACE IServiceProvider
|
||||||
|
#define IServiceProvider_METHODS \
|
||||||
|
ICOM_METHOD3( HRESULT, QueryService, REFGUID, guidService, REFIID, riid, void**, ppv)
|
||||||
|
#define IServiceProvider_IMETHODS \
|
||||||
|
IUnknown_IMETHODS \
|
||||||
|
IServiceProvider_METHODS
|
||||||
|
ICOM_DEFINE(IServiceProvider,IUnknown)
|
||||||
|
#undef ICOM_INTERFACE
|
||||||
|
|
||||||
|
/*** IUnknown methods ***/
|
||||||
|
#define IServiceProvider_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
|
||||||
|
#define IServiceProvider_AddRef(p) ICOM_CALL (AddRef,p)
|
||||||
|
#define IServiceProvider_Release(p) ICOM_CALL (Release,p)
|
||||||
|
/*** IServiceProvider methods ***/
|
||||||
|
#define IServiceProvider_QueryService(p,a,b,c) ICOM_CALL3(QueryService,p,a,b,c)
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif /* defined(__cplusplus) */
|
||||||
|
|
||||||
|
#endif /* __WINE_WINE_OBJ_SERVICEPROVIDER_H */
|
|
@ -15,6 +15,8 @@ extern "C" {
|
||||||
|
|
||||||
#define SID_SShellBrowser IID_IShellBrowser
|
#define SID_SShellBrowser IID_IShellBrowser
|
||||||
|
|
||||||
|
DEFINE_GUID(SID_STopLevelBrowser, 0x4C96BE40L, 0x915C, 0x11CF, 0x99, 0xD3, 0x00, 0xAA, 0x00, 0x4A, 0xE8, 0x37);
|
||||||
|
|
||||||
/* targets for GetWindow/SendControlMsg */
|
/* targets for GetWindow/SendControlMsg */
|
||||||
#define FCW_STATUS 0x0001
|
#define FCW_STATUS 0x0001
|
||||||
#define FCW_TOOLBAR 0x0002
|
#define FCW_TOOLBAR 0x0002
|
||||||
|
|
Loading…
Reference in New Issue