This->document = NULL;
}
+void release_dochost_client(DocHost *This)
+{
+ if(This->hwnd) {
+ DestroyWindow(This->hwnd);
+ This->hwnd = NULL;
+ }
+
+ if(This->hostui) {
+ IDocHostUIHandler_Release(This->hostui);
+ This->hostui = NULL;
+ }
+
+ if(This->client_disp) {
+ IDispatch_Release(This->client_disp);
+ This->client_disp = NULL;
+ }
+
+ if(This->frame) {
+ IOleInPlaceFrame_Release(This->frame);
+ This->frame = NULL;
+ }
+}
+
#define OLECMD_THIS(iface) DEFINE_THIS(DocHost, OleCommandTarget, iface)
static HRESULT WINAPI ClOleCommandTarget_QueryInterface(IOleCommandTarget *iface,
const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText)
{
DocHost *This = OLECMD_THIS(iface);
+ ULONG i= 0;
FIXME("(%p)->(%s %u %p %p)\n", This, debugstr_guid(pguidCmdGroup), cCmds, prgCmds,
pCmdText);
+ while (prgCmds && (cCmds > i)) {
+ FIXME("command_%u: %u, 0x%x\n", i, prgCmds[i].cmdID, prgCmds[i].cmdf);
+ i++;
+ }
return E_NOTIMPL;
}
void DocHost_Release(DocHost *This)
{
- if(This->client_disp)
- IDispatch_Release(This->client_disp);
- if(This->frame)
- IOleInPlaceFrame_Release(This->frame);
-
+ release_dochost_client(This);
DocHost_ClientSite_Release(This);
ConnectionPointContainer_Destroy(&This->cps);
- SysFreeString(This->url);
+ CoTaskMemFree(This->url);
}
return (InternetShortcut*)((char*)iface - FIELD_OFFSET(InternetShortcut, persistFile));
}
-static BOOL StartLinkProcessor(LPCOLESTR szLink)
+static BOOL run_winemenubuilder( const WCHAR *args )
{
- static const WCHAR szFormat[] = {
- 'w','i','n','e','m','e','n','u','b','u','i','l','d','e','r','.','e','x','e',
- ' ','-','w',' ','-','u',' ','"','%','s','"',0 };
+ static const WCHAR menubuilder[] = {'\\','w','i','n','e','m','e','n','u','b','u','i','l','d','e','r','.','e','x','e',0};
LONG len;
LPWSTR buffer;
STARTUPINFOW si;
PROCESS_INFORMATION pi;
BOOL ret;
+ WCHAR app[MAX_PATH];
- len = sizeof(szFormat) + lstrlenW( szLink ) * sizeof(WCHAR);
+ GetSystemDirectoryW( app, MAX_PATH - sizeof(menubuilder)/sizeof(WCHAR) );
+ strcatW( app, menubuilder );
+
+ len = (strlenW( app ) + strlenW( args ) + 1) * sizeof(WCHAR);
buffer = heap_alloc( len );
if( !buffer )
return FALSE;
- wsprintfW( buffer, szFormat, szLink );
+ strcpyW( buffer, app );
+ strcatW( buffer, args );
TRACE("starting %s\n",debugstr_w(buffer));
memset(&si, 0, sizeof(si));
si.cb = sizeof(si);
- ret = CreateProcessW( NULL, buffer, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi );
+ ret = CreateProcessW( app, buffer, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi );
- HeapFree( GetProcessHeap(), 0, buffer );
+ heap_free( buffer );
if (ret)
{
return ret;
}
+static BOOL StartLinkProcessor( LPCOLESTR szLink )
+{
+ static const WCHAR szFormat[] = { ' ','-','w',' ','-','u',' ','"','%','s','"',0 };
+ LONG len;
+ LPWSTR buffer;
+ BOOL ret;
+
+ len = sizeof(szFormat) + lstrlenW( szLink ) * sizeof(WCHAR);
+ buffer = heap_alloc( len );
+ if( !buffer )
+ return FALSE;
+
+ wsprintfW( buffer, szFormat, szLink );
+ ret = run_winemenubuilder( buffer );
+ heap_free( buffer );
+ return ret;
+}
+
/* interface functions */
static HRESULT Unknown_QueryInterface(InternetShortcut *This, REFIID riid, PVOID *ppvObject)
return S_OK;
}
+static void release_client_site(WebBrowser *This)
+{
+ release_dochost_client(&This->doc_host);
+
+ if(This->shell_embedding_hwnd) {
+ DestroyWindow(This->shell_embedding_hwnd);
+ This->shell_embedding_hwnd = NULL;
+ }
+
+ if(This->inplace) {
+ IOleInPlaceSite_Release(This->inplace);
+ This->inplace = NULL;
+ }
+
+ if(This->container) {
+ IOleContainer_Release(This->container);
+ This->container = NULL;
+ }
+
+ if(This->uiwindow) {
+ IOleInPlaceUIWindow_Release(This->uiwindow);
+ This->uiwindow = NULL;
+ }
+
+ if(This->client) {
+ IOleClientSite_Release(This->client);
+ This->client = NULL;
+ }
+}
+
/**********************************************************************
* Implement the IOleObject interface for the WebBrowser control
*/
static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, LPOLECLIENTSITE pClientSite)
{
WebBrowser *This = OLEOBJ_THIS(iface);
+ IDocHostUIHandler *hostui;
IOleContainer *container;
+ IDispatch *disp;
HRESULT hres;
TRACE("(%p)->(%p)\n", This, pClientSite);
if(This->client == pClientSite)
return S_OK;
- if(This->doc_host.hwnd) {
- DestroyWindow(This->doc_host.hwnd);
- This->doc_host.hwnd = NULL;
- }
- if(This->shell_embedding_hwnd) {
- DestroyWindow(This->shell_embedding_hwnd);
- This->shell_embedding_hwnd = NULL;
- }
-
- if(This->inplace) {
- IOleInPlaceSite_Release(This->inplace);
- This->inplace = NULL;
- }
-
- if(This->doc_host.hostui) {
- IDocHostUIHandler_Release(This->doc_host.hostui);
- This->doc_host.hostui = NULL;
- }
-
- if(This->client)
- IOleClientSite_Release(This->client);
-
- This->client = pClientSite;
+ release_client_site(This);
if(!pClientSite) {
if(This->doc_host.document)
}
IOleClientSite_AddRef(pClientSite);
+ This->client = pClientSite;
- IOleClientSite_QueryInterface(This->client, &IID_IDispatch,
- (void**)&This->doc_host.client_disp);
+ hres = IOleClientSite_QueryInterface(This->client, &IID_IDispatch,
+ (void**)&disp);
+ if(SUCCEEDED(hres))
+ This->doc_host.client_disp = disp;
- IOleClientSite_QueryInterface(This->client, &IID_IDocHostUIHandler,
- (void**)&This->doc_host.hostui);
+ hres = IOleClientSite_QueryInterface(This->client, &IID_IDocHostUIHandler,
+ (void**)&hostui);
+ if(SUCCEEDED(hres))
+ This->doc_host.hostui = hostui;
hres = IOleClientSite_GetContainer(This->client, &container);
if(SUCCEEDED(hres)) {
void WebBrowser_OleObject_Destroy(WebBrowser *This)
{
- if(This->client)
- IOleObject_SetClientSite(OLEOBJ(This), NULL);
- if(This->container)
- IOleContainer_Release(This->container);
- if(This->uiwindow)
- IOleInPlaceUIWindow_Release(This->uiwindow);
+ release_client_site(This);
}
void DocHost_Init(DocHost*,IDispatch*);
void DocHost_ClientSite_Init(DocHost*);
void DocHost_Frame_Init(DocHost*);
+void release_dochost_client(DocHost*);
void DocHost_Release(DocHost*);
void DocHost_ClientSite_Release(DocHost*);
HRESULT get_typeinfo(ITypeInfo**);
DWORD register_iexplore(BOOL);
+const char *debugstr_variant(const VARIANT*);
+
/* memory allocation functions */
static inline void *heap_alloc(size_t len)
HKCR,"CLSID\%CLSID_SearchAssistantOC%\InProcServer32","ThreadingModel",,"Apartment"
HKCR,"CLSID\%CLSID_SearchAssistantOC%\ProgID",,,"SearchAssistantOC.SearchAssistantOC.1"
HKCR,"CLSID\%CLSID_SearchAssistantOC%\VersionIndependentProgID",,,"SearchAssistantOC.SearchAssistantOC"
-HKCR,"SearchAssistantOC.SearchAssistantOC",,,""
+HKCR,"SearchAssistantOC.SearchAssistantOC",,,"SearchAssistantOC"
HKCR,"SearchAssistantOC.SearchAssistantOC\CLSID",,,"%CLSID_SearchAssistantOC%"
HKCR,"SearchAssistantOC.SearchAssistantOC\CurVer",,,"SearchAssistantOC.SearchAssistantOC.1"
-HKCR,"SearchAssistantOC.SearchAssistantOC.1",,,""
+HKCR,"SearchAssistantOC.SearchAssistantOC.1",,,"SearchAssistantOC"
HKCR,"SearchAssistantOC.SearchAssistantOC.1\CLSID",,,"%CLSID_SearchAssistantOC%"
HKCR,"CLSID\%CLSID_ShellNameSpace%",,,"Shell Name Space"
HKCR,"Shell.UIHelper",,,"Microsoft Shell UI Helper"
HKCR,"Shell.UIHelper\CLSID",,,"%CLSID_ShellUIHelper%"
HKCR,"Shell.UIHelper\CurVer",,,"Shell.UIHelper.2"
-HKCR,"Shell.UIHelper.1",,,""
+HKCR,"Shell.UIHelper.1",,,"Microsoft Shell UI Helper"
HKCR,"Shell.UIHelper.1\CLSID",,,"%CLSID_ShellUIHelper%"
HKCR,"CLSID\%CLSID_Internet%\DefaultIcon",,,"shdoclc.dll,-190"
HKCR,"Shell.Explorer",,,"Microsoft Web Browser"
HKCR,"Shell.Explorer\CLSID",,,"%CLSID_WebBrowser%"
HKCR,"Shell.Explorer\CurVer",,,"Shell.Explorer.2"
-HKCR,"Shell.Explorer.2",,,""
+HKCR,"Shell.Explorer.2",,,"Microsoft Web Browser"
HKCR,"Shell.Explorer.2\CLSID",,,"%CLSID_WebBrowser%"
HKCR,"CLSID\%CLSID_ShellWindows%",,,"ShellWindows"
HKCR,"CLSID\%CLSID_WebBrowser_V1%\InProcServer32","ThreadingModel",,"Apartment"
HKCR,"CLSID\%CLSID_WebBrowser_V1%\ProgID",,,"Shell.Explorer.1"
HKCR,"CLSID\%CLSID_WebBrowser_V1%\VersionIndependentProgID",,,"Shell.Explorer"
-HKCR,"Shell.Explorer.1",,,""
+HKCR,"Shell.Explorer.1",,,"Microsoft Web Browser"
HKCR,"Shell.Explorer.1\CLSID",,,"%CLSID_WebBrowser_V1%"
HKCR,"CLSID\%CLSID_InternetShortcut%",,,"Internet Shortcut"
HKCR,"CLSID\%CLSID_InternetShortcut%\InProcServer32",,,"%MODULE%"
HKCR,"CLSID\%CLSID_InternetShortcut%\InProcServer32","ThreadingModel",,"Apartment"
HKCR,"CLSID\%CLSID_InternetShortcut%\ProgID",,,"InternetShortcut"
-HKCR,"CLSID\%CLSID_InternetShortcut%\shellex\MayChangeDefaultMenu",,,
+HKCR,"CLSID\%CLSID_InternetShortcut%\shellex\MayChangeDefaultMenu",,16
HKCR,"InternetShortcut",,,"Internet Shortcut"
HKCR,"InternetShortcut","EditFlags",2,"2"
HKCR,"InternetShortcut","IsShortcut",,
return hres;
}
+const char *debugstr_variant(const VARIANT *v)
+{
+ if(!v)
+ return "(null)";
+
+ switch(V_VT(v)) {
+ case VT_EMPTY:
+ return "{VT_EMPTY}";
+ case VT_NULL:
+ return "{VT_NULL}";
+ case VT_I4:
+ return wine_dbg_sprintf("{VT_I4: %d}", V_I4(v));
+ case VT_R8:
+ return wine_dbg_sprintf("{VT_R8: %lf}", V_R8(v));
+ case VT_BSTR:
+ return wine_dbg_sprintf("{VT_BSTR: %s}", debugstr_w(V_BSTR(v)));
+ case VT_DISPATCH:
+ return wine_dbg_sprintf("{VT_DISPATCH: %p}", V_DISPATCH(v));
+ case VT_BOOL:
+ return wine_dbg_sprintf("{VT_BOOL: %x}", V_BOOL(v));
+ default:
+ return wine_dbg_sprintf("{vt %d}", V_VT(v));
+ }
+}
+
/*************************************************************************
* SHDOCVW DllMain
*/
{
WebBrowser *This = WEBBROWSER_THIS(iface);
- TRACE("(%p)->(%s %p %p %p %p)\n", This, debugstr_w(szUrl), Flags, TargetFrameName,
- PostData, Headers);
+ TRACE("(%p)->(%s %s %s %s %s)\n", This, debugstr_w(szUrl), debugstr_variant(Flags),
+ debugstr_variant(TargetFrameName), debugstr_variant(PostData),
+ debugstr_variant(Headers));
return navigate_url(&This->doc_host, szUrl, Flags, TargetFrameName, PostData, Headers);
}
static HRESULT WINAPI WebBrowser_Refresh2(IWebBrowser2 *iface, VARIANT *Level)
{
WebBrowser *This = WEBBROWSER_THIS(iface);
- FIXME("(%p)->(%p)\n", This, Level);
+ FIXME("(%p)->(%s)\n", This, debugstr_variant(Level));
return E_NOTIMPL;
}
static HRESULT WINAPI WebBrowser_PutProperty(IWebBrowser2 *iface, BSTR szProperty, VARIANT vtValue)
{
WebBrowser *This = WEBBROWSER_THIS(iface);
- FIXME("(%p)->(%s)\n", This, debugstr_w(szProperty));
+ FIXME("(%p)->(%s %s)\n", This, debugstr_w(szProperty), debugstr_variant(&vtValue));
return E_NOTIMPL;
}
static HRESULT WINAPI WebBrowser_GetProperty(IWebBrowser2 *iface, BSTR szProperty, VARIANT *pvtValue)
{
WebBrowser *This = WEBBROWSER_THIS(iface);
- FIXME("(%p)->(%s %p)\n", This, debugstr_w(szProperty), pvtValue);
+ FIXME("(%p)->(%s %s)\n", This, debugstr_w(szProperty), debugstr_variant(pvtValue));
return E_NOTIMPL;
}
static HRESULT WINAPI WebBrowser_get_Name(IWebBrowser2 *iface, BSTR *Name)
{
+ static const WCHAR sName[] = {'M','i','c','r','o','s','o','f','t',' ','W','e','b',
+ ' ','B','r','o','w','s','e','r',' ','C','o','n','t','r','o','l',0};
WebBrowser *This = WEBBROWSER_THIS(iface);
- FIXME("(%p)->(%p)\n", This, Name);
- return E_NOTIMPL;
+
+ TRACE("(%p)->(%p)\n", This, Name);
+
+ *Name = SysAllocString(sName);
+
+ return S_OK;
}
static HRESULT WINAPI WebBrowser_get_HWND(IWebBrowser2 *iface, LONG *pHWND)
WebBrowser *This = WEBBROWSER_THIS(iface);
LPCWSTR url;
- TRACE("(%p)->(%p %p %p %p %p)\n", This, URL, Flags, TargetFrameName, PostData, Headers);
+ TRACE("(%p)->(%s %s %s %s %s)\n", This, debugstr_variant(URL), debugstr_variant(Flags),
+ debugstr_variant(TargetFrameName), debugstr_variant(PostData), debugstr_variant(Headers));
if(!This->client)
return E_FAIL;
OLECMDEXECOPT cmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
{
WebBrowser *This = WEBBROWSER_THIS(iface);
- FIXME("(%p)->(%d %d %p %p)\n", This, cmdID, cmdexecopt, pvaIn, pvaOut);
+ FIXME("(%p)->(%d %d %s %p)\n", This, cmdID, cmdexecopt, debugstr_variant(pvaIn), pvaOut);
return E_NOTIMPL;
}
VARIANT *pvarShow, VARIANT *pvarSize)
{
WebBrowser *This = WEBBROWSER_THIS(iface);
- FIXME("(%p)->(%p %p %p)\n", This, pvaClsid, pvarShow, pvarSize);
+ FIXME("(%p)->(%s %s %s)\n", This, debugstr_variant(pvaClsid), debugstr_variant(pvarShow),
+ debugstr_variant(pvarSize));
return E_NOTIMPL;
}