2 * Copyright 2006-2010 Jacek Caban for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
29 #include "wine/debug.h"
31 #include "mshtml_private.h"
32 #include "htmlevent.h"
33 #include "htmlstyle.h"
35 WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
39 IHTMLRect IHTMLRect_iface;
43 nsIDOMClientRect *nsrect;
46 static inline HTMLRect *impl_from_IHTMLRect(IHTMLRect *iface)
48 return CONTAINING_RECORD(iface, HTMLRect, IHTMLRect_iface);
51 static HRESULT WINAPI HTMLRect_QueryInterface(IHTMLRect *iface, REFIID riid, void **ppv)
53 HTMLRect *This = impl_from_IHTMLRect(iface);
55 if(IsEqualGUID(&IID_IUnknown, riid)) {
56 TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
57 *ppv = &This->IHTMLRect_iface;
58 }else if(IsEqualGUID(&IID_IHTMLRect, riid)) {
59 TRACE("(%p)->(IID_IHTMLRect %p)\n", This, ppv);
60 *ppv = &This->IHTMLRect_iface;
61 }else if(dispex_query_interface(&This->dispex, riid, ppv)) {
62 return *ppv ? S_OK : E_NOINTERFACE;
64 FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
69 IUnknown_AddRef((IUnknown*)*ppv);
73 static ULONG WINAPI HTMLRect_AddRef(IHTMLRect *iface)
75 HTMLRect *This = impl_from_IHTMLRect(iface);
76 LONG ref = InterlockedIncrement(&This->ref);
78 TRACE("(%p) ref=%d\n", This, ref);
83 static ULONG WINAPI HTMLRect_Release(IHTMLRect *iface)
85 HTMLRect *This = impl_from_IHTMLRect(iface);
86 LONG ref = InterlockedDecrement(&This->ref);
88 TRACE("(%p) ref=%d\n", This, ref);
92 nsIDOMClientRect_Release(This->nsrect);
99 static HRESULT WINAPI HTMLRect_GetTypeInfoCount(IHTMLRect *iface, UINT *pctinfo)
101 HTMLRect *This = impl_from_IHTMLRect(iface);
102 FIXME("(%p)->(%p)\n", This, pctinfo);
106 static HRESULT WINAPI HTMLRect_GetTypeInfo(IHTMLRect *iface, UINT iTInfo,
107 LCID lcid, ITypeInfo **ppTInfo)
109 HTMLRect *This = impl_from_IHTMLRect(iface);
111 return IDispatchEx_GetTypeInfo(&This->dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
114 static HRESULT WINAPI HTMLRect_GetIDsOfNames(IHTMLRect *iface, REFIID riid,
115 LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
117 HTMLRect *This = impl_from_IHTMLRect(iface);
119 return IDispatchEx_GetIDsOfNames(&This->dispex.IDispatchEx_iface, riid, rgszNames, cNames,
123 static HRESULT WINAPI HTMLRect_Invoke(IHTMLRect *iface, DISPID dispIdMember,
124 REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
125 VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
127 HTMLRect *This = impl_from_IHTMLRect(iface);
129 return IDispatchEx_Invoke(&This->dispex.IDispatchEx_iface, dispIdMember, riid, lcid, wFlags,
130 pDispParams, pVarResult, pExcepInfo, puArgErr);
133 static HRESULT WINAPI HTMLRect_put_left(IHTMLRect *iface, LONG v)
135 HTMLRect *This = impl_from_IHTMLRect(iface);
136 FIXME("(%p)->(%d)\n", This, v);
140 static HRESULT WINAPI HTMLRect_get_left(IHTMLRect *iface, LONG *p)
142 HTMLRect *This = impl_from_IHTMLRect(iface);
146 TRACE("(%p)->(%p)\n", This, p);
148 nsres = nsIDOMClientRect_GetLeft(This->nsrect, &left);
149 if(NS_FAILED(nsres)) {
150 ERR("GetLeft failed: %08x\n", nsres);
154 *p = floor(left+0.5);
158 static HRESULT WINAPI HTMLRect_put_top(IHTMLRect *iface, LONG v)
160 HTMLRect *This = impl_from_IHTMLRect(iface);
161 FIXME("(%p)->(%d)\n", This, v);
165 static HRESULT WINAPI HTMLRect_get_top(IHTMLRect *iface, LONG *p)
167 HTMLRect *This = impl_from_IHTMLRect(iface);
171 TRACE("(%p)->(%p)\n", This, p);
173 nsres = nsIDOMClientRect_GetTop(This->nsrect, &top);
174 if(NS_FAILED(nsres)) {
175 ERR("GetTop failed: %08x\n", nsres);
183 static HRESULT WINAPI HTMLRect_put_right(IHTMLRect *iface, LONG v)
185 HTMLRect *This = impl_from_IHTMLRect(iface);
186 FIXME("(%p)->(%d)\n", This, v);
190 static HRESULT WINAPI HTMLRect_get_right(IHTMLRect *iface, LONG *p)
192 HTMLRect *This = impl_from_IHTMLRect(iface);
196 TRACE("(%p)->(%p)\n", This, p);
198 nsres = nsIDOMClientRect_GetRight(This->nsrect, &right);
199 if(NS_FAILED(nsres)) {
200 ERR("GetRight failed: %08x\n", nsres);
204 *p = floor(right+0.5);
208 static HRESULT WINAPI HTMLRect_put_bottom(IHTMLRect *iface, LONG v)
210 HTMLRect *This = impl_from_IHTMLRect(iface);
211 FIXME("(%p)->(%d)\n", This, v);
215 static HRESULT WINAPI HTMLRect_get_bottom(IHTMLRect *iface, LONG *p)
217 HTMLRect *This = impl_from_IHTMLRect(iface);
221 TRACE("(%p)->(%p)\n", This, p);
223 nsres = nsIDOMClientRect_GetBottom(This->nsrect, &bottom);
224 if(NS_FAILED(nsres)) {
225 ERR("GetBottom failed: %08x\n", nsres);
229 *p = floor(bottom+0.5);
233 static const IHTMLRectVtbl HTMLRectVtbl = {
234 HTMLRect_QueryInterface,
237 HTMLRect_GetTypeInfoCount,
238 HTMLRect_GetTypeInfo,
239 HTMLRect_GetIDsOfNames,
251 static const tid_t HTMLRect_iface_tids[] = {
255 static dispex_static_data_t HTMLRect_dispex = {
262 static HRESULT create_html_rect(nsIDOMClientRect *nsrect, IHTMLRect **ret)
266 rect = heap_alloc_zero(sizeof(HTMLRect));
268 return E_OUTOFMEMORY;
270 rect->IHTMLRect_iface.lpVtbl = &HTMLRectVtbl;
273 init_dispex(&rect->dispex, (IUnknown*)&rect->IHTMLRect_iface, &HTMLRect_dispex);
275 nsIDOMClientRect_AddRef(nsrect);
276 rect->nsrect = nsrect;
278 *ret = &rect->IHTMLRect_iface;
282 static inline HTMLElement *impl_from_IHTMLElement2(IHTMLElement2 *iface)
284 return CONTAINING_RECORD(iface, HTMLElement, IHTMLElement2_iface);
287 static HRESULT WINAPI HTMLElement2_QueryInterface(IHTMLElement2 *iface,
288 REFIID riid, void **ppv)
290 HTMLElement *This = impl_from_IHTMLElement2(iface);
291 return IHTMLElement_QueryInterface(&This->IHTMLElement_iface, riid, ppv);
294 static ULONG WINAPI HTMLElement2_AddRef(IHTMLElement2 *iface)
296 HTMLElement *This = impl_from_IHTMLElement2(iface);
297 return IHTMLElement_AddRef(&This->IHTMLElement_iface);
300 static ULONG WINAPI HTMLElement2_Release(IHTMLElement2 *iface)
302 HTMLElement *This = impl_from_IHTMLElement2(iface);
303 return IHTMLElement_Release(&This->IHTMLElement_iface);
306 static HRESULT WINAPI HTMLElement2_GetTypeInfoCount(IHTMLElement2 *iface, UINT *pctinfo)
308 HTMLElement *This = impl_from_IHTMLElement2(iface);
309 return IDispatchEx_GetTypeInfoCount(&This->node.dispex.IDispatchEx_iface, pctinfo);
312 static HRESULT WINAPI HTMLElement2_GetTypeInfo(IHTMLElement2 *iface, UINT iTInfo,
313 LCID lcid, ITypeInfo **ppTInfo)
315 HTMLElement *This = impl_from_IHTMLElement2(iface);
316 return IDispatchEx_GetTypeInfo(&This->node.dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
319 static HRESULT WINAPI HTMLElement2_GetIDsOfNames(IHTMLElement2 *iface, REFIID riid,
320 LPOLESTR *rgszNames, UINT cNames,
321 LCID lcid, DISPID *rgDispId)
323 HTMLElement *This = impl_from_IHTMLElement2(iface);
324 return IDispatchEx_GetIDsOfNames(&This->node.dispex.IDispatchEx_iface, riid, rgszNames, cNames,
328 static HRESULT WINAPI HTMLElement2_Invoke(IHTMLElement2 *iface, DISPID dispIdMember,
329 REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
330 VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
332 HTMLElement *This = impl_from_IHTMLElement2(iface);
333 return IDispatchEx_Invoke(&This->node.dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
334 wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
337 static HRESULT WINAPI HTMLElement2_get_scopeName(IHTMLElement2 *iface, BSTR *p)
339 HTMLElement *This = impl_from_IHTMLElement2(iface);
340 FIXME("(%p)->(%p)\n", This, p);
344 static HRESULT WINAPI HTMLElement2_setCapture(IHTMLElement2 *iface, VARIANT_BOOL containerCapture)
346 HTMLElement *This = impl_from_IHTMLElement2(iface);
347 FIXME("(%p)->(%x)\n", This, containerCapture);
351 static HRESULT WINAPI HTMLElement2_releaseCapture(IHTMLElement2 *iface)
353 HTMLElement *This = impl_from_IHTMLElement2(iface);
354 FIXME("(%p)\n", This);
358 static HRESULT WINAPI HTMLElement2_put_onlosecapture(IHTMLElement2 *iface, VARIANT v)
360 HTMLElement *This = impl_from_IHTMLElement2(iface);
361 FIXME("(%p)->()\n", This);
365 static HRESULT WINAPI HTMLElement2_get_onlosecapture(IHTMLElement2 *iface, VARIANT *p)
367 HTMLElement *This = impl_from_IHTMLElement2(iface);
368 FIXME("(%p)->(%p)\n", This, p);
372 static HRESULT WINAPI HTMLElement2_componentFromPoint(IHTMLElement2 *iface,
373 LONG x, LONG y, BSTR *component)
375 HTMLElement *This = impl_from_IHTMLElement2(iface);
376 FIXME("(%p)->(%d %d %p)\n", This, x, y, component);
380 static HRESULT WINAPI HTMLElement2_doScroll(IHTMLElement2 *iface, VARIANT component)
382 HTMLElement *This = impl_from_IHTMLElement2(iface);
384 TRACE("(%p)->(%s)\n", This, debugstr_variant(&component));
386 if(!This->node.doc->content_ready
387 || !This->node.doc->basedoc.doc_obj->in_place_active)
394 static HRESULT WINAPI HTMLElement2_put_onscroll(IHTMLElement2 *iface, VARIANT v)
396 HTMLElement *This = impl_from_IHTMLElement2(iface);
397 FIXME("(%p)->()\n", This);
401 static HRESULT WINAPI HTMLElement2_get_onscroll(IHTMLElement2 *iface, VARIANT *p)
403 HTMLElement *This = impl_from_IHTMLElement2(iface);
404 FIXME("(%p)->(%p)\n", This, p);
408 static HRESULT WINAPI HTMLElement2_put_ondrag(IHTMLElement2 *iface, VARIANT v)
410 HTMLElement *This = impl_from_IHTMLElement2(iface);
412 TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
414 return set_node_event(&This->node, EVENTID_DRAG, &v);
417 static HRESULT WINAPI HTMLElement2_get_ondrag(IHTMLElement2 *iface, VARIANT *p)
419 HTMLElement *This = impl_from_IHTMLElement2(iface);
421 TRACE("(%p)->(%p)\n", This, p);
423 return get_node_event(&This->node, EVENTID_DRAG, p);
426 static HRESULT WINAPI HTMLElement2_put_ondragend(IHTMLElement2 *iface, VARIANT v)
428 HTMLElement *This = impl_from_IHTMLElement2(iface);
429 FIXME("(%p)->()\n", This);
433 static HRESULT WINAPI HTMLElement2_get_ondragend(IHTMLElement2 *iface, VARIANT *p)
435 HTMLElement *This = impl_from_IHTMLElement2(iface);
436 FIXME("(%p)->(%p)\n", This, p);
440 static HRESULT WINAPI HTMLElement2_put_ondragenter(IHTMLElement2 *iface, VARIANT v)
442 HTMLElement *This = impl_from_IHTMLElement2(iface);
443 FIXME("(%p)->()\n", This);
447 static HRESULT WINAPI HTMLElement2_get_ondragenter(IHTMLElement2 *iface, VARIANT *p)
449 HTMLElement *This = impl_from_IHTMLElement2(iface);
450 FIXME("(%p)->(%p)\n", This, p);
454 static HRESULT WINAPI HTMLElement2_put_ondragover(IHTMLElement2 *iface, VARIANT v)
456 HTMLElement *This = impl_from_IHTMLElement2(iface);
457 FIXME("(%p)->()\n", This);
461 static HRESULT WINAPI HTMLElement2_get_ondragover(IHTMLElement2 *iface, VARIANT *p)
463 HTMLElement *This = impl_from_IHTMLElement2(iface);
464 FIXME("(%p)->(%p)\n", This, p);
468 static HRESULT WINAPI HTMLElement2_put_ondragleave(IHTMLElement2 *iface, VARIANT v)
470 HTMLElement *This = impl_from_IHTMLElement2(iface);
471 FIXME("(%p)->()\n", This);
475 static HRESULT WINAPI HTMLElement2_get_ondragleave(IHTMLElement2 *iface, VARIANT *p)
477 HTMLElement *This = impl_from_IHTMLElement2(iface);
478 FIXME("(%p)->(%p)\n", This, p);
482 static HRESULT WINAPI HTMLElement2_put_ondrop(IHTMLElement2 *iface, VARIANT v)
484 HTMLElement *This = impl_from_IHTMLElement2(iface);
485 FIXME("(%p)->()\n", This);
489 static HRESULT WINAPI HTMLElement2_get_ondrop(IHTMLElement2 *iface, VARIANT *p)
491 HTMLElement *This = impl_from_IHTMLElement2(iface);
492 FIXME("(%p)->(%p)\n", This, p);
496 static HRESULT WINAPI HTMLElement2_put_onbeforecut(IHTMLElement2 *iface, VARIANT v)
498 HTMLElement *This = impl_from_IHTMLElement2(iface);
499 FIXME("(%p)->()\n", This);
503 static HRESULT WINAPI HTMLElement2_get_onbeforecut(IHTMLElement2 *iface, VARIANT *p)
505 HTMLElement *This = impl_from_IHTMLElement2(iface);
506 FIXME("(%p)->(%p)\n", This, p);
510 static HRESULT WINAPI HTMLElement2_put_oncut(IHTMLElement2 *iface, VARIANT v)
512 HTMLElement *This = impl_from_IHTMLElement2(iface);
513 FIXME("(%p)->()\n", This);
517 static HRESULT WINAPI HTMLElement2_get_oncut(IHTMLElement2 *iface, VARIANT *p)
519 HTMLElement *This = impl_from_IHTMLElement2(iface);
520 FIXME("(%p)->(%p)\n", This, p);
524 static HRESULT WINAPI HTMLElement2_put_onbeforecopy(IHTMLElement2 *iface, VARIANT v)
526 HTMLElement *This = impl_from_IHTMLElement2(iface);
527 FIXME("(%p)->()\n", This);
531 static HRESULT WINAPI HTMLElement2_get_onbeforecopy(IHTMLElement2 *iface, VARIANT *p)
533 HTMLElement *This = impl_from_IHTMLElement2(iface);
534 FIXME("(%p)->(%p)\n", This, p);
538 static HRESULT WINAPI HTMLElement2_put_oncopy(IHTMLElement2 *iface, VARIANT v)
540 HTMLElement *This = impl_from_IHTMLElement2(iface);
541 FIXME("(%p)->()\n", This);
545 static HRESULT WINAPI HTMLElement2_get_oncopy(IHTMLElement2 *iface, VARIANT *p)
547 HTMLElement *This = impl_from_IHTMLElement2(iface);
548 FIXME("(%p)->(%p)\n", This, p);
552 static HRESULT WINAPI HTMLElement2_put_onbeforepaste(IHTMLElement2 *iface, VARIANT v)
554 HTMLElement *This = impl_from_IHTMLElement2(iface);
555 FIXME("(%p)->()\n", This);
559 static HRESULT WINAPI HTMLElement2_get_onbeforepaste(IHTMLElement2 *iface, VARIANT *p)
561 HTMLElement *This = impl_from_IHTMLElement2(iface);
562 FIXME("(%p)->(%p)\n", This, p);
566 static HRESULT WINAPI HTMLElement2_put_onpaste(IHTMLElement2 *iface, VARIANT v)
568 HTMLElement *This = impl_from_IHTMLElement2(iface);
570 TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
572 return set_node_event(&This->node, EVENTID_PASTE, &v);
575 static HRESULT WINAPI HTMLElement2_get_onpaste(IHTMLElement2 *iface, VARIANT *p)
577 HTMLElement *This = impl_from_IHTMLElement2(iface);
579 TRACE("(%p)->(%p)\n", This, p);
581 return get_node_event(&This->node, EVENTID_PASTE, p);
584 static HRESULT WINAPI HTMLElement2_get_currentStyle(IHTMLElement2 *iface, IHTMLCurrentStyle **p)
586 HTMLElement *This = impl_from_IHTMLElement2(iface);
588 TRACE("(%p)->(%p)\n", This, p);
590 return HTMLCurrentStyle_Create(This, p);
593 static HRESULT WINAPI HTMLElement2_put_onpropertychange(IHTMLElement2 *iface, VARIANT v)
595 HTMLElement *This = impl_from_IHTMLElement2(iface);
596 FIXME("(%p)->()\n", This);
600 static HRESULT WINAPI HTMLElement2_get_onpropertychange(IHTMLElement2 *iface, VARIANT *p)
602 HTMLElement *This = impl_from_IHTMLElement2(iface);
603 FIXME("(%p)->(%p)\n", This, p);
607 static HRESULT WINAPI HTMLElement2_getClientRects(IHTMLElement2 *iface, IHTMLRectCollection **pRectCol)
609 HTMLElement *This = impl_from_IHTMLElement2(iface);
610 FIXME("(%p)->(%p)\n", This, pRectCol);
614 static HRESULT WINAPI HTMLElement2_getBoundingClientRect(IHTMLElement2 *iface, IHTMLRect **pRect)
616 HTMLElement *This = impl_from_IHTMLElement2(iface);
617 nsIDOMClientRect *nsrect;
621 TRACE("(%p)->(%p)\n", This, pRect);
623 nsres = nsIDOMHTMLElement_GetBoundingClientRect(This->nselem, &nsrect);
624 if(NS_FAILED(nsres) || !nsrect) {
625 ERR("GetBoindingClientRect failed: %08x\n", nsres);
629 hres = create_html_rect(nsrect, pRect);
631 nsIDOMClientRect_Release(nsrect);
635 static HRESULT WINAPI HTMLElement2_setExpression(IHTMLElement2 *iface, BSTR propname,
636 BSTR expression, BSTR language)
638 HTMLElement *This = impl_from_IHTMLElement2(iface);
639 FIXME("(%p)->(%s %s %s)\n", This, debugstr_w(propname), debugstr_w(expression),
640 debugstr_w(language));
644 static HRESULT WINAPI HTMLElement2_getExpression(IHTMLElement2 *iface, BSTR propname,
647 HTMLElement *This = impl_from_IHTMLElement2(iface);
648 FIXME("(%p)->(%s %p)\n", This, debugstr_w(propname), expression);
652 static HRESULT WINAPI HTMLElement2_removeExpression(IHTMLElement2 *iface, BSTR propname,
653 VARIANT_BOOL *pfSuccess)
655 HTMLElement *This = impl_from_IHTMLElement2(iface);
656 FIXME("(%p)->(%s %p)\n", This, debugstr_w(propname), pfSuccess);
660 static HRESULT WINAPI HTMLElement2_put_tabIndex(IHTMLElement2 *iface, short v)
662 HTMLElement *This = impl_from_IHTMLElement2(iface);
665 TRACE("(%p)->(%d)\n", This, v);
667 nsres = nsIDOMHTMLElement_SetTabIndex(This->nselem, v);
669 ERR("GetTabIndex failed: %08x\n", nsres);
674 static HRESULT WINAPI HTMLElement2_get_tabIndex(IHTMLElement2 *iface, short *p)
676 HTMLElement *This = impl_from_IHTMLElement2(iface);
680 TRACE("(%p)->(%p)\n", This, p);
682 nsres = nsIDOMHTMLElement_GetTabIndex(This->nselem, &index);
683 if(NS_FAILED(nsres)) {
684 ERR("GetTabIndex failed: %08x\n", nsres);
692 static HRESULT WINAPI HTMLElement2_focus(IHTMLElement2 *iface)
694 HTMLElement *This = impl_from_IHTMLElement2(iface);
697 TRACE("(%p)\n", This);
699 nsres = nsIDOMHTMLElement_Focus(This->nselem);
701 ERR("Focus failed: %08x\n", nsres);
706 static HRESULT WINAPI HTMLElement2_put_accessKey(IHTMLElement2 *iface, BSTR v)
708 HTMLElement *This = impl_from_IHTMLElement2(iface);
711 static WCHAR accessKeyW[] = {'a','c','c','e','s','s','K','e','y',0};
713 TRACE("(%p)->(%s)\n", This, debugstr_w(v));
715 V_VT(&var) = VT_BSTR;
717 return IHTMLElement_setAttribute(&This->IHTMLElement_iface, accessKeyW, var, 0);
720 static HRESULT WINAPI HTMLElement2_get_accessKey(IHTMLElement2 *iface, BSTR *p)
722 HTMLElement *This = impl_from_IHTMLElement2(iface);
723 FIXME("(%p)->(%p)\n", This, p);
727 static HRESULT WINAPI HTMLElement2_put_onblur(IHTMLElement2 *iface, VARIANT v)
729 HTMLElement *This = impl_from_IHTMLElement2(iface);
731 TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
733 return set_node_event(&This->node, EVENTID_BLUR, &v);
736 static HRESULT WINAPI HTMLElement2_get_onblur(IHTMLElement2 *iface, VARIANT *p)
738 HTMLElement *This = impl_from_IHTMLElement2(iface);
740 TRACE("(%p)->(%p)\n", This, p);
742 return get_node_event(&This->node, EVENTID_BLUR, p);
745 static HRESULT WINAPI HTMLElement2_put_onfocus(IHTMLElement2 *iface, VARIANT v)
747 HTMLElement *This = impl_from_IHTMLElement2(iface);
749 TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
751 return set_node_event(&This->node, EVENTID_FOCUS, &v);
754 static HRESULT WINAPI HTMLElement2_get_onfocus(IHTMLElement2 *iface, VARIANT *p)
756 HTMLElement *This = impl_from_IHTMLElement2(iface);
758 TRACE("(%p)->(%p)\n", This, p);
760 return get_node_event(&This->node, EVENTID_FOCUS, p);
763 static HRESULT WINAPI HTMLElement2_put_onresize(IHTMLElement2 *iface, VARIANT v)
765 HTMLElement *This = impl_from_IHTMLElement2(iface);
766 FIXME("(%p)->()\n", This);
770 static HRESULT WINAPI HTMLElement2_get_onresize(IHTMLElement2 *iface, VARIANT *p)
772 HTMLElement *This = impl_from_IHTMLElement2(iface);
773 FIXME("(%p)->(%p)\n", This, p);
777 static HRESULT WINAPI HTMLElement2_blur(IHTMLElement2 *iface)
779 HTMLElement *This = impl_from_IHTMLElement2(iface);
782 TRACE("(%p)\n", This);
784 nsres = nsIDOMHTMLElement_Blur(This->nselem);
785 if(NS_FAILED(nsres)) {
786 ERR("Blur failed: %08x\n", nsres);
793 static HRESULT WINAPI HTMLElement2_addFilter(IHTMLElement2 *iface, IUnknown *pUnk)
795 HTMLElement *This = impl_from_IHTMLElement2(iface);
796 FIXME("(%p)->(%p)\n", This, pUnk);
800 static HRESULT WINAPI HTMLElement2_removeFilter(IHTMLElement2 *iface, IUnknown *pUnk)
802 HTMLElement *This = impl_from_IHTMLElement2(iface);
803 FIXME("(%p)->(%p)\n", This, pUnk);
807 static HRESULT WINAPI HTMLElement2_get_clientHeight(IHTMLElement2 *iface, LONG *p)
809 HTMLElement *This = impl_from_IHTMLElement2(iface);
812 TRACE("(%p)->(%p)\n", This, p);
814 nsIDOMHTMLElement_GetClientHeight(This->nselem, &height);
820 static HRESULT WINAPI HTMLElement2_get_clientWidth(IHTMLElement2 *iface, LONG *p)
822 HTMLElement *This = impl_from_IHTMLElement2(iface);
825 TRACE("(%p)->(%p)\n", This, p);
827 nsIDOMHTMLElement_GetClientWidth(This->nselem, &width);
833 static HRESULT WINAPI HTMLElement2_get_clientTop(IHTMLElement2 *iface, LONG *p)
835 HTMLElement *This = impl_from_IHTMLElement2(iface);
836 PRInt32 client_top = 0;
839 TRACE("(%p)->(%p)\n", This, p);
841 nsres = nsIDOMHTMLElement_GetClientTop(This->nselem, &client_top);
843 ERR("GetScrollHeight failed: %08x\n", nsres);
846 TRACE("*p = %d\n", *p);
850 static HRESULT WINAPI HTMLElement2_get_clientLeft(IHTMLElement2 *iface, LONG *p)
852 HTMLElement *This = impl_from_IHTMLElement2(iface);
853 PRInt32 client_left = 0;
856 TRACE("(%p)->(%p)\n", This, p);
858 nsres = nsIDOMHTMLElement_GetClientLeft(This->nselem, &client_left);
860 ERR("GetScrollHeight failed: %08x\n", nsres);
863 TRACE("*p = %d\n", *p);
867 static HRESULT WINAPI HTMLElement2_attachEvent(IHTMLElement2 *iface, BSTR event,
868 IDispatch *pDisp, VARIANT_BOOL *pfResult)
870 HTMLElement *This = impl_from_IHTMLElement2(iface);
872 TRACE("(%p)->(%s %p %p)\n", This, debugstr_w(event), pDisp, pfResult);
874 return attach_event(get_node_event_target(&This->node), This->node.nsnode, &This->node.doc->basedoc, event, pDisp, pfResult);
877 static HRESULT WINAPI HTMLElement2_detachEvent(IHTMLElement2 *iface, BSTR event, IDispatch *pDisp)
879 HTMLElement *This = impl_from_IHTMLElement2(iface);
881 TRACE("(%p)->(%s %p)\n", This, debugstr_w(event), pDisp);
883 return detach_event(*get_node_event_target(&This->node), &This->node.doc->basedoc, event, pDisp);
886 static HRESULT WINAPI HTMLElement2_get_readyState(IHTMLElement2 *iface, VARIANT *p)
888 HTMLElement *This = impl_from_IHTMLElement2(iface);
891 TRACE("(%p)->(%p)\n", This, p);
893 if(This->node.vtbl->get_readystate) {
896 hres = This->node.vtbl->get_readystate(&This->node, &str);
900 static const WCHAR completeW[] = {'c','o','m','p','l','e','t','e',0};
902 str = SysAllocString(completeW);
904 return E_OUTOFMEMORY;
912 static HRESULT WINAPI HTMLElement2_put_onreadystatechange(IHTMLElement2 *iface, VARIANT v)
914 HTMLElement *This = impl_from_IHTMLElement2(iface);
916 TRACE("(%p)->(%s)\n", This, debugstr_variant(&v));
918 return set_node_event(&This->node, EVENTID_READYSTATECHANGE, &v);
921 static HRESULT WINAPI HTMLElement2_get_onreadystatechange(IHTMLElement2 *iface, VARIANT *p)
923 HTMLElement *This = impl_from_IHTMLElement2(iface);
925 TRACE("(%p)->(%p)\n", This, p);
927 return get_node_event(&This->node, EVENTID_READYSTATECHANGE, p);
930 static HRESULT WINAPI HTMLElement2_put_onrowsdelete(IHTMLElement2 *iface, VARIANT v)
932 HTMLElement *This = impl_from_IHTMLElement2(iface);
933 FIXME("(%p)->()\n", This);
937 static HRESULT WINAPI HTMLElement2_get_onrowsdelete(IHTMLElement2 *iface, VARIANT *p)
939 HTMLElement *This = impl_from_IHTMLElement2(iface);
940 FIXME("(%p)->(%p)\n", This, p);
944 static HRESULT WINAPI HTMLElement2_put_onrowsinserted(IHTMLElement2 *iface, VARIANT v)
946 HTMLElement *This = impl_from_IHTMLElement2(iface);
947 FIXME("(%p)->()\n", This);
951 static HRESULT WINAPI HTMLElement2_get_onrowsinserted(IHTMLElement2 *iface, VARIANT *p)
953 HTMLElement *This = impl_from_IHTMLElement2(iface);
954 FIXME("(%p)->(%p)\n", This, p);
958 static HRESULT WINAPI HTMLElement2_put_oncellchange(IHTMLElement2 *iface, VARIANT v)
960 HTMLElement *This = impl_from_IHTMLElement2(iface);
961 FIXME("(%p)->()\n", This);
965 static HRESULT WINAPI HTMLElement2_get_oncellchange(IHTMLElement2 *iface, VARIANT *p)
967 HTMLElement *This = impl_from_IHTMLElement2(iface);
968 FIXME("(%p)->(%p)\n", This, p);
972 static HRESULT WINAPI HTMLElement2_put_dir(IHTMLElement2 *iface, BSTR v)
974 HTMLElement *This = impl_from_IHTMLElement2(iface);
975 FIXME("(%p)->(%s)\n", This, debugstr_w(v));
979 static HRESULT WINAPI HTMLElement2_get_dir(IHTMLElement2 *iface, BSTR *p)
981 HTMLElement *This = impl_from_IHTMLElement2(iface);
985 TRACE("(%p)->(%p)\n", This, p);
992 nsres = nsIDOMHTMLElement_GetDir(This->nselem, &dir_str);
993 return return_nsstr(nsres, &dir_str, p);
996 static HRESULT WINAPI HTMLElement2_createControlRange(IHTMLElement2 *iface, IDispatch **range)
998 HTMLElement *This = impl_from_IHTMLElement2(iface);
999 FIXME("(%p)->(%p)\n", This, range);
1003 static HRESULT WINAPI HTMLElement2_get_scrollHeight(IHTMLElement2 *iface, LONG *p)
1005 HTMLElement *This = impl_from_IHTMLElement2(iface);
1009 TRACE("(%p)->(%p)\n", This, p);
1011 nsres = nsIDOMHTMLElement_GetScrollHeight(This->nselem, &height);
1012 if(NS_FAILED(nsres))
1013 ERR("GetScrollHeight failed: %08x\n", nsres);
1016 TRACE("*p = %d\n", *p);
1020 static HRESULT WINAPI HTMLElement2_get_scrollWidth(IHTMLElement2 *iface, LONG *p)
1022 HTMLElement *This = impl_from_IHTMLElement2(iface);
1026 TRACE("(%p)->(%p)\n", This, p);
1028 nsres = nsIDOMHTMLElement_GetScrollWidth(This->nselem, &width);
1029 if(NS_FAILED(nsres))
1030 ERR("GetScrollWidth failed: %08x\n", nsres);
1033 TRACE("*p = %d\n", *p);
1037 static HRESULT WINAPI HTMLElement2_put_scrollTop(IHTMLElement2 *iface, LONG v)
1039 HTMLElement *This = impl_from_IHTMLElement2(iface);
1041 TRACE("(%p)->(%d)\n", This, v);
1044 FIXME("NULL nselem\n");
1048 nsIDOMHTMLElement_SetScrollTop(This->nselem, v);
1052 static HRESULT WINAPI HTMLElement2_get_scrollTop(IHTMLElement2 *iface, LONG *p)
1054 HTMLElement *This = impl_from_IHTMLElement2(iface);
1058 TRACE("(%p)->(%p)\n", This, p);
1060 nsres = nsIDOMHTMLElement_GetScrollTop(This->nselem, &top);
1061 if(NS_FAILED(nsres))
1062 ERR("GetScrollTop failed: %08x\n", nsres);
1065 TRACE("*p = %d\n", *p);
1069 static HRESULT WINAPI HTMLElement2_put_scrollLeft(IHTMLElement2 *iface, LONG v)
1071 HTMLElement *This = impl_from_IHTMLElement2(iface);
1073 TRACE("(%p)->(%d)\n", This, v);
1076 FIXME("NULL nselem\n");
1080 nsIDOMHTMLElement_SetScrollLeft(This->nselem, v);
1084 static HRESULT WINAPI HTMLElement2_get_scrollLeft(IHTMLElement2 *iface, LONG *p)
1086 HTMLElement *This = impl_from_IHTMLElement2(iface);
1089 TRACE("(%p)->(%p)\n", This, p);
1092 return E_INVALIDARG;
1096 FIXME("NULL nselem\n");
1100 nsIDOMHTMLElement_GetScrollLeft(This->nselem, &left);
1103 TRACE("*p = %d\n", *p);
1107 static HRESULT WINAPI HTMLElement2_clearAttributes(IHTMLElement2 *iface)
1109 HTMLElement *This = impl_from_IHTMLElement2(iface);
1110 FIXME("(%p)\n", This);
1114 static HRESULT WINAPI HTMLElement2_mergeAttributes(IHTMLElement2 *iface, IHTMLElement *mergeThis)
1116 HTMLElement *This = impl_from_IHTMLElement2(iface);
1117 FIXME("(%p)->(%p)\n", This, mergeThis);
1121 static HRESULT WINAPI HTMLElement2_put_oncontextmenu(IHTMLElement2 *iface, VARIANT v)
1123 HTMLElement *This = impl_from_IHTMLElement2(iface);
1124 FIXME("(%p)->()\n", This);
1128 static HRESULT WINAPI HTMLElement2_get_oncontextmenu(IHTMLElement2 *iface, VARIANT *p)
1130 HTMLElement *This = impl_from_IHTMLElement2(iface);
1131 FIXME("(%p)->(%p)\n", This, p);
1135 static HRESULT WINAPI HTMLElement2_insertAdjecentElement(IHTMLElement2 *iface, BSTR where,
1136 IHTMLElement *insertedElement, IHTMLElement **inserted)
1138 HTMLElement *This = impl_from_IHTMLElement2(iface);
1139 FIXME("(%p)->(%s %p %p)\n", This, debugstr_w(where), insertedElement, inserted);
1143 static HRESULT WINAPI HTMLElement2_applyElement(IHTMLElement2 *iface, IHTMLElement *apply,
1144 BSTR where, IHTMLElement **applied)
1146 HTMLElement *This = impl_from_IHTMLElement2(iface);
1147 FIXME("(%p)->(%p %s %p)\n", This, apply, debugstr_w(where), applied);
1151 static HRESULT WINAPI HTMLElement2_getAdjecentText(IHTMLElement2 *iface, BSTR where, BSTR *text)
1153 HTMLElement *This = impl_from_IHTMLElement2(iface);
1154 FIXME("(%p)->(%s %p)\n", This, debugstr_w(where), text);
1158 static HRESULT WINAPI HTMLElement2_replaceAdjecentText(IHTMLElement2 *iface, BSTR where,
1159 BSTR newText, BSTR *oldText)
1161 HTMLElement *This = impl_from_IHTMLElement2(iface);
1162 FIXME("(%p)->(%s %s %p)\n", This, debugstr_w(where), debugstr_w(newText), oldText);
1166 static HRESULT WINAPI HTMLElement2_get_canHandleChildren(IHTMLElement2 *iface, VARIANT_BOOL *p)
1168 HTMLElement *This = impl_from_IHTMLElement2(iface);
1169 FIXME("(%p)->(%p)\n", This, p);
1173 static HRESULT WINAPI HTMLElement2_addBehavior(IHTMLElement2 *iface, BSTR bstrUrl,
1174 VARIANT *pvarFactory, LONG *pCookie)
1176 HTMLElement *This = impl_from_IHTMLElement2(iface);
1177 FIXME("(%p)->(%s %p %p)\n", This, debugstr_w(bstrUrl), pvarFactory, pCookie);
1181 static HRESULT WINAPI HTMLElement2_removeBehavior(IHTMLElement2 *iface, LONG cookie,
1182 VARIANT_BOOL *pfResult)
1184 HTMLElement *This = impl_from_IHTMLElement2(iface);
1185 FIXME("(%p)->(%d %p)\n", This, cookie, pfResult);
1189 static HRESULT WINAPI HTMLElement2_get_runtimeStyle(IHTMLElement2 *iface, IHTMLStyle **p)
1191 HTMLElement *This = impl_from_IHTMLElement2(iface);
1193 FIXME("(%p)->(%p): hack\n", This, p);
1195 /* We can't implement correct behavior on top of Gecko (although we could
1196 try a bit harder). Making runtimeStyle behave like regular style is
1197 enough for most use cases. */
1198 if(!This->runtime_style) {
1201 hres = HTMLStyle_Create(This, &This->runtime_style);
1206 *p = &This->runtime_style->IHTMLStyle_iface;
1207 IHTMLStyle_AddRef(*p);
1211 static HRESULT WINAPI HTMLElement2_get_behaviorUrns(IHTMLElement2 *iface, IDispatch **p)
1213 HTMLElement *This = impl_from_IHTMLElement2(iface);
1214 FIXME("(%p)->(%p)\n", This, p);
1218 static HRESULT WINAPI HTMLElement2_put_tagUrn(IHTMLElement2 *iface, BSTR v)
1220 HTMLElement *This = impl_from_IHTMLElement2(iface);
1221 FIXME("(%p)->(%s)\n", This, debugstr_w(v));
1225 static HRESULT WINAPI HTMLElement2_get_tagUrn(IHTMLElement2 *iface, BSTR *p)
1227 HTMLElement *This = impl_from_IHTMLElement2(iface);
1228 FIXME("(%p)->(%p)\n", This, p);
1232 static HRESULT WINAPI HTMLElement2_put_onbeforeeditfocus(IHTMLElement2 *iface, VARIANT vv)
1234 HTMLElement *This = impl_from_IHTMLElement2(iface);
1235 FIXME("(%p)->()\n", This);
1239 static HRESULT WINAPI HTMLElement2_get_onbeforeeditfocus(IHTMLElement2 *iface, VARIANT *p)
1241 HTMLElement *This = impl_from_IHTMLElement2(iface);
1242 FIXME("(%p)->(%p)\n", This, p);
1246 static HRESULT WINAPI HTMLElement2_get_readyStateValue(IHTMLElement2 *iface, LONG *p)
1248 HTMLElement *This = impl_from_IHTMLElement2(iface);
1249 FIXME("(%p)->(%p)\n", This, p);
1253 static HRESULT WINAPI HTMLElement2_getElementsByTagName(IHTMLElement2 *iface, BSTR v,
1254 IHTMLElementCollection **pelColl)
1256 HTMLElement *This = impl_from_IHTMLElement2(iface);
1257 nsIDOMNodeList *nslist;
1261 TRACE("(%p)->(%s %p)\n", This, debugstr_w(v), pelColl);
1263 nsAString_InitDepend(&tag_str, v);
1264 nsres = nsIDOMHTMLElement_GetElementsByTagName(This->nselem, &tag_str, &nslist);
1265 nsAString_Finish(&tag_str);
1266 if(NS_FAILED(nsres)) {
1267 ERR("GetElementByTagName failed: %08x\n", nsres);
1271 *pelColl = create_collection_from_nodelist(This->node.doc, nslist);
1272 nsIDOMNodeList_Release(nslist);
1276 static const IHTMLElement2Vtbl HTMLElement2Vtbl = {
1277 HTMLElement2_QueryInterface,
1278 HTMLElement2_AddRef,
1279 HTMLElement2_Release,
1280 HTMLElement2_GetTypeInfoCount,
1281 HTMLElement2_GetTypeInfo,
1282 HTMLElement2_GetIDsOfNames,
1283 HTMLElement2_Invoke,
1284 HTMLElement2_get_scopeName,
1285 HTMLElement2_setCapture,
1286 HTMLElement2_releaseCapture,
1287 HTMLElement2_put_onlosecapture,
1288 HTMLElement2_get_onlosecapture,
1289 HTMLElement2_componentFromPoint,
1290 HTMLElement2_doScroll,
1291 HTMLElement2_put_onscroll,
1292 HTMLElement2_get_onscroll,
1293 HTMLElement2_put_ondrag,
1294 HTMLElement2_get_ondrag,
1295 HTMLElement2_put_ondragend,
1296 HTMLElement2_get_ondragend,
1297 HTMLElement2_put_ondragenter,
1298 HTMLElement2_get_ondragenter,
1299 HTMLElement2_put_ondragover,
1300 HTMLElement2_get_ondragover,
1301 HTMLElement2_put_ondragleave,
1302 HTMLElement2_get_ondragleave,
1303 HTMLElement2_put_ondrop,
1304 HTMLElement2_get_ondrop,
1305 HTMLElement2_put_onbeforecut,
1306 HTMLElement2_get_onbeforecut,
1307 HTMLElement2_put_oncut,
1308 HTMLElement2_get_oncut,
1309 HTMLElement2_put_onbeforecopy,
1310 HTMLElement2_get_onbeforecopy,
1311 HTMLElement2_put_oncopy,
1312 HTMLElement2_get_oncopy,
1313 HTMLElement2_put_onbeforepaste,
1314 HTMLElement2_get_onbeforepaste,
1315 HTMLElement2_put_onpaste,
1316 HTMLElement2_get_onpaste,
1317 HTMLElement2_get_currentStyle,
1318 HTMLElement2_put_onpropertychange,
1319 HTMLElement2_get_onpropertychange,
1320 HTMLElement2_getClientRects,
1321 HTMLElement2_getBoundingClientRect,
1322 HTMLElement2_setExpression,
1323 HTMLElement2_getExpression,
1324 HTMLElement2_removeExpression,
1325 HTMLElement2_put_tabIndex,
1326 HTMLElement2_get_tabIndex,
1328 HTMLElement2_put_accessKey,
1329 HTMLElement2_get_accessKey,
1330 HTMLElement2_put_onblur,
1331 HTMLElement2_get_onblur,
1332 HTMLElement2_put_onfocus,
1333 HTMLElement2_get_onfocus,
1334 HTMLElement2_put_onresize,
1335 HTMLElement2_get_onresize,
1337 HTMLElement2_addFilter,
1338 HTMLElement2_removeFilter,
1339 HTMLElement2_get_clientHeight,
1340 HTMLElement2_get_clientWidth,
1341 HTMLElement2_get_clientTop,
1342 HTMLElement2_get_clientLeft,
1343 HTMLElement2_attachEvent,
1344 HTMLElement2_detachEvent,
1345 HTMLElement2_get_readyState,
1346 HTMLElement2_put_onreadystatechange,
1347 HTMLElement2_get_onreadystatechange,
1348 HTMLElement2_put_onrowsdelete,
1349 HTMLElement2_get_onrowsdelete,
1350 HTMLElement2_put_onrowsinserted,
1351 HTMLElement2_get_onrowsinserted,
1352 HTMLElement2_put_oncellchange,
1353 HTMLElement2_get_oncellchange,
1354 HTMLElement2_put_dir,
1355 HTMLElement2_get_dir,
1356 HTMLElement2_createControlRange,
1357 HTMLElement2_get_scrollHeight,
1358 HTMLElement2_get_scrollWidth,
1359 HTMLElement2_put_scrollTop,
1360 HTMLElement2_get_scrollTop,
1361 HTMLElement2_put_scrollLeft,
1362 HTMLElement2_get_scrollLeft,
1363 HTMLElement2_clearAttributes,
1364 HTMLElement2_mergeAttributes,
1365 HTMLElement2_put_oncontextmenu,
1366 HTMLElement2_get_oncontextmenu,
1367 HTMLElement2_insertAdjecentElement,
1368 HTMLElement2_applyElement,
1369 HTMLElement2_getAdjecentText,
1370 HTMLElement2_replaceAdjecentText,
1371 HTMLElement2_get_canHandleChildren,
1372 HTMLElement2_addBehavior,
1373 HTMLElement2_removeBehavior,
1374 HTMLElement2_get_runtimeStyle,
1375 HTMLElement2_get_behaviorUrns,
1376 HTMLElement2_put_tagUrn,
1377 HTMLElement2_get_tagUrn,
1378 HTMLElement2_put_onbeforeeditfocus,
1379 HTMLElement2_get_onbeforeeditfocus,
1380 HTMLElement2_get_readyStateValue,
1381 HTMLElement2_getElementsByTagName,
1384 void HTMLElement2_Init(HTMLElement *This)
1386 This->IHTMLElement2_iface.lpVtbl = &HTMLElement2Vtbl;