riched20: Use ME_PointFromChar to calculate the caret position.
[wine] / dlls / ieframe / iehtmlwnd.c
1 /*
2  * Copyright 2012 Jacek Caban for CodeWeavers
3  *
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.
8  *
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.
13  *
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
17  */
18
19 #include "ieframe.h"
20
21 #include "wine/debug.h"
22
23 WINE_DEFAULT_DEBUG_CHANNEL(ieframe);
24
25 static inline IEHTMLWindow *impl_from_IHTMLWindow2(IHTMLWindow2 *iface)
26 {
27     return CONTAINING_RECORD(iface, IEHTMLWindow, IHTMLWindow2_iface);
28 }
29
30 static HRESULT WINAPI IEHTMLWindow2_QueryInterface(IHTMLWindow2 *iface, REFIID riid, void **ppv)
31 {
32     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
33
34     if(IsEqualGUID(&IID_IUnknown, riid)) {
35         TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
36         *ppv = &This->IHTMLWindow2_iface;
37     }else if(IsEqualGUID(&IID_IDispatch, riid)) {
38         TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
39         *ppv = &This->IHTMLWindow2_iface;
40     }else if(IsEqualGUID(&IID_IHTMLFramesCollection2, riid)) {
41         TRACE("(%p)->(IID_IHTMLFramesCollection2 %p)\n", This, ppv);
42         *ppv = &This->IHTMLWindow2_iface;
43     }else if(IsEqualGUID(&IID_IHTMLWindow2, riid)) {
44         TRACE("(%p)->(IID_IHTMLWindow2 %p)\n", This, ppv);
45         *ppv = &This->IHTMLWindow2_iface;
46     }else {
47         WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
48         *ppv = NULL;
49         return E_NOINTERFACE;
50     }
51
52     IUnknown_AddRef((IUnknown*)*ppv);
53     return S_OK;
54 }
55
56 static ULONG WINAPI IEHTMLWindow2_AddRef(IHTMLWindow2 *iface)
57 {
58     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
59
60     TRACE("(%p)\n", This);
61
62     return IOleClientSite_AddRef(&This->doc_host->IOleClientSite_iface);
63 }
64
65 static ULONG WINAPI IEHTMLWindow2_Release(IHTMLWindow2 *iface)
66 {
67     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
68
69     TRACE("(%p)\n", This);
70
71     return IOleClientSite_Release(&This->doc_host->IOleClientSite_iface);
72 }
73
74 static HRESULT WINAPI IEHTMLWindow2_GetTypeInfoCount(IHTMLWindow2 *iface, UINT *pctinfo)
75 {
76     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
77     FIXME("(%p)->()\n", This);
78     return E_NOTIMPL;
79 }
80
81 static HRESULT WINAPI IEHTMLWindow2_GetTypeInfo(IHTMLWindow2 *iface, UINT iTInfo,
82                                               LCID lcid, ITypeInfo **ppTInfo)
83 {
84     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
85     FIXME("(%p)->()\n", This);
86     return E_NOTIMPL;
87 }
88
89 static HRESULT WINAPI IEHTMLWindow2_GetIDsOfNames(IHTMLWindow2 *iface, REFIID riid,
90                                                 LPOLESTR *rgszNames, UINT cNames,
91                                                 LCID lcid, DISPID *rgDispId)
92 {
93     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
94     FIXME("(%p)->()\n", This);
95     return E_NOTIMPL;
96 }
97
98 static HRESULT WINAPI IEHTMLWindow2_Invoke(IHTMLWindow2 *iface, DISPID dispIdMember,
99                             REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
100                             VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
101 {
102     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
103     FIXME("(%p)->()\n", This);
104     return E_NOTIMPL;
105 }
106
107 static HRESULT WINAPI IEHTMLWindow2_item(IHTMLWindow2 *iface, VARIANT *pvarIndex, VARIANT *pvarResult)
108 {
109     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
110     FIXME("(%p)->(%p %p)\n", This, pvarIndex, pvarResult);
111     return E_NOTIMPL;
112 }
113
114 static HRESULT WINAPI IEHTMLWindow2_get_length(IHTMLWindow2 *iface, LONG *p)
115 {
116     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
117     FIXME("(%p)->(%p)\n", This, p);
118     return E_NOTIMPL;
119 }
120
121 static HRESULT WINAPI IEHTMLWindow2_get_frames(IHTMLWindow2 *iface, IHTMLFramesCollection2 **p)
122 {
123     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
124     FIXME("(%p)->(%p)\n", This, p);
125     return E_NOTIMPL;
126 }
127
128 static HRESULT WINAPI IEHTMLWindow2_put_defaultStatus(IHTMLWindow2 *iface, BSTR v)
129 {
130     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
131     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
132     return E_NOTIMPL;
133 }
134
135 static HRESULT WINAPI IEHTMLWindow2_get_defaultStatus(IHTMLWindow2 *iface, BSTR *p)
136 {
137     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
138     FIXME("(%p)->(%p)\n", This, p);
139     return E_NOTIMPL;
140 }
141
142 static HRESULT WINAPI IEHTMLWindow2_put_status(IHTMLWindow2 *iface, BSTR v)
143 {
144     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
145     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
146     return E_NOTIMPL;
147 }
148
149 static HRESULT WINAPI IEHTMLWindow2_get_status(IHTMLWindow2 *iface, BSTR *p)
150 {
151     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
152     FIXME("(%p)->(%p)\n", This, p);
153     return E_NOTIMPL;
154 }
155
156 static HRESULT WINAPI IEHTMLWindow2_setTimeout(IHTMLWindow2 *iface, BSTR expression,
157         LONG msec, VARIANT *language, LONG *timerID)
158 {
159     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
160     FIXME("(%p)->(%s %d %p %p)\n", This, debugstr_w(expression), msec, language, timerID);
161     return E_NOTIMPL;
162 }
163
164 static HRESULT WINAPI IEHTMLWindow2_clearTimeout(IHTMLWindow2 *iface, LONG timerID)
165 {
166     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
167     FIXME("(%p)->(%d)\n", This, timerID);
168     return E_NOTIMPL;
169 }
170
171 static HRESULT WINAPI IEHTMLWindow2_alert(IHTMLWindow2 *iface, BSTR message)
172 {
173     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
174     FIXME("(%p)->(%s)\n", This, debugstr_w(message));
175     return E_NOTIMPL;
176 }
177
178 static HRESULT WINAPI IEHTMLWindow2_confirm(IHTMLWindow2 *iface, BSTR message,
179         VARIANT_BOOL *confirmed)
180 {
181     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
182     FIXME("(%p)->(%s %p)\n", This, debugstr_w(message), confirmed);
183     return E_NOTIMPL;
184 }
185
186 static HRESULT WINAPI IEHTMLWindow2_prompt(IHTMLWindow2 *iface, BSTR message,
187         BSTR dststr, VARIANT *textdata)
188 {
189     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
190     FIXME("(%p)->(%s %s %p)\n", This, debugstr_w(message), debugstr_w(dststr), textdata);
191     return E_NOTIMPL;
192 }
193
194 static HRESULT WINAPI IEHTMLWindow2_get_Image(IHTMLWindow2 *iface, IHTMLImageElementFactory **p)
195 {
196     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
197     FIXME("(%p)->(%p)\n", This, p);
198     return E_NOTIMPL;
199 }
200
201 static HRESULT WINAPI IEHTMLWindow2_get_location(IHTMLWindow2 *iface, IHTMLLocation **p)
202 {
203     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
204     FIXME("(%p)->(%p)\n", This, p);
205     return E_NOTIMPL;
206 }
207
208 static HRESULT WINAPI IEHTMLWindow2_get_history(IHTMLWindow2 *iface, IOmHistory **p)
209 {
210     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
211     FIXME("(%p)->(%p)\n", This, p);
212     return E_NOTIMPL;
213 }
214
215 static HRESULT WINAPI IEHTMLWindow2_close(IHTMLWindow2 *iface)
216 {
217     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
218
219     FIXME("(%p) semi-stub\n", This);
220
221     if(!This->doc_host->wb)
222         return E_UNEXPECTED;
223
224     return IWebBrowser2_put_Visible(This->doc_host->wb, VARIANT_FALSE);
225 }
226
227 static HRESULT WINAPI IEHTMLWindow2_put_opener(IHTMLWindow2 *iface, VARIANT v)
228 {
229     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
230     FIXME("(%p)->(v(%d))\n", This, V_VT(&v));
231     return E_NOTIMPL;
232 }
233
234 static HRESULT WINAPI IEHTMLWindow2_get_opener(IHTMLWindow2 *iface, VARIANT *p)
235 {
236     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
237     FIXME("(%p)->(%p)\n", This, p);
238     return E_NOTIMPL;
239 }
240
241 static HRESULT WINAPI IEHTMLWindow2_get_navigator(IHTMLWindow2 *iface, IOmNavigator **p)
242 {
243     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
244     FIXME("(%p)->(%p)\n", This, p);
245     return E_NOTIMPL;
246 }
247
248 static HRESULT WINAPI IEHTMLWindow2_put_name(IHTMLWindow2 *iface, BSTR v)
249 {
250     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
251     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
252     return E_NOTIMPL;
253 }
254
255 static HRESULT WINAPI IEHTMLWindow2_get_name(IHTMLWindow2 *iface, BSTR *p)
256 {
257     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
258     FIXME("(%p)->(%p)\n", This, p);
259     return E_NOTIMPL;
260 }
261
262 static HRESULT WINAPI IEHTMLWindow2_get_parent(IHTMLWindow2 *iface, IHTMLWindow2 **p)
263 {
264     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
265     FIXME("(%p)->(%p)\n", This, p);
266     return E_NOTIMPL;
267 }
268
269 static HRESULT WINAPI IEHTMLWindow2_open(IHTMLWindow2 *iface, BSTR url, BSTR name,
270          BSTR features, VARIANT_BOOL replace, IHTMLWindow2 **pomWindowResult)
271 {
272     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
273     FIXME("(%p)->(%s %s %s %x %p)\n", This, debugstr_w(url), debugstr_w(name),
274           debugstr_w(features), replace, pomWindowResult);
275     return E_NOTIMPL;
276 }
277
278 static HRESULT WINAPI IEHTMLWindow2_get_self(IHTMLWindow2 *iface, IHTMLWindow2 **p)
279 {
280     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
281     FIXME("(%p)->(%p)\n", This, p);
282     return E_NOTIMPL;
283 }
284
285 static HRESULT WINAPI IEHTMLWindow2_get_top(IHTMLWindow2 *iface, IHTMLWindow2 **p)
286 {
287     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
288     FIXME("(%p)->(%p)\n", This, p);
289     return E_NOTIMPL;
290 }
291
292 static HRESULT WINAPI IEHTMLWindow2_get_window(IHTMLWindow2 *iface, IHTMLWindow2 **p)
293 {
294     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
295     FIXME("(%p)->(%p)\n", This, p);
296     return E_NOTIMPL;
297 }
298
299 static HRESULT WINAPI IEHTMLWindow2_navigate(IHTMLWindow2 *iface, BSTR url)
300 {
301     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
302     FIXME("(%p)->(%s)\n", This, debugstr_w(url));
303     return E_NOTIMPL;
304 }
305
306 static HRESULT WINAPI IEHTMLWindow2_put_onfocus(IHTMLWindow2 *iface, VARIANT v)
307 {
308     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
309     FIXME("(%p)->(v(%d))\n", This, V_VT(&v));
310     return E_NOTIMPL;
311 }
312
313 static HRESULT WINAPI IEHTMLWindow2_get_onfocus(IHTMLWindow2 *iface, VARIANT *p)
314 {
315     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
316     FIXME("(%p)->(%p)\n", This, p);
317     return E_NOTIMPL;
318 }
319
320 static HRESULT WINAPI IEHTMLWindow2_put_onblur(IHTMLWindow2 *iface, VARIANT v)
321 {
322     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
323     FIXME("(%p)->(v(%d))\n", This, V_VT(&v));
324     return E_NOTIMPL;
325 }
326
327 static HRESULT WINAPI IEHTMLWindow2_get_onblur(IHTMLWindow2 *iface, VARIANT *p)
328 {
329     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
330     FIXME("(%p)->(%p)\n", This, p);
331     return E_NOTIMPL;
332 }
333
334 static HRESULT WINAPI IEHTMLWindow2_put_onload(IHTMLWindow2 *iface, VARIANT v)
335 {
336     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
337     FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
338     return E_NOTIMPL;
339 }
340
341 static HRESULT WINAPI IEHTMLWindow2_get_onload(IHTMLWindow2 *iface, VARIANT *p)
342 {
343     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
344     FIXME("(%p)->(%p)\n", This, p);
345     return E_NOTIMPL;
346 }
347
348 static HRESULT WINAPI IEHTMLWindow2_put_onbeforeunload(IHTMLWindow2 *iface, VARIANT v)
349 {
350     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
351     FIXME("(%p)->(v(%d))\n", This, V_VT(&v));
352     return E_NOTIMPL;
353 }
354
355 static HRESULT WINAPI IEHTMLWindow2_get_onbeforeunload(IHTMLWindow2 *iface, VARIANT *p)
356 {
357     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
358     FIXME("(%p)->(%p)\n", This, p);
359     return E_NOTIMPL;
360 }
361
362 static HRESULT WINAPI IEHTMLWindow2_put_onunload(IHTMLWindow2 *iface, VARIANT v)
363 {
364     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
365     FIXME("(%p)->(v(%d))\n", This, V_VT(&v));
366     return E_NOTIMPL;
367 }
368
369 static HRESULT WINAPI IEHTMLWindow2_get_onunload(IHTMLWindow2 *iface, VARIANT *p)
370 {
371     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
372     FIXME("(%p)->(%p)\n", This, p);
373     return E_NOTIMPL;
374 }
375
376 static HRESULT WINAPI IEHTMLWindow2_put_onhelp(IHTMLWindow2 *iface, VARIANT v)
377 {
378     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
379     FIXME("(%p)->(v(%d))\n", This, V_VT(&v));
380     return E_NOTIMPL;
381 }
382
383 static HRESULT WINAPI IEHTMLWindow2_get_onhelp(IHTMLWindow2 *iface, VARIANT *p)
384 {
385     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
386     FIXME("(%p)->(%p)\n", This, p);
387     return E_NOTIMPL;
388 }
389
390 static HRESULT WINAPI IEHTMLWindow2_put_onerror(IHTMLWindow2 *iface, VARIANT v)
391 {
392     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
393     FIXME("(%p)->(v(%d))\n", This, V_VT(&v));
394     return E_NOTIMPL;
395 }
396
397 static HRESULT WINAPI IEHTMLWindow2_get_onerror(IHTMLWindow2 *iface, VARIANT *p)
398 {
399     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
400     FIXME("(%p)->(%p)\n", This, p);
401     return E_NOTIMPL;
402 }
403
404 static HRESULT WINAPI IEHTMLWindow2_put_onresize(IHTMLWindow2 *iface, VARIANT v)
405 {
406     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
407     FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
408     return E_NOTIMPL;
409 }
410
411 static HRESULT WINAPI IEHTMLWindow2_get_onresize(IHTMLWindow2 *iface, VARIANT *p)
412 {
413     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
414     FIXME("(%p)->(%p)\n", This, p);
415     return E_NOTIMPL;
416 }
417
418 static HRESULT WINAPI IEHTMLWindow2_put_onscroll(IHTMLWindow2 *iface, VARIANT v)
419 {
420     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
421     FIXME("(%p)->(v(%d))\n", This, V_VT(&v));
422     return E_NOTIMPL;
423 }
424
425 static HRESULT WINAPI IEHTMLWindow2_get_onscroll(IHTMLWindow2 *iface, VARIANT *p)
426 {
427     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
428     FIXME("(%p)->(%p)\n", This, p);
429     return E_NOTIMPL;
430 }
431
432 static HRESULT WINAPI IEHTMLWindow2_get_document(IHTMLWindow2 *iface, IHTMLDocument2 **p)
433 {
434     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
435     FIXME("(%p)->(%p)\n", This, p);
436     return E_NOTIMPL;
437 }
438
439 static HRESULT WINAPI IEHTMLWindow2_get_event(IHTMLWindow2 *iface, IHTMLEventObj **p)
440 {
441     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
442     FIXME("(%p)->(%p)\n", This, p);
443     return E_NOTIMPL;
444 }
445
446 static HRESULT WINAPI IEHTMLWindow2_get__newEnum(IHTMLWindow2 *iface, IUnknown **p)
447 {
448     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
449     FIXME("(%p)->(%p)\n", This, p);
450     return E_NOTIMPL;
451 }
452
453 static HRESULT WINAPI IEHTMLWindow2_showModalDialog(IHTMLWindow2 *iface, BSTR dialog,
454         VARIANT *varArgIn, VARIANT *varOptions, VARIANT *varArgOut)
455 {
456     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
457     FIXME("(%p)->(%s %p %p %p)\n", This, debugstr_w(dialog), varArgIn, varOptions, varArgOut);
458     return E_NOTIMPL;
459 }
460
461 static HRESULT WINAPI IEHTMLWindow2_showHelp(IHTMLWindow2 *iface, BSTR helpURL, VARIANT helpArg,
462         BSTR features)
463 {
464     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
465     FIXME("(%p)->(%s v(%d) %s)\n", This, debugstr_w(helpURL), V_VT(&helpArg), debugstr_w(features));
466     return E_NOTIMPL;
467 }
468
469 static HRESULT WINAPI IEHTMLWindow2_get_screen(IHTMLWindow2 *iface, IHTMLScreen **p)
470 {
471     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
472     FIXME("(%p)->(%p)\n", This, p);
473     return E_NOTIMPL;
474 }
475
476 static HRESULT WINAPI IEHTMLWindow2_get_Option(IHTMLWindow2 *iface, IHTMLOptionElementFactory **p)
477 {
478     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
479     FIXME("(%p)->(%p)\n", This, p);
480     return E_NOTIMPL;
481 }
482
483 static HRESULT WINAPI IEHTMLWindow2_focus(IHTMLWindow2 *iface)
484 {
485     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
486     FIXME("(%p)->()\n", This);
487     return E_NOTIMPL;
488 }
489
490 static HRESULT WINAPI IEHTMLWindow2_get_closed(IHTMLWindow2 *iface, VARIANT_BOOL *p)
491 {
492     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
493     FIXME("(%p)->(%p)\n", This, p);
494     return E_NOTIMPL;
495 }
496
497 static HRESULT WINAPI IEHTMLWindow2_blur(IHTMLWindow2 *iface)
498 {
499     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
500     FIXME("(%p)->()\n", This);
501     return E_NOTIMPL;
502 }
503
504 static HRESULT WINAPI IEHTMLWindow2_scroll(IHTMLWindow2 *iface, LONG x, LONG y)
505 {
506     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
507     FIXME("(%p)->(%d %d)\n", This, x, y);
508     return E_NOTIMPL;
509 }
510
511 static HRESULT WINAPI IEHTMLWindow2_get_clientInformation(IHTMLWindow2 *iface, IOmNavigator **p)
512 {
513     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
514     FIXME("(%p)->(%p)\n", This, p);
515     return E_NOTIMPL;
516 }
517
518 static HRESULT WINAPI IEHTMLWindow2_setInterval(IHTMLWindow2 *iface, BSTR expression,
519         LONG msec, VARIANT *language, LONG *timerID)
520 {
521     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
522     FIXME("(%p)->(%s %d %p %p)\n", This, debugstr_w(expression), msec, language, timerID);
523     return E_NOTIMPL;
524 }
525
526 static HRESULT WINAPI IEHTMLWindow2_clearInterval(IHTMLWindow2 *iface, LONG timerID)
527 {
528     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
529     FIXME("(%p)->(%d)\n", This, timerID);
530     return E_NOTIMPL;
531 }
532
533 static HRESULT WINAPI IEHTMLWindow2_put_offscreenBuffering(IHTMLWindow2 *iface, VARIANT v)
534 {
535     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
536     FIXME("(%p)->(v(%d))\n", This, V_VT(&v));
537     return E_NOTIMPL;
538 }
539
540 static HRESULT WINAPI IEHTMLWindow2_get_offscreenBuffering(IHTMLWindow2 *iface, VARIANT *p)
541 {
542     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
543     FIXME("(%p)->(%p)\n", This, p);
544     return E_NOTIMPL;
545 }
546
547 static HRESULT WINAPI IEHTMLWindow2_execScript(IHTMLWindow2 *iface, BSTR scode, BSTR language,
548         VARIANT *pvarRet)
549 {
550     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
551     FIXME("(%p)->(%s %s %p)\n", This, debugstr_w(scode), debugstr_w(language), pvarRet);
552     return E_NOTIMPL;
553 }
554
555 static HRESULT WINAPI IEHTMLWindow2_toString(IHTMLWindow2 *iface, BSTR *String)
556 {
557     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
558     FIXME("(%p)->(%p)\n", This, String);
559     return E_NOTIMPL;
560 }
561
562 static HRESULT WINAPI IEHTMLWindow2_scrollBy(IHTMLWindow2 *iface, LONG x, LONG y)
563 {
564     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
565     FIXME("(%p)->(%d %d)\n", This, x, y);
566     return E_NOTIMPL;
567 }
568
569 static HRESULT WINAPI IEHTMLWindow2_scrollTo(IHTMLWindow2 *iface, LONG x, LONG y)
570 {
571     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
572     FIXME("(%p)->(%d %d)\n", This, x, y);
573     return E_NOTIMPL;
574 }
575
576 static HRESULT WINAPI IEHTMLWindow2_moveTo(IHTMLWindow2 *iface, LONG x, LONG y)
577 {
578     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
579     FIXME("(%p)->(%d %d)\n", This, x, y);
580     return E_NOTIMPL;
581 }
582
583 static HRESULT WINAPI IEHTMLWindow2_moveBy(IHTMLWindow2 *iface, LONG x, LONG y)
584 {
585     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
586     FIXME("(%p)->(%d %d)\n", This, x, y);
587     return E_NOTIMPL;
588 }
589
590 static HRESULT WINAPI IEHTMLWindow2_resizeTo(IHTMLWindow2 *iface, LONG x, LONG y)
591 {
592     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
593     FIXME("(%p)->(%d %d)\n", This, x, y);
594     return E_NOTIMPL;
595 }
596
597 static HRESULT WINAPI IEHTMLWindow2_resizeBy(IHTMLWindow2 *iface, LONG x, LONG y)
598 {
599     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
600     FIXME("(%p)->(%d %d)\n", This, x, y);
601     return E_NOTIMPL;
602 }
603
604 static HRESULT WINAPI IEHTMLWindow2_get_external(IHTMLWindow2 *iface, IDispatch **p)
605 {
606     IEHTMLWindow *This = impl_from_IHTMLWindow2(iface);
607     FIXME("(%p)->(%p)\n", This, p);
608     return E_NOTIMPL;
609 }
610
611 static const IHTMLWindow2Vtbl IEHTMLWindow2Vtbl = {
612     IEHTMLWindow2_QueryInterface,
613     IEHTMLWindow2_AddRef,
614     IEHTMLWindow2_Release,
615     IEHTMLWindow2_GetTypeInfoCount,
616     IEHTMLWindow2_GetTypeInfo,
617     IEHTMLWindow2_GetIDsOfNames,
618     IEHTMLWindow2_Invoke,
619     IEHTMLWindow2_item,
620     IEHTMLWindow2_get_length,
621     IEHTMLWindow2_get_frames,
622     IEHTMLWindow2_put_defaultStatus,
623     IEHTMLWindow2_get_defaultStatus,
624     IEHTMLWindow2_put_status,
625     IEHTMLWindow2_get_status,
626     IEHTMLWindow2_setTimeout,
627     IEHTMLWindow2_clearTimeout,
628     IEHTMLWindow2_alert,
629     IEHTMLWindow2_confirm,
630     IEHTMLWindow2_prompt,
631     IEHTMLWindow2_get_Image,
632     IEHTMLWindow2_get_location,
633     IEHTMLWindow2_get_history,
634     IEHTMLWindow2_close,
635     IEHTMLWindow2_put_opener,
636     IEHTMLWindow2_get_opener,
637     IEHTMLWindow2_get_navigator,
638     IEHTMLWindow2_put_name,
639     IEHTMLWindow2_get_name,
640     IEHTMLWindow2_get_parent,
641     IEHTMLWindow2_open,
642     IEHTMLWindow2_get_self,
643     IEHTMLWindow2_get_top,
644     IEHTMLWindow2_get_window,
645     IEHTMLWindow2_navigate,
646     IEHTMLWindow2_put_onfocus,
647     IEHTMLWindow2_get_onfocus,
648     IEHTMLWindow2_put_onblur,
649     IEHTMLWindow2_get_onblur,
650     IEHTMLWindow2_put_onload,
651     IEHTMLWindow2_get_onload,
652     IEHTMLWindow2_put_onbeforeunload,
653     IEHTMLWindow2_get_onbeforeunload,
654     IEHTMLWindow2_put_onunload,
655     IEHTMLWindow2_get_onunload,
656     IEHTMLWindow2_put_onhelp,
657     IEHTMLWindow2_get_onhelp,
658     IEHTMLWindow2_put_onerror,
659     IEHTMLWindow2_get_onerror,
660     IEHTMLWindow2_put_onresize,
661     IEHTMLWindow2_get_onresize,
662     IEHTMLWindow2_put_onscroll,
663     IEHTMLWindow2_get_onscroll,
664     IEHTMLWindow2_get_document,
665     IEHTMLWindow2_get_event,
666     IEHTMLWindow2_get__newEnum,
667     IEHTMLWindow2_showModalDialog,
668     IEHTMLWindow2_showHelp,
669     IEHTMLWindow2_get_screen,
670     IEHTMLWindow2_get_Option,
671     IEHTMLWindow2_focus,
672     IEHTMLWindow2_get_closed,
673     IEHTMLWindow2_blur,
674     IEHTMLWindow2_scroll,
675     IEHTMLWindow2_get_clientInformation,
676     IEHTMLWindow2_setInterval,
677     IEHTMLWindow2_clearInterval,
678     IEHTMLWindow2_put_offscreenBuffering,
679     IEHTMLWindow2_get_offscreenBuffering,
680     IEHTMLWindow2_execScript,
681     IEHTMLWindow2_toString,
682     IEHTMLWindow2_scrollBy,
683     IEHTMLWindow2_scrollTo,
684     IEHTMLWindow2_moveTo,
685     IEHTMLWindow2_moveBy,
686     IEHTMLWindow2_resizeTo,
687     IEHTMLWindow2_resizeBy,
688     IEHTMLWindow2_get_external
689 };
690
691 void IEHTMLWindow_Init(DocHost *doc_host)
692 {
693     doc_host->html_window.IHTMLWindow2_iface.lpVtbl = &IEHTMLWindow2Vtbl;
694     doc_host->html_window.doc_host = doc_host;
695 }