Module: wine Branch: master Commit: 3274d9593a64509d05d9bb389a3fc34108915b32 URL: https://gitlab.winehq.org/wine/wine/-/commit/3274d9593a64509d05d9bb389a3fc34...
Author: Jacek Caban jacek@codeweavers.com Date: Mon Jul 15 21:30:23 2024 +0200
mshtml: Factor out dispex_get_id.
And use it in HTMLElement implementation.
---
dlls/mshtml/dispex.c | 43 ++++++++++++++++++++++++------------------- dlls/mshtml/htmlelem.c | 28 +++++++++++----------------- dlls/mshtml/mshtml_private.h | 1 + 3 files changed, 36 insertions(+), 36 deletions(-)
diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c index 5ebd1fa52e8..97f50a8810b 100644 --- a/dlls/mshtml/dispex.c +++ b/dlls/mshtml/dispex.c @@ -1877,43 +1877,48 @@ static HRESULT WINAPI DispatchEx_Invoke(IWineJSDispatchHost *iface, DISPID dispI pVarResult, pExcepInfo, NULL); }
-static HRESULT WINAPI DispatchEx_GetDispID(IWineJSDispatchHost *iface, BSTR bstrName, DWORD grfdex, DISPID *pid) +HRESULT dispex_get_id(DispatchEx *dispex, const WCHAR *name, DWORD flags, DISPID *pid) { - DispatchEx *This = impl_from_IWineJSDispatchHost(iface); dynamic_prop_t *dprop = NULL; HRESULT hres;
- TRACE("%s (%p)->(%s %lx %p)\n", This->info->desc->name, This, debugstr_w(bstrName), grfdex, pid); - - if(grfdex & ~(fdexNameCaseSensitive|fdexNameCaseInsensitive|fdexNameEnsure|fdexNameImplicit|FDEX_VERSION_MASK)) - FIXME("Unsupported grfdex %lx\n", grfdex); - - if(!ensure_real_info(This)) - return E_OUTOFMEMORY; - if(This->jsdisp) - return IWineJSDispatch_GetDispID(This->jsdisp, bstrName, grfdex, pid); - - hres = get_builtin_id(This, bstrName, grfdex, pid); + hres = get_builtin_id(dispex, name, flags, pid); if(hres != DISP_E_UNKNOWNNAME) return hres;
- hres = get_dynamic_prop(This, bstrName, grfdex & ~fdexNameEnsure, &dprop); + hres = get_dynamic_prop(dispex, name, flags & ~fdexNameEnsure, &dprop); if(FAILED(hres)) { - if(This->info->desc->vtbl->find_dispid) { - hres = This->info->desc->vtbl->find_dispid(This, bstrName, grfdex, pid); + if(dispex->info->desc->vtbl->find_dispid) { + hres = dispex->info->desc->vtbl->find_dispid(dispex, name, flags, pid); if(SUCCEEDED(hres)) return hres; } - if(grfdex & fdexNameEnsure) - hres = alloc_dynamic_prop(This, bstrName, dprop, &dprop); + if(flags & fdexNameEnsure) + hres = alloc_dynamic_prop(dispex, name, dprop, &dprop); if(FAILED(hres)) return hres; }
- *pid = DISPID_DYNPROP_0 + (dprop - This->dynamic_data->props); + *pid = DISPID_DYNPROP_0 + (dprop - dispex->dynamic_data->props); return S_OK; }
+static HRESULT WINAPI DispatchEx_GetDispID(IWineJSDispatchHost *iface, BSTR bstrName, DWORD grfdex, DISPID *pid) +{ + DispatchEx *This = impl_from_IWineJSDispatchHost(iface); + + TRACE("%s (%p)->(%s %lx %p)\n", This->info->desc->name, This, debugstr_w(bstrName), grfdex, pid); + + if(grfdex & ~(fdexNameCaseSensitive|fdexNameCaseInsensitive|fdexNameEnsure|fdexNameImplicit|FDEX_VERSION_MASK)) + FIXME("Unsupported grfdex %lx\n", grfdex); + + if(!ensure_real_info(This)) + return E_OUTOFMEMORY; + if(This->jsdisp) + return IWineJSDispatch_GetDispID(This->jsdisp, bstrName, grfdex, pid); + return dispex_get_id(This, bstrName, grfdex, pid); +} + HRESULT dispex_prop_get(DispatchEx *dispex, DISPID id, LCID lcid, VARIANT *r, EXCEPINFO *ei, IServiceProvider *caller) { switch(get_dispid_type(id)) { diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index 0b08b0e4995..3e45ab5cb0e 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -1149,14 +1149,11 @@ static dispex_static_data_t HTMLRectCollection_dispex = { DISPEX_IDISPATCH_IMPL(HTMLElement, IHTMLElement, impl_from_IHTMLElement(iface)->node.event_target.dispex)
-static inline WCHAR *translate_attr_name(WCHAR *attr_name, compat_mode_t compat_mode) +static inline const WCHAR *translate_attr_name(const WCHAR *attr_name, compat_mode_t compat_mode) { - static WCHAR classNameW[] = L"className"; - WCHAR *ret = attr_name; - if(compat_mode >= COMPAT_MODE_IE8 && !wcsicmp(attr_name, L"class")) - ret = classNameW; - return ret; + return L"className"; + return attr_name; }
static HRESULT set_elem_attr_value_by_dispid(HTMLElement *elem, DISPID dispid, VARIANT *v) @@ -1186,7 +1183,7 @@ static HRESULT WINAPI HTMLElement_setAttribute(IHTMLElement *iface, BSTR strAttr TRACE("(%p)->(%s %s %08lx)\n", This, debugstr_w(strAttributeName), debugstr_variant(&AttributeValue), lFlags);
if(compat_mode < COMPAT_MODE_IE9 || !This->dom_element) { - hres = IWineJSDispatchHost_GetDispID(&This->node.event_target.dispex.IWineJSDispatchHost_iface, translate_attr_name(strAttributeName, compat_mode), + hres = dispex_get_id(&This->node.event_target.dispex, translate_attr_name(strAttributeName, compat_mode), (lFlags&ATTRFLAG_CASESENSITIVE ? fdexNameCaseSensitive : fdexNameCaseInsensitive) | fdexNameEnsure, &dispid); if(FAILED(hres)) return hres; @@ -1282,8 +1279,8 @@ static HRESULT WINAPI HTMLElement_getAttribute(IHTMLElement *iface, BSTR strAttr FIXME("Unsupported flags %lx\n", lFlags);
if(compat_mode < COMPAT_MODE_IE9 || !This->dom_element) { - hres = IWineJSDispatchHost_GetDispID(&This->node.event_target.dispex.IWineJSDispatchHost_iface, translate_attr_name(strAttributeName, compat_mode), - lFlags&ATTRFLAG_CASESENSITIVE ? fdexNameCaseSensitive : fdexNameCaseInsensitive, &dispid); + hres = dispex_get_id(&This->node.event_target.dispex, translate_attr_name(strAttributeName, compat_mode), + lFlags & ATTRFLAG_CASESENSITIVE ? fdexNameCaseSensitive : fdexNameCaseInsensitive, &dispid); if(FAILED(hres)) { V_VT(AttributeValue) = VT_NULL; return (hres == DISP_E_UNKNOWNNAME) ? S_OK : hres; @@ -1330,8 +1327,8 @@ static HRESULT WINAPI HTMLElement_removeAttribute(IHTMLElement *iface, BSTR strA TRACE("(%p)->(%s %lx %p)\n", This, debugstr_w(strAttributeName), lFlags, pfSuccess);
if(compat_mode < COMPAT_MODE_IE9 || !This->dom_element) { - hres = IWineJSDispatchHost_GetDispID(&This->node.event_target.dispex.IWineJSDispatchHost_iface, translate_attr_name(strAttributeName, compat_mode), - lFlags&ATTRFLAG_CASESENSITIVE ? fdexNameCaseSensitive : fdexNameCaseInsensitive, &id); + hres = dispex_get_id(&This->node.event_target.dispex, translate_attr_name(strAttributeName, compat_mode), + lFlags & ATTRFLAG_CASESENSITIVE ? fdexNameCaseSensitive : fdexNameCaseInsensitive, &id); if(hres == DISP_E_UNKNOWNNAME) { *pfSuccess = VARIANT_FALSE; return S_OK; @@ -4423,8 +4420,7 @@ static HRESULT WINAPI HTMLElement4_setAttributeNode(IHTMLElement4 *iface, IHTMLD return E_INVALIDARG; }
- hres = IWineJSDispatchHost_GetDispID(&This->node.event_target.dispex.IWineJSDispatchHost_iface, - attr->name, fdexNameCaseInsensitive|fdexNameEnsure, &dispid); + hres = dispex_get_id(&This->node.event_target.dispex, attr->name, fdexNameCaseInsensitive | fdexNameEnsure, &dispid); if(FAILED(hres)) return hres;
@@ -6393,7 +6389,7 @@ HRESULT HTMLElement_populate_props(DispatchEx *dispex) continue; }
- hres = IWineJSDispatchHost_GetDispID(&dispex->IWineJSDispatchHost_iface, name, fdexNameCaseInsensitive, &id); + hres = dispex_get_id(dispex, name, fdexNameCaseInsensitive, &id); if(hres != DISP_E_UNKNOWNNAME) { nsIDOMAttr_Release(attr); SysFreeString(name); @@ -7586,9 +7582,7 @@ static inline HRESULT get_attr_dispid_by_name(HTMLAttributeCollection *This, con } }
- hres = IWineJSDispatchHost_GetDispID(&This->elem->node.event_target.dispex.IWineJSDispatchHost_iface, - (BSTR)name, fdexNameCaseInsensitive, id); - return hres; + return dispex_get_id(&This->elem->node.event_target.dispex, name, fdexNameCaseInsensitive, id); }
static inline HRESULT get_domattr(HTMLAttributeCollection *This, DISPID id, LONG *list_pos, HTMLDOMAttribute **attr) diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 0f986afbb57..38cf4e06282 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -512,6 +512,7 @@ HRESULT dispex_prop_get(DispatchEx *dispex, DISPID id, LCID lcid, VARIANT *r, EX IServiceProvider *caller); HRESULT dispex_prop_put(DispatchEx *dispex, DISPID id, LCID lcid, VARIANT *v, EXCEPINFO *ei, IServiceProvider *caller); +HRESULT dispex_get_id(DispatchEx *dispex, const WCHAR *name, DWORD flags, DISPID *pid); HRESULT dispex_next_id(DispatchEx *dispex, DISPID id, DISPID *ret);
typedef enum {