Jacek Caban : mshtml: Added Exec(OLECMDID_OPTICAL_ZOOM) implementation.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Jan 23 10:52:57 CST 2015


Module: wine
Branch: master
Commit: 13d899ec0f72b413b34c44024374d5bbacd23b3e
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=13d899ec0f72b413b34c44024374d5bbacd23b3e

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Jan 23 14:38:16 2015 +0100

mshtml: Added Exec(OLECMDID_OPTICAL_ZOOM) implementation.

---

 dlls/mshtml/mshtml_private.h |  3 ++-
 dlls/mshtml/nsembed.c        | 22 ++++++++++++++++++++++
 dlls/mshtml/olecmd.c         | 11 +++++++++--
 dlls/mshtml/oleobj.c         | 22 ++--------------------
 dlls/mshtml/tests/htmldoc.c  |  2 +-
 5 files changed, 36 insertions(+), 24 deletions(-)

diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index a53fcec..5c3c1ec 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -818,8 +818,9 @@ void register_nsservice(nsIComponentRegistrar*,nsIServiceManager*) DECLSPEC_HIDD
 void init_nsio(nsIComponentManager*,nsIComponentRegistrar*) DECLSPEC_HIDDEN;
 void release_nsio(void) DECLSPEC_HIDDEN;
 BOOL is_gecko_path(const char*) DECLSPEC_HIDDEN;
+void set_viewer_zoom(NSContainer*,float) DECLSPEC_HIDDEN;
 
-void init_node_cc(void);
+void init_node_cc(void) DECLSPEC_HIDDEN;
 
 HRESULT nsuri_to_url(LPCWSTR,BOOL,BSTR*) DECLSPEC_HIDDEN;
 
diff --git a/dlls/mshtml/nsembed.c b/dlls/mshtml/nsembed.c
index 2854ac3..8f3fceb 100644
--- a/dlls/mshtml/nsembed.c
+++ b/dlls/mshtml/nsembed.c
@@ -1149,6 +1149,28 @@ BOOL is_gecko_path(const char *path)
     return ret;
 }
 
+void set_viewer_zoom(NSContainer *nscontainer, float factor)
+{
+    nsIContentViewer *content_viewer;
+    nsIDocShell *doc_shell;
+    nsresult nsres;
+
+    TRACE("Setting to %f\n", 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_SetFullZoom(content_viewer, factor);
+    if(NS_FAILED(nsres))
+        ERR("SetFullZoom failed: %08x\n", nsres);
+
+    nsIContentViewer_Release(content_viewer);
+}
+
 struct nsWeakReference {
     nsIWeakReference nsIWeakReference_iface;
 
diff --git a/dlls/mshtml/olecmd.c b/dlls/mshtml/olecmd.c
index 5916010..f4bf002 100644
--- a/dlls/mshtml/olecmd.c
+++ b/dlls/mshtml/olecmd.c
@@ -548,8 +548,15 @@ static HRESULT exec_get_print_template(HTMLDocument *This, DWORD nCmdexecopt, VA
 
 static HRESULT exec_optical_zoom(HTMLDocument *This, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
 {
-    FIXME("(%p)->(%d %p %p)\n", This, nCmdexecopt, pvaIn, pvaOut);
-    return E_NOTIMPL;
+    TRACE("(%p)->(%d %s %p)\n", This, nCmdexecopt, debugstr_variant(pvaIn), pvaOut);
+
+    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);
+    return S_OK;
 }
 
 static HRESULT query_mshtml_copy(HTMLDocument *This, OLECMD *cmd)
diff --git a/dlls/mshtml/oleobj.c b/dlls/mshtml/oleobj.c
index aeb83a0..7809eb0 100644
--- a/dlls/mshtml/oleobj.c
+++ b/dlls/mshtml/oleobj.c
@@ -229,12 +229,9 @@ void set_document_navigation(HTMLDocumentObj *doc, BOOL doc_can_navigate)
 
 static void load_settings(HTMLDocumentObj *doc)
 {
-    nsIContentViewer *content_viewer;
-    nsIDocShell *doc_shell;
     HKEY settings_key;
     DWORD val, size;
     LONG res;
-    nsresult nsres;
 
     static const WCHAR ie_keyW[] = {
         'S','O','F','T','W','A','R','E','\\',
@@ -250,23 +247,8 @@ static void load_settings(HTMLDocumentObj *doc)
     size = sizeof(val);
     res = RegGetValueW(settings_key, zoomW, zoom_factorW, RRF_RT_REG_DWORD, NULL, &val, &size);
     RegCloseKey(settings_key);
-    if(res != ERROR_SUCCESS)
-        return;
-
-    TRACE("Setting ZoomFactor to %u\n", val);
-
-    nsres = get_nsinterface((nsISupports*)doc->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_SetFullZoom(content_viewer, (float)val/100000);
-    if(NS_FAILED(nsres))
-        ERR("SetFullZoom failed: %08x\n", nsres);
-
-    nsIContentViewer_Release(content_viewer);
+    if(res == ERROR_SUCCESS)
+        set_viewer_zoom(doc->nscontainer, (float)val/100000);
 }
 
 static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, IOleClientSite *pClientSite)
diff --git a/dlls/mshtml/tests/htmldoc.c b/dlls/mshtml/tests/htmldoc.c
index 16d6b45..3b332d1 100644
--- a/dlls/mshtml/tests/htmldoc.c
+++ b/dlls/mshtml/tests/htmldoc.c
@@ -6641,7 +6641,7 @@ 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);
-    todo_wine ok(hres == S_OK || broken(hres == OLECMDERR_E_NOTSUPPORTED) /* IE6 */, "Exec failed: %08x\n", hres);
+    ok(hres == S_OK || broken(hres == OLECMDERR_E_NOTSUPPORTED) /* IE6 */, "Exec failed: %08x\n", hres);
     CLEAR_CALLED(GetOverrideKeyPath);
 
     IOleCommandTarget_Release(cmdtrg);




More information about the wine-cvs mailing list