Module: wine Branch: master Commit: df90f665bb11e2d01ff3e061d6f989ce2589cadb URL: http://source.winehq.org/git/wine.git/?a=commit;h=df90f665bb11e2d01ff3e061d6...
Author: Jacek Caban jacek@codeweavers.com Date: Fri Oct 2 13:51:19 2009 +0200
mshtml: Added HTMLAnchorElement dispex data.
---
dlls/mshtml/dispex.c | 2 ++ dlls/mshtml/htmlanchor.c | 24 ++++++++++++++++++++++-- dlls/mshtml/mshtml_private.h | 2 ++ dlls/mshtml/tests/dom.c | 10 ++++++---- 4 files changed, 32 insertions(+), 6 deletions(-)
diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c index a2d3468..3cfae67 100644 --- a/dlls/mshtml/dispex.c +++ b/dlls/mshtml/dispex.c @@ -79,6 +79,7 @@ static REFIID tid_ids[] = { &IID_NULL, &DIID_DispCEventObj, &DIID_DispDOMChildrenCollection, + &DIID_DispHTMLAnchorElement, &DIID_DispHTMLBody, &DIID_DispHTMLCommentElement, &DIID_DispHTMLCurrentStyle, @@ -98,6 +99,7 @@ static REFIID tid_ids[] = { &DIID_DispHTMLTableRow, &DIID_DispHTMLUnknownElement, &DIID_DispHTMLWindow2, + &IID_IHTMLAnchorElement, &IID_IHTMLBodyElement, &IID_IHTMLBodyElement2, &IID_IHTMLCommentElement, diff --git a/dlls/mshtml/htmlanchor.c b/dlls/mshtml/htmlanchor.c index 7e5fd3f..7797e7e 100644 --- a/dlls/mshtml/htmlanchor.c +++ b/dlls/mshtml/htmlanchor.c @@ -474,14 +474,34 @@ static const NodeImplVtbl HTMLAnchorElementImplVtbl = { HTMLAnchorElement_destructor };
+static const tid_t HTMLAnchorElement_iface_tids[] = { + IHTMLAnchorElement_tid, + IHTMLDOMNode_tid, + IHTMLDOMNode2_tid, + IHTMLElement_tid, + IHTMLElement2_tid, + IHTMLElement3_tid, + IHTMLElement4_tid, + IHTMLTextContainer_tid, + IHTMLUniqueName_tid, + 0 +}; + +static dispex_static_data_t HTMLAnchorElement_dispex = { + NULL, + DispHTMLAnchorElement_tid, + NULL, + HTMLAnchorElement_iface_tids +}; + HTMLElement *HTMLAnchorElement_Create(nsIDOMHTMLElement *nselem) { HTMLAnchorElement *ret = heap_alloc_zero(sizeof(HTMLAnchorElement));
- HTMLElement_Init(&ret->element, NULL); - ret->lpHTMLAnchorElementVtbl = &HTMLAnchorElementVtbl; ret->element.node.vtbl = &HTMLAnchorElementImplVtbl;
+ HTMLElement_Init(&ret->element, &HTMLAnchorElement_dispex); + return &ret->element; } diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 085dd1d..18719fe 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -59,6 +59,7 @@ typedef enum { NULL_tid, DispCEventObj_tid, DispDOMChildrenCollection_tid, + DispHTMLAnchorElement_tid, DispHTMLBody_tid, DispHTMLCommentElement_tid, DispHTMLCurrentStyle_tid, @@ -78,6 +79,7 @@ typedef enum { DispHTMLTableRow_tid, DispHTMLUnknownElement_tid, DispHTMLWindow2_tid, + IHTMLAnchorElement_tid, IHTMLBodyElement_tid, IHTMLBodyElement2_tid, IHTMLCommentElement_tid, diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c index 626445e..b8a7e8a 100644 --- a/dlls/mshtml/tests/dom.c +++ b/dlls/mshtml/tests/dom.c @@ -353,7 +353,7 @@ static const elem_type_info_t elem_type_infos[] = { {"HEAD", elem_iids, NULL}, {"TITLE", elem_iids, NULL}, {"BODY", body_iids, &DIID_DispHTMLBody}, - {"A", anchor_iids, NULL}, + {"A", anchor_iids, &DIID_DispHTMLAnchorElement}, {"INPUT", input_iids, &DIID_DispHTMLInputElement}, {"SELECT", select_iids, &DIID_DispHTMLSelectElement}, {"TEXTAREA", textarea_iids, NULL}, @@ -527,7 +527,8 @@ static void _test_disp(unsigned line, IUnknown *unk, const IID *diid, const char if(_test_get_dispid(line, unk, &iid)) ok_(__FILE__,line) (IsEqualGUID(&iid, diid), "unexpected guid %s\n", dbgstr_guid(&iid));
- _test_disp_value(line, unk, val); + if(val) + _test_disp_value(line, unk, val); }
#define test_disp2(u,id,id2,v) _test_disp2(__LINE__,u,id,id2,v) @@ -539,7 +540,8 @@ static void _test_disp2(unsigned line, IUnknown *unk, const IID *diid, const IID ok_(__FILE__,line) (IsEqualGUID(&iid, diid) || broken(IsEqualGUID(&iid, diid2)), "unexpected guid %s\n", dbgstr_guid(&iid));
- _test_disp_value(line, unk, val); + if(val) + _test_disp_value(line, unk, val); }
#define get_elem_iface(u) _get_elem_iface(__LINE__,u) @@ -664,7 +666,7 @@ static void _test_elem_type(unsigned line, IUnknown *unk, elem_type_t type) _test_elem_tag(line, unk, elem_type_infos[type].tag); _test_ifaces(line, unk, elem_type_infos[type].iids);
- if(elem_type_infos[type].dispiid) + if(elem_type_infos[type].dispiid && type != ET_A) _test_disp(line, unk, elem_type_infos[type].dispiid, "[object]"); }