Module: wine Branch: master Commit: d98225fff9d083792c4c324f714bd4b17a7dedd0 URL: http://source.winehq.org/git/wine.git/?a=commit;h=d98225fff9d083792c4c324f71...
Author: Jacek Caban jacek@codeweavers.com Date: Thu Aug 16 15:42:32 2012 +0200
mshtml: Added IHTMLObjectElement::put_width implementation.
---
dlls/mshtml/htmlobject.c | 29 +++++++++++++++++++++++++++-- dlls/mshtml/pluginhost.c | 17 +++++++++++++++++ dlls/mshtml/pluginhost.h | 1 + 3 files changed, 45 insertions(+), 2 deletions(-)
diff --git a/dlls/mshtml/htmlobject.c b/dlls/mshtml/htmlobject.c index 0755463..6c21814 100644 --- a/dlls/mshtml/htmlobject.c +++ b/dlls/mshtml/htmlobject.c @@ -246,8 +246,33 @@ static HRESULT WINAPI HTMLObjectElement_get_form(IHTMLObjectElement *iface, IHTM static HRESULT WINAPI HTMLObjectElement_put_width(IHTMLObjectElement *iface, VARIANT v) { HTMLObjectElement *This = impl_from_IHTMLObjectElement(iface); - FIXME("(%p)->(%s)\n", This, debugstr_variant(&v)); - return E_NOTIMPL; + nsAString width_str; + PRUnichar buf[12]; + nsresult nsres; + + TRACE("(%p)->(%s)\n", This, debugstr_variant(&v)); + + switch(V_VT(&v)) { + case VT_I4: { + static const WCHAR formatW[] = {'%','d',0}; + sprintfW(buf, formatW, V_I4(&v)); + break; + } + default: + FIXME("unimplemented for arg %s\n", debugstr_variant(&v)); + return E_NOTIMPL; + } + + nsAString_InitDepend(&width_str, buf); + nsres = nsIDOMHTMLObjectElement_SetWidth(This->nsobject, &width_str); + nsAString_Finish(&width_str); + if(NS_FAILED(nsres)) { + FIXME("SetWidth failed: %08x\n", nsres); + return E_FAIL; + } + + notif_container_change(&This->plugin_container, DISPID_UNKNOWN); + return S_OK; }
static HRESULT WINAPI HTMLObjectElement_get_width(IHTMLObjectElement *iface, VARIANT *p) diff --git a/dlls/mshtml/pluginhost.c b/dlls/mshtml/pluginhost.c index 8fb0bfb..ee7773f 100644 --- a/dlls/mshtml/pluginhost.c +++ b/dlls/mshtml/pluginhost.c @@ -352,6 +352,23 @@ static void notif_enabled(PluginHost *plugin_host) } }
+void notif_container_change(HTMLPluginContainer *plugin_container, DISPID dispid) +{ + IOleControl *ole_control; + HRESULT hres; + + if(!plugin_container->plugin_host || !plugin_container->plugin_host->plugin_unk) + return; + + notif_enabled(plugin_container->plugin_host); + + hres = IUnknown_QueryInterface(plugin_container->plugin_host->plugin_unk, &IID_IOleControl, (void**)&ole_control); + if(SUCCEEDED(hres)) { + IOleControl_OnAmbientPropertyChange(ole_control, dispid); + IOleControl_Release(ole_control); + } +} + HRESULT get_plugin_disp(HTMLPluginContainer *plugin_container, IDispatch **ret) { PluginHost *host; diff --git a/dlls/mshtml/pluginhost.h b/dlls/mshtml/pluginhost.h index e3acf61..d776885 100644 --- a/dlls/mshtml/pluginhost.h +++ b/dlls/mshtml/pluginhost.h @@ -70,3 +70,4 @@ HRESULT create_ip_frame(IOleInPlaceFrame**) DECLSPEC_HIDDEN; HRESULT get_plugin_disp(HTMLPluginContainer*,IDispatch**) DECLSPEC_HIDDEN; HRESULT get_plugin_dispid(HTMLPluginContainer*,WCHAR*,DISPID*) DECLSPEC_HIDDEN; HRESULT invoke_plugin_prop(HTMLPluginContainer*,DISPID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*) DECLSPEC_HIDDEN; +void notif_container_change(HTMLPluginContainer*,DISPID);