From: Gabriel Ivăncescu <gabrielopcode(a)gmail.com> Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com> --- dlls/mshtml/htmlselect.c | 80 ++++++++++++++++++++++++++++ dlls/mshtml/mshtml_private.h | 1 + dlls/mshtml/mshtml_private_iface.idl | 25 +++++++++ dlls/mshtml/tests/documentmode.js | 5 +- 4 files changed, 107 insertions(+), 4 deletions(-) diff --git a/dlls/mshtml/htmlselect.c b/dlls/mshtml/htmlselect.c index a5b0f7a0297..c2a47cecae7 100644 --- a/dlls/mshtml/htmlselect.c +++ b/dlls/mshtml/htmlselect.c @@ -525,6 +525,7 @@ struct HTMLSelectElement { HTMLElement element; IHTMLSelectElement IHTMLSelectElement_iface; + IWineHTMLSelectPrivate IWineHTMLSelectPrivate_iface; nsIDOMHTMLSelectElement *nsselect; }; @@ -986,6 +987,80 @@ static const IHTMLSelectElementVtbl HTMLSelectElementVtbl = { HTMLSelectElement_tags }; +static inline HTMLSelectElement *impl_from_IWineHTMLSelectPrivateVtbl(IWineHTMLSelectPrivate *iface) +{ + return CONTAINING_RECORD(iface, HTMLSelectElement, IWineHTMLSelectPrivate_iface); +} + +DISPEX_IDISPATCH_IMPL(HTMLSelectElement_private, IWineHTMLSelectPrivate, + impl_from_IWineHTMLSelectPrivateVtbl(iface)->element.node.event_target.dispex) + +static HRESULT WINAPI HTMLSelectElement_private_put_autofocus(IWineHTMLSelectPrivate *iface, VARIANT_BOOL v) +{ + HTMLSelectElement *This = impl_from_IWineHTMLSelectPrivateVtbl(iface); + FIXME("(%p)->(%x)\n", This, v); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLSelectElement_private_get_autofocus(IWineHTMLSelectPrivate *iface, VARIANT_BOOL *ret) +{ + HTMLSelectElement *This = impl_from_IWineHTMLSelectPrivateVtbl(iface); + FIXME("(%p)->(%p)\n", This, ret); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLSelectElement_private_get_validationMessage(IWineHTMLSelectPrivate *iface, BSTR *ret) +{ + HTMLSelectElement *This = impl_from_IWineHTMLSelectPrivateVtbl(iface); + FIXME("(%p)->(%p)\n", This, ret); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLSelectElement_private_get_validity(IWineHTMLSelectPrivate *iface, IDispatch **ret) +{ + HTMLSelectElement *This = impl_from_IWineHTMLSelectPrivateVtbl(iface); + FIXME("(%p)->(%p)\n", This, ret); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLSelectElement_private_get_willValidate(IWineHTMLSelectPrivate *iface, VARIANT_BOOL *ret) +{ + HTMLSelectElement *This = impl_from_IWineHTMLSelectPrivateVtbl(iface); + FIXME("(%p)->(%p)\n", This, ret); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLSelectElement_private_setCustomValidity(IWineHTMLSelectPrivate *iface, VARIANT *message) +{ + HTMLSelectElement *This = impl_from_IWineHTMLSelectPrivateVtbl(iface); + FIXME("(%p)->(%s)\n", This, debugstr_variant(message)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLSelectElement_private_checkValidity(IWineHTMLSelectPrivate *iface, VARIANT_BOOL *ret) +{ + HTMLSelectElement *This = impl_from_IWineHTMLSelectPrivateVtbl(iface); + FIXME("(%p)->(%p)\n", This, ret); + return E_NOTIMPL; +} + +static const IWineHTMLSelectPrivateVtbl WineHTMLSelectPrivateVtbl = { + HTMLSelectElement_private_QueryInterface, + HTMLSelectElement_private_AddRef, + HTMLSelectElement_private_Release, + HTMLSelectElement_private_GetTypeInfoCount, + HTMLSelectElement_private_GetTypeInfo, + HTMLSelectElement_private_GetIDsOfNames, + HTMLSelectElement_private_Invoke, + HTMLSelectElement_private_put_autofocus, + HTMLSelectElement_private_get_autofocus, + HTMLSelectElement_private_get_validationMessage, + HTMLSelectElement_private_get_validity, + HTMLSelectElement_private_get_willValidate, + HTMLSelectElement_private_setCustomValidity, + HTMLSelectElement_private_checkValidity +}; + static inline HTMLSelectElement *impl_from_HTMLDOMNode(HTMLDOMNode *iface) { return CONTAINING_RECORD(iface, HTMLSelectElement, element.node); @@ -1014,6 +1089,8 @@ static void *HTMLSelectElement_query_interface(DispatchEx *dispex, REFIID riid) if(IsEqualGUID(&IID_IHTMLSelectElement, riid)) return &This->IHTMLSelectElement_iface; + if(IsEqualGUID(&IID_IWineHTMLSelectPrivate, riid)) + return &This->IWineHTMLSelectPrivate_iface; return HTMLElement_query_interface(&This->element.node.event_target.dispex, riid); } @@ -1127,6 +1204,8 @@ static void HTMLSelectElement_init_dispex_info(dispex_data_t *info, compat_mode_ {DISPID_UNKNOWN} }; dispex_info_add_interface(info, IHTMLSelectElement_tid, select_hooks); + if(mode >= COMPAT_MODE_IE10) + dispex_info_add_interface(info, IWineHTMLSelectPrivate_tid, NULL); HTMLElement_init_dispex_info(info, mode); } @@ -1166,6 +1245,7 @@ HRESULT HTMLSelectElement_Create(HTMLDocumentNode *doc, nsIDOMElement *nselem, H return E_OUTOFMEMORY; ret->IHTMLSelectElement_iface.lpVtbl = &HTMLSelectElementVtbl; + ret->IWineHTMLSelectPrivate_iface.lpVtbl = &WineHTMLSelectPrivateVtbl; ret->element.node.vtbl = &HTMLSelectElementImplVtbl; HTMLElement_Init(&ret->element, doc, nselem, &HTMLSelectElement_dispex); diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 4c74ec55669..cd8beb3f7ca 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -314,6 +314,7 @@ struct constructor; XIID(IWineHTMLInputPrivate) \ XIID(IWineHTMLFormPrivate) \ XIID(IWineHTMLObjectPrivate) \ + XIID(IWineHTMLSelectPrivate) \ XIID(IWineHTMLWindowPrivate) \ XIID(IWineHTMLWindowCompatPrivate) \ XIID(IWineCSSProperties) \ diff --git a/dlls/mshtml/mshtml_private_iface.idl b/dlls/mshtml/mshtml_private_iface.idl index aa81f0de46c..8ffcadb1cfc 100644 --- a/dlls/mshtml/mshtml_private_iface.idl +++ b/dlls/mshtml/mshtml_private_iface.idl @@ -271,6 +271,31 @@ interface IWineHTMLInputPrivate : IDispatch HRESULT formTarget([retval, out] BSTR *ret); } +[ + odl, + oleautomation, + dual, + hidden, + uuid(d26d41ef-79ef-f921-a8a2-65739537ff07) +] +interface IWineHTMLSelectPrivate : IDispatch +{ + [propput, id(50)] + HRESULT autofocus([in] VARIANT_BOOL v); + [propget, id(50)] + HRESULT autofocus([retval, out] VARIANT_BOOL *ret); + [propget, id(51)] + HRESULT validationMessage([retval, out] BSTR *ret); + [propget, id(52)] + HRESULT validity([retval, out] IDispatch **ret); + [propget, id(53)] + HRESULT willValidate([retval, out] VARIANT_BOOL *ret); + [id(54)] + HRESULT setCustomValidity([in] VARIANT *message); + [id(55)] + HRESULT checkValidity([retval, out] VARIANT_BOOL *ret); +} + [ odl, oleautomation, diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index 388842aa2cc..70fdeb3411c 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -4380,10 +4380,7 @@ sync_test("prototype props", function() { "add", ["autofocus",10], ["checkValidity",10], ["dataFld",9,10], ["dataFormatAs",9,10], ["dataSrc",9,10], "form", "item", "length", "multiple", "name", "namedItem", "options", "remove", ["required",10], "selectedIndex", ["setCustomValidity",10], "size", "tags", "type", "urns", ["validationMessage",10], ["validity",10], "value", ["willValidate",10] - ], [ - ["autofocus",10], ["checkValidity",10], ["dataFld",9,10], ["dataFormatAs",9,10], ["dataSrc",9,10], "namedItem", ["required",10], - ["setCustomValidity",10], "urns", ["validationMessage",10], ["validity",10], ["willValidate",10] - ]); + ], [ ["dataFld",9,10], ["dataFormatAs",9,10], ["dataSrc",9,10], "namedItem", ["required",10], "urns" ]); check(HTMLStyleElement, [ "media", "sheet", ["styleSheet",9,10], "type" ], [ ["onreadystatechange",11] ]); check(HTMLTableCellElement, [ "abbr", "align", "axis", "background", "bgColor", "borderColor", "borderColorDark", "borderColorLight", -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9252