Module: wine Branch: master Commit: 29674a2c34816058eab367519d7a9768cfe3dd72 URL: https://source.winehq.org/git/wine.git/?a=commit;h=29674a2c34816058eab367519...
Author: Piotr Caban piotr@codeweavers.com Date: Wed Oct 3 21:43:44 2018 +0200
mshtml: Support retrieving command output in Exec(OLECMDID_OPTICAL_ZOOM).
Signed-off-by: Piotr Caban piotr@codeweavers.com Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/mshtml/mshtml_private.h | 1 + dlls/mshtml/nsembed.c | 23 +++++++++++++++++++++++ dlls/mshtml/olecmd.c | 9 +++++++-- dlls/mshtml/tests/htmldoc.c | 17 +++++++++++++++-- 4 files changed, 46 insertions(+), 4 deletions(-)
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index d551693..ddc8df5 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -928,6 +928,7 @@ void init_nsio(nsIComponentManager*) DECLSPEC_HIDDEN; void release_nsio(void) DECLSPEC_HIDDEN; BOOL is_gecko_path(const char*) DECLSPEC_HIDDEN; void set_viewer_zoom(NSContainer*,float) DECLSPEC_HIDDEN; +float get_viewer_zoom(NSContainer*) DECLSPEC_HIDDEN;
void init_node_cc(void) DECLSPEC_HIDDEN;
diff --git a/dlls/mshtml/nsembed.c b/dlls/mshtml/nsembed.c index 6aae9c2..9acb0d2 100644 --- a/dlls/mshtml/nsembed.c +++ b/dlls/mshtml/nsembed.c @@ -1191,6 +1191,29 @@ void set_viewer_zoom(NSContainer *nscontainer, float factor) nsIContentViewer_Release(content_viewer); }
+float get_viewer_zoom(NSContainer *nscontainer) +{ + nsIContentViewer *content_viewer; + nsIDocShell *doc_shell; + nsresult nsres; + float factor; + + nsres = get_nsinterface((nsISupports*)nscontainer->navigation, &IID_nsIDocShell, (void**)&doc_shell); + assert(nsres == NS_OK); + + nsres = nsIDocShell_GetContentViewer(doc_shell, &content_viewer); + assert(nsres == NS_OK && content_viewer); + nsIDocShell_Release(doc_shell); + + nsres = nsIContentViewer_GetFullZoom(content_viewer, &factor); + if(NS_FAILED(nsres)) + ERR("GetFullZoom failed: %08x\n", nsres); + TRACE("Got %f\n", factor); + + nsIContentViewer_Release(content_viewer); + return factor; +} + struct nsWeakReference { nsIWeakReference nsIWeakReference_iface;
diff --git a/dlls/mshtml/olecmd.c b/dlls/mshtml/olecmd.c index e5fc474..2baf715 100644 --- a/dlls/mshtml/olecmd.c +++ b/dlls/mshtml/olecmd.c @@ -558,12 +558,17 @@ static HRESULT exec_optical_zoom(HTMLDocument *This, DWORD nCmdexecopt, VARIANT { TRACE("(%p)->(%d %s %p)\n", This, nCmdexecopt, debugstr_variant(pvaIn), pvaOut);
- if(!pvaIn || V_VT(pvaIn) != VT_I4) { + if(pvaIn && V_VT(pvaIn) != VT_I4) { FIXME("Unsupported argument %s\n", debugstr_variant(pvaIn)); return E_NOTIMPL; }
- set_viewer_zoom(This->doc_obj->nscontainer, (float)V_I4(pvaIn)/100); + if(pvaIn) + set_viewer_zoom(This->doc_obj->nscontainer, (float)V_I4(pvaIn)/100); + if(pvaOut) { + V_VT(pvaOut) = VT_I4; + V_I4(pvaOut) = get_viewer_zoom(This->doc_obj->nscontainer)*100; + } return S_OK; }
diff --git a/dlls/mshtml/tests/htmldoc.c b/dlls/mshtml/tests/htmldoc.c index 3729fc3..25cdf80 100644 --- a/dlls/mshtml/tests/htmldoc.c +++ b/dlls/mshtml/tests/htmldoc.c @@ -6702,7 +6702,7 @@ static void test_exec_noargs(IUnknown *unk, DWORD cmdid) static void test_exec_optical_zoom(IHTMLDocument2 *doc, int factor) { IOleCommandTarget *cmdtrg; - VARIANT v; + VARIANT v, out; HRESULT hres;
hres = IHTMLDocument2_QueryInterface(doc, &IID_IOleCommandTarget, (void**)&cmdtrg); @@ -6715,10 +6715,23 @@ static void test_exec_optical_zoom(IHTMLDocument2 *doc, int factor)
SET_EXPECT(GetOverrideKeyPath); hres = IOleCommandTarget_Exec(cmdtrg, NULL, OLECMDID_OPTICAL_ZOOM, - OLECMDEXECOPT_DODEFAULT, &v, NULL); + OLECMDEXECOPT_DODEFAULT, &v, &out); ok(hres == S_OK || broken(hres == OLECMDERR_E_NOTSUPPORTED) /* IE6 */, "Exec failed: %08x\n", hres); CLEAR_CALLED(GetOverrideKeyPath);
+ if(hres != OLECMDERR_E_NOTSUPPORTED) { + ok(V_VT(&out) == VT_I4, "V_VT(&out) = %d\n", V_VT(&out)); + ok(V_I4(&out) == factor, "V_I4(&out) = %d, expected %d\n", V_I4(&out), factor); + + SET_EXPECT(GetOverrideKeyPath); + hres = IOleCommandTarget_Exec(cmdtrg, NULL, OLECMDID_OPTICAL_ZOOM, + OLECMDEXECOPT_DODEFAULT, NULL, &out); + ok(hres == S_OK, "Exec failed: %08x\n", hres); + ok(V_VT(&out) == VT_I4, "V_VT(&out) = %d\n", V_VT(&out)); + ok(V_I4(&out) == factor, "V_I4(&out) = %d, expected %d\n", V_I4(&out), factor); + CLEAR_CALLED(GetOverrideKeyPath); + } + IOleCommandTarget_Release(cmdtrg);
test_QueryStatus((IUnknown*)doc, NULL, OLECMDID_OPTICAL_ZOOM, 0);