gdi32: Return the full DIB height in GetImage instead of clipping to the visible...
[wine.git] / dlls / mshtml / htmlelem2.c
blob2877a781f294b5f64ab250392d78451276c774ee
1 /*
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
19 #include <stdarg.h>
20 #include <math.h>
22 #define COBJMACROS
24 #include "windef.h"
25 #include "winbase.h"
26 #include "winuser.h"
27 #include "ole2.h"
29 #include "wine/debug.h"
31 #include "mshtml_private.h"
32 #include "htmlevent.h"
33 #include "htmlstyle.h"
35 WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
37 typedef struct {
38 DispatchEx dispex;
39 IHTMLRect IHTMLRect_iface;
41 LONG ref;
43 nsIDOMClientRect *nsrect;
44 } HTMLRect;
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;
63 }else {
64 FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
65 *ppv = NULL;
66 return E_NOINTERFACE;
69 IUnknown_AddRef((IUnknown*)*ppv);
70 return S_OK;
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);
80 return 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);
90 if(!ref) {
91 if(This->nsrect)
92 nsIDOMClientRect_Release(This->nsrect);
93 heap_free(This);
96 return ref;
99 static HRESULT WINAPI HTMLRect_GetTypeInfoCount(IHTMLRect *iface, UINT *pctinfo)
101 HTMLRect *This = impl_from_IHTMLRect(iface);
102 FIXME("(%p)->(%p)\n", This, pctinfo);
103 return E_NOTIMPL;
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,
120 lcid, rgDispId);
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);
137 return E_NOTIMPL;
140 static HRESULT WINAPI HTMLRect_get_left(IHTMLRect *iface, LONG *p)
142 HTMLRect *This = impl_from_IHTMLRect(iface);
143 float left;
144 nsresult nsres;
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);
151 return E_FAIL;
154 *p = floor(left+0.5);
155 return S_OK;
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);
162 return E_NOTIMPL;
165 static HRESULT WINAPI HTMLRect_get_top(IHTMLRect *iface, LONG *p)
167 HTMLRect *This = impl_from_IHTMLRect(iface);
168 float top;
169 nsresult nsres;
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);
176 return E_FAIL;
179 *p = floor(top+0.5);
180 return S_OK;
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);
187 return E_NOTIMPL;
190 static HRESULT WINAPI HTMLRect_get_right(IHTMLRect *iface, LONG *p)
192 HTMLRect *This = impl_from_IHTMLRect(iface);
193 float right;
194 nsresult nsres;
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);
201 return E_FAIL;
204 *p = floor(right+0.5);
205 return S_OK;
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);
212 return E_NOTIMPL;
215 static HRESULT WINAPI HTMLRect_get_bottom(IHTMLRect *iface, LONG *p)
217 HTMLRect *This = impl_from_IHTMLRect(iface);
218 float bottom;
219 nsresult nsres;
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);
226 return E_FAIL;
229 *p = floor(bottom+0.5);
230 return S_OK;
233 static const IHTMLRectVtbl HTMLRectVtbl = {
234 HTMLRect_QueryInterface,
235 HTMLRect_AddRef,
236 HTMLRect_Release,
237 HTMLRect_GetTypeInfoCount,
238 HTMLRect_GetTypeInfo,
239 HTMLRect_GetIDsOfNames,
240 HTMLRect_Invoke,
241 HTMLRect_put_left,
242 HTMLRect_get_left,
243 HTMLRect_put_top,
244 HTMLRect_get_top,
245 HTMLRect_put_right,
246 HTMLRect_get_right,
247 HTMLRect_put_bottom,
248 HTMLRect_get_bottom
251 static const tid_t HTMLRect_iface_tids[] = {
252 IHTMLRect_tid,
255 static dispex_static_data_t HTMLRect_dispex = {
256 NULL,
257 IHTMLRect_tid,
258 NULL,
259 HTMLRect_iface_tids
262 static HRESULT create_html_rect(nsIDOMClientRect *nsrect, IHTMLRect **ret)
264 HTMLRect *rect;
266 rect = heap_alloc_zero(sizeof(HTMLRect));
267 if(!rect)
268 return E_OUTOFMEMORY;
270 rect->IHTMLRect_iface.lpVtbl = &HTMLRectVtbl;
271 rect->ref = 1;
273 init_dispex(&rect->dispex, (IUnknown*)&rect->IHTMLRect_iface, &HTMLRect_dispex);
275 nsIDOMClientRect_AddRef(nsrect);
276 rect->nsrect = nsrect;
278 *ret = &rect->IHTMLRect_iface;
279 return S_OK;
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,
325 lcid, rgDispId);
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);
341 return E_NOTIMPL;
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);
348 return E_NOTIMPL;
351 static HRESULT WINAPI HTMLElement2_releaseCapture(IHTMLElement2 *iface)
353 HTMLElement *This = impl_from_IHTMLElement2(iface);
354 FIXME("(%p)\n", This);
355 return E_NOTIMPL;
358 static HRESULT WINAPI HTMLElement2_put_onlosecapture(IHTMLElement2 *iface, VARIANT v)
360 HTMLElement *This = impl_from_IHTMLElement2(iface);
361 FIXME("(%p)->()\n", This);
362 return E_NOTIMPL;
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);
369 return E_NOTIMPL;
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);
377 return E_NOTIMPL;
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)
388 return E_PENDING;
390 WARN("stub\n");
391 return S_OK;
394 static HRESULT WINAPI HTMLElement2_put_onscroll(IHTMLElement2 *iface, VARIANT v)
396 HTMLElement *This = impl_from_IHTMLElement2(iface);
397 FIXME("(%p)->()\n", This);
398 return E_NOTIMPL;
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);
405 return E_NOTIMPL;
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);
430 return E_NOTIMPL;
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);
437 return E_NOTIMPL;
440 static HRESULT WINAPI HTMLElement2_put_ondragenter(IHTMLElement2 *iface, VARIANT v)
442 HTMLElement *This = impl_from_IHTMLElement2(iface);
443 FIXME("(%p)->()\n", This);
444 return E_NOTIMPL;
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);
451 return E_NOTIMPL;
454 static HRESULT WINAPI HTMLElement2_put_ondragover(IHTMLElement2 *iface, VARIANT v)
456 HTMLElement *This = impl_from_IHTMLElement2(iface);
457 FIXME("(%p)->()\n", This);
458 return E_NOTIMPL;
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);
465 return E_NOTIMPL;
468 static HRESULT WINAPI HTMLElement2_put_ondragleave(IHTMLElement2 *iface, VARIANT v)
470 HTMLElement *This = impl_from_IHTMLElement2(iface);
471 FIXME("(%p)->()\n", This);
472 return E_NOTIMPL;
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);
479 return E_NOTIMPL;
482 static HRESULT WINAPI HTMLElement2_put_ondrop(IHTMLElement2 *iface, VARIANT v)
484 HTMLElement *This = impl_from_IHTMLElement2(iface);
485 FIXME("(%p)->()\n", This);
486 return E_NOTIMPL;
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);
493 return E_NOTIMPL;
496 static HRESULT WINAPI HTMLElement2_put_onbeforecut(IHTMLElement2 *iface, VARIANT v)
498 HTMLElement *This = impl_from_IHTMLElement2(iface);
499 FIXME("(%p)->()\n", This);
500 return E_NOTIMPL;
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);
507 return E_NOTIMPL;
510 static HRESULT WINAPI HTMLElement2_put_oncut(IHTMLElement2 *iface, VARIANT v)
512 HTMLElement *This = impl_from_IHTMLElement2(iface);
513 FIXME("(%p)->()\n", This);
514 return E_NOTIMPL;
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);
521 return E_NOTIMPL;
524 static HRESULT WINAPI HTMLElement2_put_onbeforecopy(IHTMLElement2 *iface, VARIANT v)
526 HTMLElement *This = impl_from_IHTMLElement2(iface);
527 FIXME("(%p)->()\n", This);
528 return E_NOTIMPL;
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);
535 return E_NOTIMPL;
538 static HRESULT WINAPI HTMLElement2_put_oncopy(IHTMLElement2 *iface, VARIANT v)
540 HTMLElement *This = impl_from_IHTMLElement2(iface);
541 FIXME("(%p)->()\n", This);
542 return E_NOTIMPL;
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);
549 return E_NOTIMPL;
552 static HRESULT WINAPI HTMLElement2_put_onbeforepaste(IHTMLElement2 *iface, VARIANT v)
554 HTMLElement *This = impl_from_IHTMLElement2(iface);
555 FIXME("(%p)->()\n", This);
556 return E_NOTIMPL;
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);
563 return E_NOTIMPL;
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);
597 return E_NOTIMPL;
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);
604 return E_NOTIMPL;
607 static HRESULT WINAPI HTMLElement2_getClientRects(IHTMLElement2 *iface, IHTMLRectCollection **pRectCol)
609 HTMLElement *This = impl_from_IHTMLElement2(iface);
610 FIXME("(%p)->(%p)\n", This, pRectCol);
611 return E_NOTIMPL;
614 static HRESULT WINAPI HTMLElement2_getBoundingClientRect(IHTMLElement2 *iface, IHTMLRect **pRect)
616 HTMLElement *This = impl_from_IHTMLElement2(iface);
617 nsIDOMClientRect *nsrect;
618 nsresult nsres;
619 HRESULT hres;
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);
626 return E_FAIL;
629 hres = create_html_rect(nsrect, pRect);
631 nsIDOMClientRect_Release(nsrect);
632 return hres;
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));
641 return E_NOTIMPL;
644 static HRESULT WINAPI HTMLElement2_getExpression(IHTMLElement2 *iface, BSTR propname,
645 VARIANT *expression)
647 HTMLElement *This = impl_from_IHTMLElement2(iface);
648 FIXME("(%p)->(%s %p)\n", This, debugstr_w(propname), expression);
649 return E_NOTIMPL;
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);
657 return E_NOTIMPL;
660 static HRESULT WINAPI HTMLElement2_put_tabIndex(IHTMLElement2 *iface, short v)
662 HTMLElement *This = impl_from_IHTMLElement2(iface);
663 nsresult nsres;
665 TRACE("(%p)->(%d)\n", This, v);
667 nsres = nsIDOMHTMLElement_SetTabIndex(This->nselem, v);
668 if(NS_FAILED(nsres))
669 ERR("GetTabIndex failed: %08x\n", nsres);
671 return S_OK;
674 static HRESULT WINAPI HTMLElement2_get_tabIndex(IHTMLElement2 *iface, short *p)
676 HTMLElement *This = impl_from_IHTMLElement2(iface);
677 PRInt32 index = 0;
678 nsresult nsres;
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);
685 return E_FAIL;
688 *p = index;
689 return S_OK;
692 static HRESULT WINAPI HTMLElement2_focus(IHTMLElement2 *iface)
694 HTMLElement *This = impl_from_IHTMLElement2(iface);
695 nsresult nsres;
697 TRACE("(%p)\n", This);
699 nsres = nsIDOMHTMLElement_Focus(This->nselem);
700 if(NS_FAILED(nsres))
701 ERR("Focus failed: %08x\n", nsres);
703 return S_OK;
706 static HRESULT WINAPI HTMLElement2_put_accessKey(IHTMLElement2 *iface, BSTR v)
708 HTMLElement *This = impl_from_IHTMLElement2(iface);
709 VARIANT var;
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;
716 V_BSTR(&var) = v;
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);
724 return E_NOTIMPL;
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);
767 return E_NOTIMPL;
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);
774 return E_NOTIMPL;
777 static HRESULT WINAPI HTMLElement2_blur(IHTMLElement2 *iface)
779 HTMLElement *This = impl_from_IHTMLElement2(iface);
780 nsresult nsres;
782 TRACE("(%p)\n", This);
784 nsres = nsIDOMHTMLElement_Blur(This->nselem);
785 if(NS_FAILED(nsres)) {
786 ERR("Blur failed: %08x\n", nsres);
787 return E_FAIL;
790 return S_OK;
793 static HRESULT WINAPI HTMLElement2_addFilter(IHTMLElement2 *iface, IUnknown *pUnk)
795 HTMLElement *This = impl_from_IHTMLElement2(iface);
796 FIXME("(%p)->(%p)\n", This, pUnk);
797 return E_NOTIMPL;
800 static HRESULT WINAPI HTMLElement2_removeFilter(IHTMLElement2 *iface, IUnknown *pUnk)
802 HTMLElement *This = impl_from_IHTMLElement2(iface);
803 FIXME("(%p)->(%p)\n", This, pUnk);
804 return E_NOTIMPL;
807 static HRESULT WINAPI HTMLElement2_get_clientHeight(IHTMLElement2 *iface, LONG *p)
809 HTMLElement *This = impl_from_IHTMLElement2(iface);
810 PRInt32 height=0;
812 TRACE("(%p)->(%p)\n", This, p);
814 nsIDOMHTMLElement_GetClientHeight(This->nselem, &height);
816 *p = height;
817 return S_OK;
820 static HRESULT WINAPI HTMLElement2_get_clientWidth(IHTMLElement2 *iface, LONG *p)
822 HTMLElement *This = impl_from_IHTMLElement2(iface);
823 PRInt32 width=0;
825 TRACE("(%p)->(%p)\n", This, p);
827 nsIDOMHTMLElement_GetClientWidth(This->nselem, &width);
829 *p = width;
830 return S_OK;
833 static HRESULT WINAPI HTMLElement2_get_clientTop(IHTMLElement2 *iface, LONG *p)
835 HTMLElement *This = impl_from_IHTMLElement2(iface);
836 PRInt32 client_top = 0;
837 nsresult nsres;
839 TRACE("(%p)->(%p)\n", This, p);
841 nsres = nsIDOMHTMLElement_GetClientTop(This->nselem, &client_top);
842 if(NS_FAILED(nsres))
843 ERR("GetScrollHeight failed: %08x\n", nsres);
845 *p = client_top;
846 TRACE("*p = %d\n", *p);
847 return S_OK;
850 static HRESULT WINAPI HTMLElement2_get_clientLeft(IHTMLElement2 *iface, LONG *p)
852 HTMLElement *This = impl_from_IHTMLElement2(iface);
853 PRInt32 client_left = 0;
854 nsresult nsres;
856 TRACE("(%p)->(%p)\n", This, p);
858 nsres = nsIDOMHTMLElement_GetClientLeft(This->nselem, &client_left);
859 if(NS_FAILED(nsres))
860 ERR("GetScrollHeight failed: %08x\n", nsres);
862 *p = client_left;
863 TRACE("*p = %d\n", *p);
864 return S_OK;
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);
889 BSTR str;
891 TRACE("(%p)->(%p)\n", This, p);
893 if(This->node.vtbl->get_readystate) {
894 HRESULT hres;
896 hres = This->node.vtbl->get_readystate(&This->node, &str);
897 if(FAILED(hres))
898 return hres;
899 }else {
900 static const WCHAR completeW[] = {'c','o','m','p','l','e','t','e',0};
902 str = SysAllocString(completeW);
903 if(!str)
904 return E_OUTOFMEMORY;
907 V_VT(p) = VT_BSTR;
908 V_BSTR(p) = str;
909 return S_OK;
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);
934 return E_NOTIMPL;
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);
941 return E_NOTIMPL;
944 static HRESULT WINAPI HTMLElement2_put_onrowsinserted(IHTMLElement2 *iface, VARIANT v)
946 HTMLElement *This = impl_from_IHTMLElement2(iface);
947 FIXME("(%p)->()\n", This);
948 return E_NOTIMPL;
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);
955 return E_NOTIMPL;
958 static HRESULT WINAPI HTMLElement2_put_oncellchange(IHTMLElement2 *iface, VARIANT v)
960 HTMLElement *This = impl_from_IHTMLElement2(iface);
961 FIXME("(%p)->()\n", This);
962 return E_NOTIMPL;
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);
969 return E_NOTIMPL;
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));
976 return E_NOTIMPL;
979 static HRESULT WINAPI HTMLElement2_get_dir(IHTMLElement2 *iface, BSTR *p)
981 HTMLElement *This = impl_from_IHTMLElement2(iface);
982 nsAString dir_str;
983 nsresult nsres;
985 TRACE("(%p)->(%p)\n", This, p);
987 if(!This->nselem) {
988 *p = NULL;
989 return S_OK;
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);
1000 return E_NOTIMPL;
1003 static HRESULT WINAPI HTMLElement2_get_scrollHeight(IHTMLElement2 *iface, LONG *p)
1005 HTMLElement *This = impl_from_IHTMLElement2(iface);
1006 PRInt32 height = 0;
1007 nsresult nsres;
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);
1015 *p = height;
1016 TRACE("*p = %d\n", *p);
1017 return S_OK;
1020 static HRESULT WINAPI HTMLElement2_get_scrollWidth(IHTMLElement2 *iface, LONG *p)
1022 HTMLElement *This = impl_from_IHTMLElement2(iface);
1023 PRInt32 width = 0;
1024 nsresult nsres;
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);
1032 *p = width;
1033 TRACE("*p = %d\n", *p);
1034 return S_OK;
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);
1043 if(!This->nselem) {
1044 FIXME("NULL nselem\n");
1045 return E_NOTIMPL;
1048 nsIDOMHTMLElement_SetScrollTop(This->nselem, v);
1049 return S_OK;
1052 static HRESULT WINAPI HTMLElement2_get_scrollTop(IHTMLElement2 *iface, LONG *p)
1054 HTMLElement *This = impl_from_IHTMLElement2(iface);
1055 PRInt32 top = 0;
1056 nsresult nsres;
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);
1064 *p = top;
1065 TRACE("*p = %d\n", *p);
1066 return S_OK;
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);
1075 if(!This->nselem) {
1076 FIXME("NULL nselem\n");
1077 return E_NOTIMPL;
1080 nsIDOMHTMLElement_SetScrollLeft(This->nselem, v);
1081 return S_OK;
1084 static HRESULT WINAPI HTMLElement2_get_scrollLeft(IHTMLElement2 *iface, LONG *p)
1086 HTMLElement *This = impl_from_IHTMLElement2(iface);
1087 PRInt32 left = 0;
1089 TRACE("(%p)->(%p)\n", This, p);
1091 if(!p)
1092 return E_INVALIDARG;
1094 if(!This->nselem)
1096 FIXME("NULL nselem\n");
1097 return E_NOTIMPL;
1100 nsIDOMHTMLElement_GetScrollLeft(This->nselem, &left);
1102 *p = left;
1103 TRACE("*p = %d\n", *p);
1104 return S_OK;
1107 static HRESULT WINAPI HTMLElement2_clearAttributes(IHTMLElement2 *iface)
1109 HTMLElement *This = impl_from_IHTMLElement2(iface);
1110 FIXME("(%p)\n", This);
1111 return E_NOTIMPL;
1114 static HRESULT WINAPI HTMLElement2_mergeAttributes(IHTMLElement2 *iface, IHTMLElement *mergeThis)
1116 HTMLElement *This = impl_from_IHTMLElement2(iface);
1117 FIXME("(%p)->(%p)\n", This, mergeThis);
1118 return E_NOTIMPL;
1121 static HRESULT WINAPI HTMLElement2_put_oncontextmenu(IHTMLElement2 *iface, VARIANT v)
1123 HTMLElement *This = impl_from_IHTMLElement2(iface);
1124 FIXME("(%p)->()\n", This);
1125 return E_NOTIMPL;
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);
1132 return E_NOTIMPL;
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);
1140 return E_NOTIMPL;
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);
1148 return E_NOTIMPL;
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);
1155 return E_NOTIMPL;
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);
1163 return E_NOTIMPL;
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);
1170 return E_NOTIMPL;
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);
1178 return E_NOTIMPL;
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);
1186 return E_NOTIMPL;
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) {
1199 HRESULT hres;
1201 hres = HTMLStyle_Create(This, &This->runtime_style);
1202 if(FAILED(hres))
1203 return hres;
1206 *p = &This->runtime_style->IHTMLStyle_iface;
1207 IHTMLStyle_AddRef(*p);
1208 return S_OK;
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);
1215 return E_NOTIMPL;
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));
1222 return E_NOTIMPL;
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);
1229 return E_NOTIMPL;
1232 static HRESULT WINAPI HTMLElement2_put_onbeforeeditfocus(IHTMLElement2 *iface, VARIANT vv)
1234 HTMLElement *This = impl_from_IHTMLElement2(iface);
1235 FIXME("(%p)->()\n", This);
1236 return E_NOTIMPL;
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);
1243 return E_NOTIMPL;
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);
1250 return E_NOTIMPL;
1253 static HRESULT WINAPI HTMLElement2_getElementsByTagName(IHTMLElement2 *iface, BSTR v,
1254 IHTMLElementCollection **pelColl)
1256 HTMLElement *This = impl_from_IHTMLElement2(iface);
1257 nsIDOMNodeList *nslist;
1258 nsAString tag_str;
1259 nsresult nsres;
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);
1268 return E_FAIL;
1271 *pelColl = create_collection_from_nodelist(This->node.doc, nslist);
1272 nsIDOMNodeList_Release(nslist);
1273 return S_OK;
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,
1327 HTMLElement2_focus,
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,
1336 HTMLElement2_blur,
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;