Jacek Caban : mshtml: Added IHTMLDocument2::execCommand implementation.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Nov 25 12:54:01 CST 2014
Module: wine
Branch: master
Commit: a0d1d8cd27a4f5d2212f9524cc56be935c5d0483
URL: http://source.winehq.org/git/wine.git/?a=commit;h=a0d1d8cd27a4f5d2212f9524cc56be935c5d0483
Author: Jacek Caban <jacek at codeweavers.com>
Date: Mon Nov 24 13:03:30 2014 +0100
mshtml: Added IHTMLDocument2::execCommand implementation.
---
dlls/mshtml/htmldoc.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++--
dlls/mshtml/tests/dom.c | 18 +++++++++++++++
2 files changed, 75 insertions(+), 2 deletions(-)
diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c
index 60ee739..c760c36 100644
--- a/dlls/mshtml/htmldoc.c
+++ b/dlls/mshtml/htmldoc.c
@@ -31,6 +31,7 @@
#include "ole2.h"
#include "perhist.h"
#include "mshtmdid.h"
+#include "mshtmcid.h"
#include "wine/debug.h"
@@ -1095,6 +1096,40 @@ static HRESULT WINAPI HTMLDocument_clear(IHTMLDocument2 *iface)
return S_OK;
}
+static const WCHAR insertorderedlistW[] =
+ {'i','n','s','e','r','t','o','r','d','e','r','e','d','l','i','s','t',0};
+static const WCHAR insertunorderedlistW[] =
+ {'i','n','s','e','r','t','u','n','o','r','d','e','r','e','d','l','i','s','t',0};
+static const WCHAR outdentW[] =
+ {'o','u','t','d','e','n','t',0};
+static const WCHAR respectvisibilityindesignW[] =
+ {'r','e','s','p','e','c','t','v','i','s','i','b','i','l','i','t','y','i','n','d','e','s','i','g','n',0};
+
+static const struct {
+ const WCHAR *name;
+ OLECMDID id;
+}command_names[] = {
+ {insertorderedlistW, IDM_ORDERLIST},
+ {insertunorderedlistW, IDM_UNORDERLIST},
+ {outdentW, IDM_OUTDENT},
+ {respectvisibilityindesignW, IDM_RESPECTVISIBILITY_INDESIGN}
+};
+
+static BOOL cmdid_from_string(const WCHAR *str, OLECMDID *cmdid)
+{
+ int i;
+
+ for(i = 0; i < sizeof(command_names)/sizeof(*command_names); i++) {
+ if(!strcmpiW(command_names[i].name, str)) {
+ *cmdid = command_names[i].id;
+ return TRUE;
+ }
+ }
+
+ FIXME("Unknown command %s\n", debugstr_w(str));
+ return FALSE;
+}
+
static HRESULT WINAPI HTMLDocument_queryCommandSupported(IHTMLDocument2 *iface, BSTR cmdID,
VARIANT_BOOL *pfRet)
{
@@ -1147,8 +1182,28 @@ static HRESULT WINAPI HTMLDocument_execCommand(IHTMLDocument2 *iface, BSTR cmdID
VARIANT_BOOL showUI, VARIANT value, VARIANT_BOOL *pfRet)
{
HTMLDocument *This = impl_from_IHTMLDocument2(iface);
- FIXME("(%p)->(%s %x %s %p)\n", This, debugstr_w(cmdID), showUI, debugstr_variant(&value), pfRet);
- return E_NOTIMPL;
+ OLECMDID cmdid;
+ VARIANT ret;
+ HRESULT hres;
+
+ TRACE("(%p)->(%s %x %s %p)\n", This, debugstr_w(cmdID), showUI, debugstr_variant(&value), pfRet);
+
+ if(!cmdid_from_string(cmdID, &cmdid))
+ return OLECMDERR_E_NOTSUPPORTED;
+
+ V_VT(&ret) = VT_EMPTY;
+ hres = IOleCommandTarget_Exec(&This->IOleCommandTarget_iface, &CGID_MSHTML, cmdid,
+ showUI ? 0 : OLECMDEXECOPT_DONTPROMPTUSER, &value, &ret);
+ if(FAILED(hres))
+ return hres;
+
+ if(V_VT(&ret) != VT_EMPTY) {
+ FIXME("Handle ret %s\n", debugstr_variant(&ret));
+ VariantClear(&ret);
+ }
+
+ *pfRet = VARIANT_TRUE;
+ return S_OK;
}
static HRESULT WINAPI HTMLDocument_execCommandShowHelp(IHTMLDocument2 *iface, BSTR cmdID,
diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c
index a919b3d..2d526fc 100644
--- a/dlls/mshtml/tests/dom.c
+++ b/dlls/mshtml/tests/dom.c
@@ -6005,8 +6005,10 @@ static void test_defaults(IHTMLDocument2 *doc)
IHTMLElement2 *elem2;
IHTMLElement *elem;
IHTMLStyle *style;
+ VARIANT v;
BSTR str;
LONG l;
+ VARIANT_BOOL b;
HRESULT hres;
IHTMLElementCollection *collection;
@@ -6129,6 +6131,22 @@ static void test_defaults(IHTMLDocument2 *doc)
hres = IHTMLElement_QueryInterface(elem, &IID_IHTMLFiltersCollection, (void**)&body);
ok(hres == E_NOINTERFACE, "got interface IHTMLFiltersCollection\n");
+ str = a2bstr("xxx");
+ b = 100;
+ V_VT(&v) = VT_EMPTY;
+ hres = IHTMLDocument2_execCommand(doc, str, FALSE, v, &b);
+ ok(hres == OLECMDERR_E_NOTSUPPORTED || hres == E_INVALIDARG,
+ "execCommand failed: %08x, expected OLECMDERR_E_NOTSUPPORTED or E_INVALIDARG\n", hres);
+ SysFreeString(str);
+
+ str = a2bstr("respectvisibilityindesign");
+ b = 100;
+ V_VT(&v) = VT_BOOL;
+ V_BOOL(&v) = VARIANT_TRUE;
+ hres = IHTMLDocument2_execCommand(doc, str, FALSE, v, &b);
+ ok(hres == S_OK, "execCommand failed: %08x, expected DRAGDROP_E_NOTREGISTERED\n", hres);
+ SysFreeString(str);
+
test_default_selection(doc);
test_doc_title(doc, "");
test_dom_implementation(doc);
More information about the wine-cvs
mailing list