2 * Copyright 2005-2006 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
35 #include "wine/debug.h"
37 #include "mshtml_private.h"
39 WINE_DEFAULT_DEBUG_CHANNEL(mshtml
);
41 /**********************************************************
42 * IOleCommandTarget implementation
45 #define CMDTARGET_THIS(iface) DEFINE_THIS(HTMLDocument, OleCommandTarget, iface)
47 static HRESULT
exec_open(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
49 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
53 static HRESULT
exec_new(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
55 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
59 static HRESULT
exec_save(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
61 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
65 static HRESULT
exec_save_as(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
67 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
71 static HRESULT
exec_save_copy_as(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
73 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
77 static HRESULT
exec_print(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
79 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
83 static HRESULT
exec_print_preview(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
85 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
89 static HRESULT
exec_page_setup(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
91 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
95 static HRESULT
exec_spell(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
97 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
101 static HRESULT
exec_properties(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
103 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
107 static HRESULT
exec_cut(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
109 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
113 static HRESULT
exec_copy(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
115 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
119 static HRESULT
exec_paste(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
121 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
125 static HRESULT
exec_paste_special(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
127 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
131 static HRESULT
exec_undo(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
133 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
137 static HRESULT
exec_rendo(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
139 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
143 static HRESULT
exec_select_all(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
145 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
149 static HRESULT
exec_clear_selection(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
151 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
155 static HRESULT
exec_zoom(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
157 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
161 static HRESULT
exec_get_zoom_range(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
163 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
167 static HRESULT
exec_refresh(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
169 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
173 static HRESULT
exec_stop(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
175 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
179 static HRESULT
exec_stop_download(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
181 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
185 static HRESULT
exec_delete(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
187 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
191 static HRESULT
exec_enable_interaction(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
193 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
197 static HRESULT
exec_on_unload(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
199 TRACE("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
201 /* Tests show that we have nothing more to do here */
204 V_VT(pvaOut
) = VT_BOOL
;
205 V_BOOL(pvaOut
) = VARIANT_TRUE
;
211 static HRESULT
exec_show_page_setup(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
213 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
217 static HRESULT
exec_show_print(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
219 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
223 static HRESULT
exec_close(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
225 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
229 static HRESULT
exec_set_print_template(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
231 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
235 static HRESULT
exec_get_print_template(HTMLDocument
*This
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
237 FIXME("(%p)->(%ld %p %p)\n", This
, nCmdexecopt
, pvaIn
, pvaOut
);
241 static void do_ns_command(NSContainer
*This
, const char *cmd
)
243 nsICommandManager
*cmdmgr
;
244 nsIInterfaceRequestor
*iface_req
;
247 FIXME("(%p)\n", This
);
249 nsres
= nsIWebBrowser_QueryInterface(This
->webbrowser
,
250 &IID_nsIInterfaceRequestor
, (void**)&iface_req
);
251 if(NS_FAILED(nsres
)) {
252 ERR("Could not get nsIInterfaceRequestor: %08lx\n", nsres
);
256 nsres
= nsIInterfaceRequestor_GetInterface(iface_req
, &IID_nsICommandManager
,
258 nsIInterfaceRequestor_Release(iface_req
);
259 if(NS_FAILED(nsres
)) {
260 ERR("Could not get nsICommandManager: %08lx\n", nsres
);
264 nsres
= nsICommandManager_DoCommand(cmdmgr
, cmd
, NULL
, NULL
);
266 ERR("DoCommand(%s) failed: %08lx\n", debugstr_a(cmd
), nsres
);
268 nsICommandManager_Release(cmdmgr
);
271 static HRESULT
exec_bold(HTMLDocument
*This
)
273 TRACE("(%p)\n", This
);
275 if(This
->nscontainer
)
276 do_ns_command(This
->nscontainer
, "cmd_bold");
281 static HRESULT
exec_browsemode(HTMLDocument
*This
)
283 WARN("(%p)\n", This
);
285 This
->usermode
= BROWSEMODE
;
290 static void setup_ns_editing(NSContainer
*This
)
292 nsIInterfaceRequestor
*iface_req
;
293 nsIEditingSession
*editing_session
= NULL
;
294 nsIURIContentListener
*listener
= NULL
;
295 nsIDOMWindow
*dom_window
= NULL
;
298 nsres
= nsIWebBrowser_QueryInterface(This
->webbrowser
,
299 &IID_nsIInterfaceRequestor
, (void**)&iface_req
);
300 if(NS_FAILED(nsres
)) {
301 ERR("Could not get nsIInterfaceRequestor: %08lx\n", nsres
);
305 nsres
= nsIInterfaceRequestor_GetInterface(iface_req
, &IID_nsIEditingSession
,
306 (void**)&editing_session
);
307 nsIInterfaceRequestor_Release(iface_req
);
308 if(NS_FAILED(nsres
)) {
309 ERR("Could not get nsIEditingSession: %08lx\n", nsres
);
313 nsres
= nsIWebBrowser_GetContentDOMWindow(This
->webbrowser
, &dom_window
);
314 nsIDOMWindow_Release(dom_window
);
315 if(NS_FAILED(nsres
)) {
316 ERR("Could not get content DOM window: %08lx\n", nsres
);
317 nsIEditingSession_Release(editing_session
);
321 nsres
= nsIEditingSession_MakeWindowEditable(editing_session
, dom_window
, NULL
, FALSE
);
322 nsIEditingSession_Release(editing_session
);
323 if(NS_FAILED(nsres
)) {
324 ERR("MakeWindowEditable failed: %08lx\n", nsres
);
328 /* MakeWindowEditable changes WebBrowser's parent URI content listener.
329 * It seams to be a bug in Gecko. To workaround it we set our content
330 * listener again and Gecko's one as its parent.
332 nsIWebBrowser_GetParentURIContentListener(This
->webbrowser
, &listener
);
333 nsIURIContentListener_SetParentContentListener(NSURICL(This
), listener
);
334 nsIURIContentListener_Release(listener
);
335 nsIWebBrowser_SetParentURIContentListener(This
->webbrowser
, NSURICL(This
));
338 static HRESULT
exec_editmode(HTMLDocument
*This
)
342 TRACE("(%p)\n", This
);
344 This
->usermode
= EDITMODE
;
347 IOleInPlaceFrame_SetStatusText(This
->frame
, NULL
);
350 IOleCommandTarget
*cmdtrg
= NULL
;
352 hres
= IOleClientSite_QueryInterface(This
->client
, &IID_IOleCommandTarget
,
354 if(SUCCEEDED(hres
)) {
359 IOleCommandTarget_Exec(cmdtrg
, &CGID_ShellDocView
, 37, 0, &var
, NULL
);
364 DOCHOSTUIINFO hostinfo
;
366 memset(&hostinfo
, 0, sizeof(DOCHOSTUIINFO
));
367 hostinfo
.cbSize
= sizeof(DOCHOSTUIINFO
);
368 hres
= IDocHostUIHandler_GetHostInfo(This
->hostui
, &hostinfo
);
370 /* FIXME: use hostinfo */
371 TRACE("hostinfo = {%lu %08lx %08lx %s %s}\n",
372 hostinfo
.cbSize
, hostinfo
.dwFlags
, hostinfo
.dwDoubleClick
,
373 debugstr_w(hostinfo
.pchHostCss
), debugstr_w(hostinfo
.pchHostNS
));
377 VARIANT silent
, offline
;
379 hres
= get_client_disp_property(This
->client
, DISPID_AMBIENT_SILENT
, &silent
);
380 if(SUCCEEDED(hres
)) {
381 if(V_VT(&silent
) != VT_BOOL
)
382 WARN("V_VT(silent) = %d\n", V_VT(&silent
));
383 else if(V_BOOL(&silent
))
384 FIXME("silent == true\n");
387 hres
= get_client_disp_property(This
->client
,
388 DISPID_AMBIENT_OFFLINEIFNOTCONNECTED
, &offline
);
389 if(SUCCEEDED(hres
)) {
390 if(V_VT(&silent
) != VT_BOOL
)
391 WARN("V_VT(offline) = %d\n", V_VT(&silent
));
392 else if(V_BOOL(&silent
))
393 FIXME("offline == true\n");
397 if(This
->nscontainer
)
398 setup_ns_editing(This
->nscontainer
);
403 static HRESULT
exec_baselinefont3(HTMLDocument
*This
)
405 FIXME("(%p)\n", This
);
409 static const struct {
411 HRESULT (*func
)(HTMLDocument
*,DWORD
,VARIANT
*,VARIANT
*);
412 } exec_table
[OLECMDID_GETPRINTTEMPLATE
+1] = {
414 { OLECMDF_SUPPORTED
, exec_open
}, /* OLECMDID_OPEN */
415 { OLECMDF_SUPPORTED
, exec_new
}, /* OLECMDID_NEW */
416 { OLECMDF_SUPPORTED
, exec_save
}, /* OLECMDID_SAVE */
417 { OLECMDF_SUPPORTED
|OLECMDF_ENABLED
, exec_save_as
}, /* OLECMDID_SAVEAS */
418 { OLECMDF_SUPPORTED
, exec_save_copy_as
}, /* OLECMDID_SAVECOPYAS */
419 { OLECMDF_SUPPORTED
|OLECMDF_ENABLED
, exec_print
}, /* OLECMDID_PRINT */
420 { OLECMDF_SUPPORTED
|OLECMDF_ENABLED
, exec_print_preview
}, /* OLECMDID_PRINTPREVIEW */
421 { OLECMDF_SUPPORTED
|OLECMDF_ENABLED
, exec_page_setup
}, /* OLECMDID_PAGESETUP */
422 { OLECMDF_SUPPORTED
, exec_spell
}, /* OLECMDID_SPELL */
423 { OLECMDF_SUPPORTED
|OLECMDF_ENABLED
, exec_properties
}, /* OLECMDID_PROPERTIES */
424 { OLECMDF_SUPPORTED
, exec_cut
}, /* OLECMDID_CUT */
425 { OLECMDF_SUPPORTED
, exec_copy
}, /* OLECMDID_COPY */
426 { OLECMDF_SUPPORTED
, exec_paste
}, /* OLECMDID_PASTE */
427 { OLECMDF_SUPPORTED
, exec_paste_special
}, /* OLECMDID_PASTESPECIAL */
428 { OLECMDF_SUPPORTED
, exec_undo
}, /* OLECMDID_UNDO */
429 { OLECMDF_SUPPORTED
, exec_rendo
}, /* OLECMDID_REDO */
430 { OLECMDF_SUPPORTED
|OLECMDF_ENABLED
, exec_select_all
}, /* OLECMDID_SELECTALL */
431 { OLECMDF_SUPPORTED
, exec_clear_selection
}, /* OLECMDID_CLEARSELECTION */
432 { OLECMDF_SUPPORTED
, exec_zoom
}, /* OLECMDID_ZOOM */
433 { OLECMDF_SUPPORTED
, exec_get_zoom_range
}, /* OLECMDID_GETZOOMRANGE */
435 { OLECMDF_SUPPORTED
|OLECMDF_ENABLED
, exec_refresh
}, /* OLECMDID_REFRESH */
436 { OLECMDF_SUPPORTED
|OLECMDF_ENABLED
, exec_stop
}, /* OLECMDID_STOP */
437 {0},{0},{0},{0},{0},{0},
438 { OLECMDF_SUPPORTED
, exec_stop_download
}, /* OLECMDID_STOPDOWNLOAD */
440 { OLECMDF_SUPPORTED
, exec_delete
}, /* OLECMDID_DELETE */
442 { OLECMDF_SUPPORTED
, exec_enable_interaction
}, /* OLECMDID_ENABLE_INTERACTION */
443 { OLECMDF_SUPPORTED
, exec_on_unload
}, /* OLECMDID_ONUNLOAD */
445 { OLECMDF_SUPPORTED
, exec_show_page_setup
}, /* OLECMDID_SHOWPAGESETUP */
446 { OLECMDF_SUPPORTED
, exec_show_print
}, /* OLECMDID_SHOWPRINT */
448 { OLECMDF_SUPPORTED
, exec_close
}, /* OLECMDID_CLOSE */
450 { OLECMDF_SUPPORTED
, exec_set_print_template
}, /* OLECMDID_SETPRINTTEMPLATE */
451 { OLECMDF_SUPPORTED
, exec_get_print_template
} /* OLECMDID_GETPRINTTEMPLATE */
454 static HRESULT WINAPI
OleCommandTarget_QueryInterface(IOleCommandTarget
*iface
, REFIID riid
, void **ppv
)
456 HTMLDocument
*This
= CMDTARGET_THIS(iface
);
457 return IHTMLDocument2_QueryInterface(HTMLDOC(This
), riid
, ppv
);
460 static ULONG WINAPI
OleCommandTarget_AddRef(IOleCommandTarget
*iface
)
462 HTMLDocument
*This
= CMDTARGET_THIS(iface
);
463 return IHTMLDocument2_AddRef(HTMLDOC(This
));
466 static ULONG WINAPI
OleCommandTarget_Release(IOleCommandTarget
*iface
)
468 HTMLDocument
*This
= CMDTARGET_THIS(iface
);
469 return IHTMLDocument_Release(HTMLDOC(This
));
472 static HRESULT WINAPI
OleCommandTarget_QueryStatus(IOleCommandTarget
*iface
, const GUID
*pguidCmdGroup
,
473 ULONG cCmds
, OLECMD prgCmds
[], OLECMDTEXT
*pCmdText
)
475 HTMLDocument
*This
= CMDTARGET_THIS(iface
);
476 HRESULT hres
= S_OK
, hr
;
478 TRACE("(%p)->(%s %ld %p %p)\n", This
, debugstr_guid(pguidCmdGroup
), cCmds
, prgCmds
, pCmdText
);
483 for(i
=0; i
<cCmds
; i
++) {
484 if(prgCmds
[i
].cmdID
<OLECMDID_OPEN
|| prgCmds
[i
].cmdID
>OLECMDID_GETPRINTTEMPLATE
) {
485 WARN("Unsupported cmdID = %ld\n", prgCmds
[i
].cmdID
);
487 hres
= OLECMDERR_E_NOTSUPPORTED
;
489 if(prgCmds
[i
].cmdID
== OLECMDID_OPEN
|| prgCmds
[i
].cmdID
== OLECMDID_NEW
) {
490 IOleCommandTarget
*cmdtrg
= NULL
;
493 prgCmds
[i
].cmdf
= OLECMDF_SUPPORTED
;
495 hr
= IOleClientSite_QueryInterface(This
->client
, &IID_IOleCommandTarget
,
498 olecmd
.cmdID
= prgCmds
[i
].cmdID
;
501 hr
= IOleCommandTarget_QueryStatus(cmdtrg
, NULL
, 1, &olecmd
, NULL
);
502 if(SUCCEEDED(hr
) && olecmd
.cmdf
)
503 prgCmds
[i
].cmdf
= olecmd
.cmdf
;
506 ERR("This->client == NULL, native would crash\n");
509 prgCmds
[i
].cmdf
= exec_table
[prgCmds
[i
].cmdID
].cmdf
;
510 TRACE("cmdID = %ld returning %lx\n", prgCmds
[i
].cmdID
, prgCmds
[i
].cmdf
);
517 FIXME("Set pCmdText\n");
519 FIXME("Unsupported pguidCmdGroup %s\n", debugstr_guid(pguidCmdGroup
));
520 hres
= OLECMDERR_E_UNKNOWNGROUP
;
526 static HRESULT WINAPI
OleCommandTarget_Exec(IOleCommandTarget
*iface
, const GUID
*pguidCmdGroup
,
527 DWORD nCmdID
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
)
529 HTMLDocument
*This
= CMDTARGET_THIS(iface
);
532 if(nCmdID
<OLECMDID_OPEN
|| nCmdID
>OLECMDID_GETPRINTTEMPLATE
|| !exec_table
[nCmdID
].func
) {
533 WARN("Unsupported cmdID = %ld\n", nCmdID
);
534 return OLECMDERR_E_NOTSUPPORTED
;
537 return exec_table
[nCmdID
].func(This
, nCmdexecopt
, pvaIn
, pvaOut
);
538 }else if(IsEqualGUID(&CGID_Explorer
, pguidCmdGroup
)) {
539 FIXME("unsupported nCmdID %ld of CGID_Explorer group\n", nCmdID
);
540 TRACE("%p %p\n", pvaIn
, pvaOut
);
541 return OLECMDERR_E_NOTSUPPORTED
;
542 }else if(IsEqualGUID(&CGID_ShellDocView
, pguidCmdGroup
)) {
543 FIXME("unsupported nCmdID %ld of CGID_ShellDocView group\n", nCmdID
);
544 return OLECMDERR_E_NOTSUPPORTED
;
545 }else if(IsEqualGUID(&CGID_MSHTML
, pguidCmdGroup
)) {
549 FIXME("unsupported arguments\n");
550 return exec_bold(This
);
553 FIXME("unsupported arguments\n");
554 return exec_browsemode(This
);
557 FIXME("unsupported arguments\n");
558 return exec_editmode(This
);
559 case IDM_BASELINEFONT3
:
560 return exec_baselinefont3(This
);
562 FIXME("unsupported nCmdID %ld of CGID_MSHTML group\n", nCmdID
);
563 return OLECMDERR_E_NOTSUPPORTED
;
567 FIXME("Unsupported pguidCmdGroup %s\n", debugstr_guid(pguidCmdGroup
));
568 return OLECMDERR_E_UNKNOWNGROUP
;
571 #undef CMDTARGET_THIS
573 static const IOleCommandTargetVtbl OleCommandTargetVtbl
= {
574 OleCommandTarget_QueryInterface
,
575 OleCommandTarget_AddRef
,
576 OleCommandTarget_Release
,
577 OleCommandTarget_QueryStatus
,
578 OleCommandTarget_Exec
581 void HTMLDocument_OleCmd_Init(HTMLDocument
*This
)
583 This
->lpOleCommandTargetVtbl
= &OleCommandTargetVtbl
;