static HRESULT WINAPI WebBrowser_put_TheaterMode(IWebBrowser2 *iface, VARIANT_BOOL bRegister) { WebBrowser *This = WEBBROWSER_THIS(iface); VARIANTARG arg; DISPPARAMS dispparams = {&arg, NULL, 1, 0}; TRACE("(%p)->(%x)\n", This, bRegister); This->theater_mode = bRegister ? VARIANT_TRUE : VARIANT_FALSE; /* In opposition to InternetExplorer, all we should do here is * inform the embedder about the theater mode change. */ V_VT(&arg) = VT_BOOL; V_BOOL(&arg) = bRegister; call_sink(This->doc_host.cps.wbe2, DISPID_ONTHEATERMODE, &dispparams); return S_OK; }
static HRESULT WINAPI WebBrowser_put_FullScreen(IWebBrowser2 *iface, VARIANT_BOOL bFullScreen) { WebBrowser *This = WEBBROWSER_THIS(iface); VARIANTARG arg; DISPPARAMS dispparams = {&arg, NULL, 1, 0}; /* In opposition to InternetExplorer, all we should do here is * inform the embedder about the fullscreen change. */ TRACE("(%p)->(%x)\n", This, bFullScreen); This->full_screen = bFullScreen ? VARIANT_TRUE : VARIANT_FALSE; V_VT(&arg) = VT_BOOL; V_BOOL(&arg) = bFullScreen; call_sink(This->doc_host.cps.wbe2, DISPID_ONFULLSCREEN, &dispparams); return S_OK; }
static HRESULT WINAPI WebBrowser_put_MenuBar(IWebBrowser2 *iface, VARIANT_BOOL Value) { WebBrowser *This = WEBBROWSER_THIS(iface); VARIANTARG arg; DISPPARAMS dispparams = {&arg, NULL, 1, 0}; TRACE("(%p)->(%x)\n", This, Value); This->menu_bar = Value ? VARIANT_TRUE : VARIANT_FALSE; /* In opposition to InternetExplorer, all we should do here is * inform the embedder about the menu bar change. */ V_VT(&arg) = VT_BOOL; V_BOOL(&arg) = Value; call_sink(This->doc_host.cps.wbe2, DISPID_ONMENUBAR, &dispparams); return S_OK; }
static HRESULT WINAPI WebBrowser_put_ToolBar(IWebBrowser2 *iface, int Value) { WebBrowser *This = impl_from_IWebBrowser2(iface); VARIANTARG arg; DISPPARAMS dispparams = {&arg, NULL, 1, 0}; TRACE("(%p)->(%x)\n", This, Value); This->tool_bar = Value ? VARIANT_TRUE : VARIANT_FALSE; /* In opposition to InternetExplorer, all we should do here is * inform the embedder about the tool bar change. */ V_VT(&arg) = VT_BOOL; V_BOOL(&arg) = This->tool_bar; call_sink(This->doc_host.cps.wbe2, DISPID_ONTOOLBAR, &dispparams); return S_OK; }
void on_commandstate_change(DocHost *doc_host, LONG command, VARIANT_BOOL enable) { DISPPARAMS dispparams; VARIANTARG params[2]; TRACE("command=%d enable=%d\n", command, enable); dispparams.cArgs = 2; dispparams.cNamedArgs = 0; dispparams.rgdispidNamedArgs = NULL; dispparams.rgvarg = params; V_VT(params) = VT_BOOL; V_BOOL(params) = enable; V_VT(params+1) = VT_I4; V_I4(params+1) = command; call_sink(doc_host->cps.wbe2, DISPID_COMMANDSTATECHANGE, &dispparams); }
static void on_before_navigate2(DocHost *This, LPCWSTR url, const BYTE *post_data, ULONG post_data_len, LPWSTR headers, VARIANT_BOOL *cancel) { VARIANT var_url, var_flags, var_frame_name, var_post_data, var_post_data2, var_headers; DISPPARAMS dispparams; VARIANTARG params[7]; dispparams.cArgs = 7; dispparams.cNamedArgs = 0; dispparams.rgdispidNamedArgs = NULL; dispparams.rgvarg = params; This->busy = VARIANT_TRUE; V_VT(params) = VT_BOOL|VT_BYREF; V_BOOLREF(params) = cancel; V_VT(params+1) = (VT_BYREF|VT_VARIANT); V_VARIANTREF(params+1) = &var_headers; V_VT(&var_headers) = VT_BSTR; V_BSTR(&var_headers) = headers; V_VT(params+2) = (VT_BYREF|VT_VARIANT); V_VARIANTREF(params+2) = &var_post_data2; V_VT(&var_post_data2) = (VT_BYREF|VT_VARIANT); V_VARIANTREF(&var_post_data2) = &var_post_data; VariantInit(&var_post_data); if(post_data_len) { SAFEARRAYBOUND bound = {post_data_len, 0}; void *data; V_VT(&var_post_data) = VT_UI1|VT_ARRAY; V_ARRAY(&var_post_data) = SafeArrayCreate(VT_UI1, 1, &bound); SafeArrayAccessData(V_ARRAY(&var_post_data), &data); memcpy(data, post_data, post_data_len); SafeArrayUnaccessData(V_ARRAY(&var_post_data)); } V_VT(params+3) = (VT_BYREF|VT_VARIANT); V_VARIANTREF(params+3) = &var_frame_name; V_VT(&var_frame_name) = VT_BSTR; V_BSTR(&var_frame_name) = NULL; V_VT(params+4) = (VT_BYREF|VT_VARIANT); V_VARIANTREF(params+4) = &var_flags; V_VT(&var_flags) = VT_I4; V_I4(&var_flags) = 0; V_VT(params+5) = (VT_BYREF|VT_VARIANT); V_VARIANTREF(params+5) = &var_url; V_VT(&var_url) = VT_BSTR; V_BSTR(&var_url) = SysAllocString(url); V_VT(params+6) = (VT_DISPATCH); V_DISPATCH(params+6) = This->disp; call_sink(This->cps.wbe2, DISPID_BEFORENAVIGATE2, &dispparams); SysFreeString(V_BSTR(&var_url)); if(post_data_len) SafeArrayDestroy(V_ARRAY(&var_post_data)); }
static HRESULT WINAPI DocObjectService_FireBeforeNavigate2( IDocObjectService* iface, IDispatch *pDispatch, LPCWSTR lpszUrl, DWORD dwFlags, LPCWSTR lpszFrameName, BYTE *pPostData, DWORD cbPostData, LPCWSTR lpszHeaders, BOOL fPlayNavSound, BOOL *pfCancel) { ShellBrowser *This = impl_from_IDocObjectService(iface); VARIANT var_url, var_flags, var_frame_name, var_post_data, var_post_data2, var_headers; VARIANTARG params[7]; DISPPARAMS dp = {params, NULL, 7, 0}; VARIANT_BOOL cancel = VARIANT_FALSE; SAFEARRAY *post_data; TRACE("%p %p %s %x %s %p %d %s %d %p\n", This, pDispatch, debugstr_w(lpszUrl), dwFlags, debugstr_w(lpszFrameName), pPostData, cbPostData, debugstr_w(lpszHeaders), fPlayNavSound, pfCancel); if(cbPostData) { post_data = SafeArrayCreateVector(VT_UI1, 0, cbPostData); if(!post_data) return E_OUTOFMEMORY; memcpy(post_data->pvData, pPostData, cbPostData); }else { post_data = NULL; } V_VT(params) = VT_BOOL|VT_BYREF; V_BOOLREF(params) = &cancel; V_VT(params+1) = (VT_BYREF|VT_VARIANT); V_VARIANTREF(params+1) = &var_headers; V_VT(&var_headers) = VT_BSTR; V_BSTR(&var_headers) = lpszHeaders ? SysAllocString(lpszHeaders) : NULL; V_VT(params+2) = (VT_BYREF|VT_VARIANT); V_VARIANTREF(params+2) = &var_post_data2; V_VT(&var_post_data2) = (VT_BYREF|VT_VARIANT); V_VARIANTREF(&var_post_data2) = &var_post_data; if(post_data) { V_VT(&var_post_data) = VT_UI1|VT_ARRAY; V_ARRAY(&var_post_data) = post_data; }else { V_VT(&var_post_data) = VT_EMPTY; } V_VT(params+3) = (VT_BYREF|VT_VARIANT); V_VARIANTREF(params+3) = &var_frame_name; V_VT(&var_frame_name) = VT_BSTR; V_BSTR(&var_frame_name) = lpszFrameName ? SysAllocString(lpszFrameName) : NULL; V_VT(params+4) = (VT_BYREF|VT_VARIANT); V_VARIANTREF(params+4) = &var_flags; V_VT(&var_flags) = VT_I4; V_I4(&var_flags) = 0; V_VT(params+5) = (VT_BYREF|VT_VARIANT); V_VARIANTREF(params+5) = &var_url; V_VT(&var_url) = VT_BSTR; V_BSTR(&var_url) = SysAllocString(lpszUrl); V_VT(params+6) = (VT_DISPATCH); V_DISPATCH(params+6) = (IDispatch*)This->doc_host->wb; /* Keep reference to This. It may be released in event handler. */ IShellBrowser_AddRef(&This->IShellBrowser_iface); TRACE(">>>\n"); call_sink(This->doc_host->cps.wbe2, DISPID_BEFORENAVIGATE2, &dp); TRACE("<<<\n"); IShellBrowser_Release(&This->IShellBrowser_iface); SysFreeString(V_BSTR(&var_url)); SysFreeString(V_BSTR(&var_headers)); SysFreeString(V_BSTR(&var_frame_name)); SafeArrayDestroy(post_data); *pfCancel = !!cancel; return S_OK; }
void notify_download_state(DocHost *dochost, BOOL is_downloading) { DISPPARAMS dwl_dp = {NULL}; TRACE("(%x)\n", is_downloading); call_sink(dochost->cps.wbe2, is_downloading ? DISPID_DOWNLOADBEGIN : DISPID_DOWNLOADCOMPLETE, &dwl_dp); }