Jacek Caban : mshtml: Add IHTMLElement7::spellcheck property implementation.
Alexandre Julliard
julliard at winehq.org
Wed Mar 10 14:58:46 CST 2021
Module: wine
Branch: master
Commit: 44dbb88ce417deb8515991aa0a82bc7b344185e2
URL: https://source.winehq.org/git/wine.git/?a=commit;h=44dbb88ce417deb8515991aa0a82bc7b344185e2
Author: Jacek Caban <jacek at codeweavers.com>
Date: Wed Mar 10 14:58:29 2021 +0100
mshtml: Add IHTMLElement7::spellcheck property implementation.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/mshtml/htmlelem.c | 35 +++++++++++++++++++++++++++++++----
dlls/mshtml/tests/dom.c | 43 +++++++++++++++++++++++++++++++++++++++++++
2 files changed, 74 insertions(+), 4 deletions(-)
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c
index b7aca01c3c1..f93e015f559 100644
--- a/dlls/mshtml/htmlelem.c
+++ b/dlls/mshtml/htmlelem.c
@@ -5414,15 +5414,42 @@ static HRESULT WINAPI HTMLElement7_get_xmsAcceleratorKey(IHTMLElement7 *iface, B
static HRESULT WINAPI HTMLElement7_put_spellcheck(IHTMLElement7 *iface, VARIANT v)
{
HTMLElement *This = impl_from_IHTMLElement7(iface);
- FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
- return E_NOTIMPL;
+
+ TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
+
+ if(!This->html_element) {
+ FIXME("non-HTML element\n");
+ return E_NOTIMPL;
+ }
+
+ if(V_VT(&v) != VT_BOOL) {
+ FIXME("unsupported argument %s\n", debugstr_variant(&v));
+ return E_NOTIMPL;
+ }
+
+ return map_nsresult(nsIDOMHTMLElement_SetSpellcheck(This->html_element, !!V_BOOL(&v)));
}
static HRESULT WINAPI HTMLElement7_get_spellcheck(IHTMLElement7 *iface, VARIANT *p)
{
HTMLElement *This = impl_from_IHTMLElement7(iface);
- FIXME("(%p)->(%p)\n", This, p);
- return E_NOTIMPL;
+ cpp_bool spellcheck;
+ nsresult nsres;
+
+ TRACE("(%p)->(%p)\n", This, p);
+
+ if(!This->html_element) {
+ FIXME("non-HTML element\n");
+ return E_NOTIMPL;
+ }
+
+ nsres = nsIDOMHTMLElement_GetSpellcheck(This->html_element, &spellcheck);
+ if(NS_FAILED(nsres))
+ return map_nsresult(nsres);
+
+ V_VT(p) = VT_BOOL;
+ V_BOOL(p) = spellcheck ? VARIANT_TRUE : VARIANT_FALSE;
+ return S_OK;
}
static HRESULT WINAPI HTMLElement7_put_onmsmanipulationstatechanged(IHTMLElement7 *iface, VARIANT v)
diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c
index 94923d83add..ebed27b48e8 100644
--- a/dlls/mshtml/tests/dom.c
+++ b/dlls/mshtml/tests/dom.c
@@ -8369,6 +8369,48 @@ static void test_iframe_elem(IHTMLElement *elem)
IHTMLDocument2_Release(content_doc);
}
+static void test_elem_spellcheck(IHTMLElement *iface)
+{
+ IHTMLElement7 *elem;
+ VARIANT v;
+ HRESULT hres;
+
+ hres = IUnknown_QueryInterface(iface, &IID_IHTMLElement7, (void**)&elem);
+ if(hres == E_NOINTERFACE) {
+ win_skip("IHTMLElement7 not supported\n");
+ return;
+ }
+ ok(hres == S_OK, "Could not get IHTMLElement7 interface: %08x\n", hres);
+
+ V_VT(&v) = VT_ERROR;
+ hres = IHTMLElement7_get_spellcheck(elem, &v);
+ ok(hres == S_OK, "get_spellcheck failed: %08x\n", hres);
+ ok(V_VT(&v) == VT_BOOL && !V_BOOL(&v), "spellcheck = %s\n", wine_dbgstr_variant(&v));
+
+ V_VT(&v) = VT_BOOL;
+ V_BOOL(&v) = VARIANT_TRUE;
+ hres = IHTMLElement7_put_spellcheck(elem, v);
+ ok(hres == S_OK, "put_spellcheck failed: %08x\n", hres);
+
+ V_VT(&v) = VT_ERROR;
+ hres = IHTMLElement7_get_spellcheck(elem, &v);
+ ok(hres == S_OK, "get_spellcheck failed: %08x\n", hres);
+ ok(V_VT(&v) == VT_BOOL && V_BOOL(&v) == VARIANT_TRUE, "spellcheck = %s\n",
+ wine_dbgstr_variant(&v));
+
+ V_VT(&v) = VT_BOOL;
+ V_BOOL(&v) = VARIANT_FALSE;
+ hres = IHTMLElement7_put_spellcheck(elem, v);
+ ok(hres == S_OK, "put_spellcheck failed: %08x\n", hres);
+
+ V_VT(&v) = VT_ERROR;
+ hres = IHTMLElement7_get_spellcheck(elem, &v);
+ ok(hres == S_OK, "get_spellcheck failed: %08x\n", hres);
+ ok(V_VT(&v) == VT_BOOL && !V_BOOL(&v), "spellcheck = %s\n", wine_dbgstr_variant(&v));
+
+ IHTMLElement7_Release(elem);
+}
+
#define test_stylesheet_csstext(a,b,c) _test_stylesheet_csstext(__LINE__,a,b,c)
static void _test_stylesheet_csstext(unsigned line, IHTMLStyleSheet *stylesheet, const WCHAR *exstr, BOOL is_todo)
{
@@ -8981,6 +9023,7 @@ static void test_elems(IHTMLDocument2 *doc)
test_elem_client_size((IUnknown*)elem);
test_input_type(input, L"text");
test_elem_istextedit(elem, VARIANT_TRUE);
+ test_elem_spellcheck(elem);
test_node_get_value_str((IUnknown*)elem, NULL);
test_node_put_value_str((IUnknown*)elem, L"test");
More information about the wine-cvs
mailing list