Jacek Caban : mshtml: Added IHTMLElement::get_isTextEdit implementation.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Dec 22 16:20:52 CST 2014
Module: wine
Branch: master
Commit: c1afef340ccde247a6106764e541b7fba755feb4
URL: http://source.winehq.org/git/wine.git/?a=commit;h=c1afef340ccde247a6106764e541b7fba755feb4
Author: Jacek Caban <jacek at codeweavers.com>
Date: Sun Dec 21 19:29:46 2014 +0100
mshtml: Added IHTMLElement::get_isTextEdit implementation.
---
dlls/mshtml/htmlbody.c | 8 +++++++-
dlls/mshtml/htmlelem.c | 8 ++++++--
dlls/mshtml/htmlinput.c | 37 +++++++++++++++++++++++++++++++++++--
dlls/mshtml/htmltextarea.c | 8 +++++++-
dlls/mshtml/mshtml_private.h | 1 +
dlls/mshtml/tests/dom.c | 23 +++++++++++++++++++++++
6 files changed, 79 insertions(+), 6 deletions(-)
diff --git a/dlls/mshtml/htmlbody.c b/dlls/mshtml/htmlbody.c
index 748302e..0c8691a 100644
--- a/dlls/mshtml/htmlbody.c
+++ b/dlls/mshtml/htmlbody.c
@@ -833,6 +833,11 @@ static event_target_t **HTMLBodyElement_get_event_target(HTMLDOMNode *iface)
: &This->textcont.element.node.event_target;
}
+static BOOL HTMLBodyElement_is_text_edit(HTMLDOMNode *iface)
+{
+ return TRUE;
+}
+
static const cpc_entry_t HTMLBodyElement_cpc[] = {
{&DIID_HTMLTextContainerEvents},
{&IID_IPropertyNotifySink},
@@ -857,7 +862,8 @@ static const NodeImplVtbl HTMLBodyElementImplVtbl = {
NULL,
NULL,
HTMLBodyElement_traverse,
- HTMLBodyElement_unlink
+ HTMLBodyElement_unlink,
+ HTMLBodyElement_is_text_edit
};
static const tid_t HTMLBodyElement_iface_tids[] = {
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c
index d6cb18f..da7c0f7 100644
--- a/dlls/mshtml/htmlelem.c
+++ b/dlls/mshtml/htmlelem.c
@@ -1665,8 +1665,12 @@ static HRESULT WINAPI HTMLElement_get_parentTextEdit(IHTMLElement *iface, IHTMLE
static HRESULT WINAPI HTMLElement_get_isTextEdit(IHTMLElement *iface, VARIANT_BOOL *p)
{
HTMLElement *This = impl_from_IHTMLElement(iface);
- FIXME("(%p)->(%p)\n", This, p);
- return E_NOTIMPL;
+
+ TRACE("(%p)->(%p)\n", This, p);
+
+ *p = This->node.vtbl->is_text_edit && This->node.vtbl->is_text_edit(&This->node)
+ ? VARIANT_TRUE : VARIANT_FALSE;
+ return S_OK;
}
static HRESULT WINAPI HTMLElement_click(IHTMLElement *iface)
diff --git a/dlls/mshtml/htmlinput.c b/dlls/mshtml/htmlinput.c
index 4ce01b5..42e5796 100644
--- a/dlls/mshtml/htmlinput.c
+++ b/dlls/mshtml/htmlinput.c
@@ -1260,6 +1260,32 @@ static HRESULT HTMLInputElementImpl_get_disabled(HTMLDOMNode *iface, VARIANT_BOO
return IHTMLInputElement_get_disabled(&This->IHTMLInputElement_iface, p);
}
+static BOOL HTMLInputElement_is_text_edit(HTMLDOMNode *iface)
+{
+ HTMLInputElement *This = impl_from_HTMLDOMNode(iface);
+ const PRUnichar *type;
+ nsAString nsstr;
+ nsresult nsres;
+ BOOL ret = FALSE;
+
+ static const WCHAR buttonW[] = {'b','u','t','t','o','n',0};
+ static const WCHAR hiddenW[] = {'h','i','d','d','e','n',0};
+ static const WCHAR passwordW[] = {'p','a','s','s','w','o','r','d',0};
+ static const WCHAR resetW[] = {'r','e','s','e','t',0};
+ static const WCHAR submitW[] = {'s','u','b','m','i','t',0};
+ static const WCHAR textW[] = {'t','e','x','t',0};
+
+ nsAString_Init(&nsstr, NULL);
+ nsres = nsIDOMHTMLInputElement_GetType(This->nsinput, &nsstr);
+ if(NS_SUCCEEDED(nsres)) {
+ nsAString_GetData(&nsstr, &type);
+ ret = !strcmpW(type, buttonW) || !strcmpW(type, hiddenW) || !strcmpW(type, passwordW)
+ || !strcmpW(type, resetW) || !strcmpW(type, submitW) || !strcmpW(type, textW);
+ }
+ nsAString_Finish(&nsstr);
+ return ret;
+}
+
static void HTMLInputElement_traverse(HTMLDOMNode *iface, nsCycleCollectionTraversalCallback *cb)
{
HTMLInputElement *This = impl_from_HTMLDOMNode(iface);
@@ -1297,7 +1323,8 @@ static const NodeImplVtbl HTMLInputElementImplVtbl = {
NULL,
NULL,
HTMLInputElement_traverse,
- HTMLInputElement_unlink
+ HTMLInputElement_unlink,
+ HTMLInputElement_is_text_edit
};
static const tid_t HTMLInputElement_iface_tids[] = {
@@ -1764,6 +1791,11 @@ static HRESULT HTMLButtonElementImpl_get_disabled(HTMLDOMNode *iface, VARIANT_BO
return IHTMLButtonElement_get_disabled(&This->IHTMLButtonElement_iface, p);
}
+static BOOL HTMLButtonElement_is_text_edit(HTMLDOMNode *iface)
+{
+ return TRUE;
+}
+
static void HTMLButtonElement_traverse(HTMLDOMNode *iface, nsCycleCollectionTraversalCallback *cb)
{
HTMLButtonElement *This = button_from_HTMLDOMNode(iface);
@@ -1801,7 +1833,8 @@ static const NodeImplVtbl HTMLButtonElementImplVtbl = {
NULL,
NULL,
HTMLButtonElement_traverse,
- HTMLButtonElement_unlink
+ HTMLButtonElement_unlink,
+ HTMLButtonElement_is_text_edit
};
static const tid_t HTMLButtonElement_iface_tids[] = {
diff --git a/dlls/mshtml/htmltextarea.c b/dlls/mshtml/htmltextarea.c
index f756e08..43086f9 100644
--- a/dlls/mshtml/htmltextarea.c
+++ b/dlls/mshtml/htmltextarea.c
@@ -437,6 +437,11 @@ static HRESULT HTMLTextAreaElementImpl_get_disabled(HTMLDOMNode *iface, VARIANT_
return IHTMLTextAreaElement_get_disabled(&This->IHTMLTextAreaElement_iface, p);
}
+static BOOL HTMLTextAreaElement_is_text_edit(HTMLDOMNode *iface)
+{
+ return TRUE;
+}
+
static void HTMLTextAreaElement_traverse(HTMLDOMNode *iface, nsCycleCollectionTraversalCallback *cb)
{
HTMLTextAreaElement *This = impl_from_HTMLDOMNode(iface);
@@ -474,7 +479,8 @@ static const NodeImplVtbl HTMLTextAreaElementImplVtbl = {
NULL,
NULL,
HTMLTextAreaElement_traverse,
- HTMLTextAreaElement_unlink
+ HTMLTextAreaElement_unlink,
+ HTMLTextAreaElement_is_text_edit
};
static const tid_t HTMLTextAreaElement_iface_tids[] = {
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 497a9e1..8529231 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -646,6 +646,7 @@ typedef struct {
HRESULT (*bind_to_tree)(HTMLDOMNode*);
void (*traverse)(HTMLDOMNode*,nsCycleCollectionTraversalCallback*);
void (*unlink)(HTMLDOMNode*);
+ BOOL (*is_text_edit)(HTMLDOMNode*);
} NodeImplVtbl;
struct HTMLDOMNode {
diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c
index 8a47207..d164f1b 100644
--- a/dlls/mshtml/tests/dom.c
+++ b/dlls/mshtml/tests/dom.c
@@ -2538,6 +2538,18 @@ static void _test_elem_contains(unsigned line, IHTMLElement *elem, IHTMLElement
ok_(__FILE__,line)(b == exval, "contains returned %x, expected %x\n", b, exval);
}
+#define test_elem_istextedit(a,b) _test_elem_istextedit(__LINE__,a,b)
+static void _test_elem_istextedit(unsigned line, IHTMLElement *elem, VARIANT_BOOL exval)
+{
+ VARIANT_BOOL b;
+ HRESULT hres;
+
+ b = 100;
+ hres = IHTMLElement_get_isTextEdit(elem, &b);
+ ok_(__FILE__,line)(hres == S_OK, "isTextEdit failed: %08x\n", hres);
+ ok_(__FILE__,line)(b == exval, "isTextEdit = %x\n", b);
+}
+
#define get_first_child(n) _get_first_child(__LINE__,n)
static IHTMLDOMNode *_get_first_child(unsigned line, IUnknown *unk)
{
@@ -6122,6 +6134,8 @@ static void test_defaults(IHTMLDocument2 *doc)
test_body_funs(body);
IHTMLBodyElement_Release(body);
+ test_elem_istextedit(elem, VARIANT_TRUE);
+
hres = IHTMLElement_get_style(elem, &style);
ok(hres == S_OK, "get_style failed: %08x\n", hres);
@@ -6264,6 +6278,8 @@ static void test_button_elem(IHTMLElement *elem)
{
test_button_name(elem, NULL);
set_button_name(elem, "button name");
+
+ test_elem_istextedit(elem, VARIANT_TRUE);
}
#define test_tr_possess(e,r,l,i) _test_tr_possess(__LINE__,e,r,l,i)
@@ -7351,6 +7367,7 @@ static void test_elems(IHTMLDocument2 *doc)
test_plugins_col(doc);
elem = get_doc_elem(doc);
+ test_elem_istextedit(elem, VARIANT_FALSE);
test_elem_all((IUnknown*)elem, all_types+1, sizeof(all_types)/sizeof(all_types[0])-1);
IHTMLElement_Release(elem);
@@ -7370,6 +7387,7 @@ static void test_elems(IHTMLDocument2 *doc)
test_elem_tabindex((IUnknown*)elem, 0);
test_elem_set_tabindex((IUnknown*)elem, 1);
test_elem_filters((IUnknown*)elem);
+ test_elem_istextedit(elem, VARIANT_FALSE);
node = test_node_get_parent((IUnknown*)elem);
ok(node != NULL, "node == NULL\n");
@@ -7430,6 +7448,7 @@ static void test_elems(IHTMLDocument2 *doc)
test_select_elem(select);
+ test_elem_istextedit(elem, VARIANT_FALSE);
test_elem_title((IUnknown*)select, NULL);
test_elem_set_title((IUnknown*)select, "Title");
test_elem_title((IUnknown*)select, "Title");
@@ -7467,6 +7486,7 @@ static void test_elems(IHTMLDocument2 *doc)
ok(hres == S_OK, "Could not get IHTMLScriptElement interface: %08x\n", hres);
test_elem_language(elem, NULL);
+ test_elem_istextedit(elem, VARIANT_FALSE);
if(hres == S_OK)
{
@@ -7530,6 +7550,7 @@ static void test_elems(IHTMLDocument2 *doc)
test_input_get_disabled(input, VARIANT_FALSE);
test_elem_client_size((IUnknown*)elem);
test_input_type(input, "text");
+ test_elem_istextedit(elem, VARIANT_TRUE);
test_node_get_value_str((IUnknown*)elem, NULL);
test_node_put_value_str((IUnknown*)elem, "test");
@@ -8122,6 +8143,8 @@ static void test_elems2(IHTMLDocument2 *doc)
form = get_textarea_form((IUnknown*)elem);
ok(!form, "form = %p\n", form);
+ test_elem_istextedit(elem, VARIANT_TRUE);
+
IHTMLElement_Release(elem);
}
More information about the wine-cvs
mailing list