From: Gabriel Ivăncescu <gabrielopcode(a)gmail.com> Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com> --- dlls/mshtml/htmltextarea.c | 80 ++++++++++++++++++++++++++++ dlls/mshtml/mshtml_private.h | 1 + dlls/mshtml/mshtml_private_iface.idl | 25 +++++++++ dlls/mshtml/tests/documentmode.js | 4 +- 4 files changed, 108 insertions(+), 2 deletions(-) diff --git a/dlls/mshtml/htmltextarea.c b/dlls/mshtml/htmltextarea.c index 3eb714b7b08..58d8ff3627f 100644 --- a/dlls/mshtml/htmltextarea.c +++ b/dlls/mshtml/htmltextarea.c @@ -37,6 +37,7 @@ struct HTMLTextAreaElement { HTMLElement element; IHTMLTextAreaElement IHTMLTextAreaElement_iface; + IWineHTMLTextAreaPrivate IWineHTMLTextAreaPrivate_iface; nsIDOMHTMLTextAreaElement *nstextarea; }; @@ -335,6 +336,80 @@ static const IHTMLTextAreaElementVtbl HTMLTextAreaElementVtbl = { HTMLTextAreaElement_createTextRange }; +static inline HTMLTextAreaElement *impl_from_IWineHTMLTextAreaPrivateVtbl(IWineHTMLTextAreaPrivate *iface) +{ + return CONTAINING_RECORD(iface, HTMLTextAreaElement, IWineHTMLTextAreaPrivate_iface); +} + +DISPEX_IDISPATCH_IMPL(HTMLTextAreaElement_private, IWineHTMLTextAreaPrivate, + impl_from_IWineHTMLTextAreaPrivateVtbl(iface)->element.node.event_target.dispex) + +static HRESULT WINAPI HTMLTextAreaElement_private_put_autofocus(IWineHTMLTextAreaPrivate *iface, VARIANT_BOOL v) +{ + HTMLTextAreaElement *This = impl_from_IWineHTMLTextAreaPrivateVtbl(iface); + FIXME("(%p)->(%x)\n", This, v); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLTextAreaElement_private_get_autofocus(IWineHTMLTextAreaPrivate *iface, VARIANT_BOOL *ret) +{ + HTMLTextAreaElement *This = impl_from_IWineHTMLTextAreaPrivateVtbl(iface); + FIXME("(%p)->(%p)\n", This, ret); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLTextAreaElement_private_get_validationMessage(IWineHTMLTextAreaPrivate *iface, BSTR *ret) +{ + HTMLTextAreaElement *This = impl_from_IWineHTMLTextAreaPrivateVtbl(iface); + FIXME("(%p)->(%p)\n", This, ret); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLTextAreaElement_private_get_validity(IWineHTMLTextAreaPrivate *iface, IDispatch **ret) +{ + HTMLTextAreaElement *This = impl_from_IWineHTMLTextAreaPrivateVtbl(iface); + FIXME("(%p)->(%p)\n", This, ret); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLTextAreaElement_private_get_willValidate(IWineHTMLTextAreaPrivate *iface, VARIANT_BOOL *ret) +{ + HTMLTextAreaElement *This = impl_from_IWineHTMLTextAreaPrivateVtbl(iface); + FIXME("(%p)->(%p)\n", This, ret); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLTextAreaElement_private_setCustomValidity(IWineHTMLTextAreaPrivate *iface, VARIANT *message) +{ + HTMLTextAreaElement *This = impl_from_IWineHTMLTextAreaPrivateVtbl(iface); + FIXME("(%p)->(%s)\n", This, debugstr_variant(message)); + return E_NOTIMPL; +} + +static HRESULT WINAPI HTMLTextAreaElement_private_checkValidity(IWineHTMLTextAreaPrivate *iface, VARIANT_BOOL *ret) +{ + HTMLTextAreaElement *This = impl_from_IWineHTMLTextAreaPrivateVtbl(iface); + FIXME("(%p)->(%p)\n", This, ret); + return E_NOTIMPL; +} + +static const IWineHTMLTextAreaPrivateVtbl WineHTMLTextAreaPrivateVtbl = { + HTMLTextAreaElement_private_QueryInterface, + HTMLTextAreaElement_private_AddRef, + HTMLTextAreaElement_private_Release, + HTMLTextAreaElement_private_GetTypeInfoCount, + HTMLTextAreaElement_private_GetTypeInfo, + HTMLTextAreaElement_private_GetIDsOfNames, + HTMLTextAreaElement_private_Invoke, + HTMLTextAreaElement_private_put_autofocus, + HTMLTextAreaElement_private_get_autofocus, + HTMLTextAreaElement_private_get_validationMessage, + HTMLTextAreaElement_private_get_validity, + HTMLTextAreaElement_private_get_willValidate, + HTMLTextAreaElement_private_setCustomValidity, + HTMLTextAreaElement_private_checkValidity +}; + static inline HTMLTextAreaElement *impl_from_HTMLDOMNode(HTMLDOMNode *iface) { return CONTAINING_RECORD(iface, HTMLTextAreaElement, element.node); @@ -368,6 +443,8 @@ static void *HTMLTextAreaElement_query_interface(DispatchEx *dispex, REFIID riid if(IsEqualGUID(&IID_IHTMLTextAreaElement, riid)) return &This->IHTMLTextAreaElement_iface; + if(IsEqualGUID(&IID_IWineHTMLTextAreaPrivate, riid)) + return &This->IWineHTMLTextAreaPrivate_iface; return HTMLElement_query_interface(&This->element.node.event_target.dispex, riid); } @@ -408,6 +485,8 @@ static void HTMLTextAreaElement_init_dispex_info(dispex_data_t *info, compat_mod {DISPID_UNKNOWN} }; dispex_info_add_interface(info, IHTMLTextAreaElement_tid, hooks); + if(mode >= COMPAT_MODE_IE10) + dispex_info_add_interface(info, IWineHTMLTextAreaPrivate_tid, NULL); HTMLElement_init_dispex_info(info, mode); } @@ -442,6 +521,7 @@ HRESULT HTMLTextAreaElement_Create(HTMLDocumentNode *doc, nsIDOMElement *nselem, return E_OUTOFMEMORY; ret->IHTMLTextAreaElement_iface.lpVtbl = &HTMLTextAreaElementVtbl; + ret->IWineHTMLTextAreaPrivate_iface.lpVtbl = &WineHTMLTextAreaPrivateVtbl; ret->element.node.vtbl = &HTMLTextAreaElementImplVtbl; HTMLElement_Init(&ret->element, doc, nselem, &HTMLTextAreaElement_dispex); diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index cd8beb3f7ca..5c885ae5de4 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -315,6 +315,7 @@ struct constructor; XIID(IWineHTMLFormPrivate) \ XIID(IWineHTMLObjectPrivate) \ XIID(IWineHTMLSelectPrivate) \ + XIID(IWineHTMLTextAreaPrivate) \ XIID(IWineHTMLWindowPrivate) \ XIID(IWineHTMLWindowCompatPrivate) \ XIID(IWineCSSProperties) \ diff --git a/dlls/mshtml/mshtml_private_iface.idl b/dlls/mshtml/mshtml_private_iface.idl index 8ffcadb1cfc..14bcae098ee 100644 --- a/dlls/mshtml/mshtml_private_iface.idl +++ b/dlls/mshtml/mshtml_private_iface.idl @@ -296,6 +296,31 @@ interface IWineHTMLSelectPrivate : IDispatch HRESULT checkValidity([retval, out] VARIANT_BOOL *ret); } +[ + odl, + oleautomation, + dual, + hidden, + uuid(27454a8f-bf7a-e47e-9ea8-2d7d1faad588) +] +interface IWineHTMLTextAreaPrivate : 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 70fdeb3411c..6cacb0f2303 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -4405,8 +4405,8 @@ sync_test("prototype props", function() { ["maxLength",10], "name", ["placeholder",10], "readOnly", ["required",10], "rows", "select", "selectionEnd", "selectionStart", ["setCustomValidity",10], "setSelectionRange", "status", "type", ["validationMessage",10], ["validity",10], "value", ["willValidate",10], "wrap" ], [ - ["autofocus",10], ["checkValidity",10], ["dataFld",9,10], ["dataFormatAs",9,10], ["dataSrc",9,10], ["maxLength",10], ["placeholder",10], ["required",10], - "selectionEnd", "selectionStart", ["setCustomValidity",10], "setSelectionRange", ["validationMessage",10], ["validity",10], ["willValidate",10] + ["dataFld",9,10], ["dataFormatAs",9,10], ["dataSrc",9,10], ["maxLength",10], ["placeholder",10], ["required",10], "selectionEnd", "selectionStart", + "setSelectionRange" ]); check(HTMLTitleElement, [ "text" ]); check(HTMLUnknownElement, [ "namedRecordset", "recordset" ]); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9252