Jacek Caban : mshtml: Improved IOleCommandTarget:: QueryStatus implementation.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Jan 22 15:20:46 CST 2015


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Jan 22 20:04:44 2015 +0100

mshtml: Improved IOleCommandTarget::QueryStatus implementation.

---

 dlls/mshtml/olecmd.c | 39 +++++++++++++++++++--------------------
 1 file changed, 19 insertions(+), 20 deletions(-)

diff --git a/dlls/mshtml/olecmd.c b/dlls/mshtml/olecmd.c
index c45e9c9..9417311 100644
--- a/dlls/mshtml/olecmd.c
+++ b/dlls/mshtml/olecmd.c
@@ -790,18 +790,22 @@ static HRESULT WINAPI OleCommandTarget_QueryStatus(IOleCommandTarget *iface, con
         ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText)
 {
     HTMLDocument *This = impl_from_IOleCommandTarget(iface);
-    HRESULT hres = S_OK, hr;
+    HRESULT hres;
 
     TRACE("(%p)->(%s %d %p %p)\n", This, debugstr_guid(pguidCmdGroup), cCmds, prgCmds, pCmdText);
 
+    if(pCmdText)
+        FIXME("Unsupported pCmdText\n");
+    if(!cCmds)
+        return S_OK;
+
     if(!pguidCmdGroup) {
         ULONG i;
 
         for(i=0; i<cCmds; i++) {
-            if(prgCmds[i].cmdID<OLECMDID_OPEN || prgCmds[i].cmdID>OLECMDID_GETPRINTTEMPLATE) {
+            if(prgCmds[i].cmdID < OLECMDID_OPEN || prgCmds[i].cmdID >= sizeof(exec_table)/sizeof(*exec_table)) {
                 WARN("Unsupported cmdID = %d\n", prgCmds[i].cmdID);
                 prgCmds[i].cmdf = 0;
-                hres = OLECMDERR_E_NOTSUPPORTED;
             }else {
                 if(prgCmds[i].cmdID == OLECMDID_OPEN || prgCmds[i].cmdID == OLECMDID_NEW) {
                     IOleCommandTarget *cmdtrg = NULL;
@@ -809,14 +813,14 @@ static HRESULT WINAPI OleCommandTarget_QueryStatus(IOleCommandTarget *iface, con
 
                     prgCmds[i].cmdf = OLECMDF_SUPPORTED;
                     if(This->doc_obj->client) {
-                        hr = IOleClientSite_QueryInterface(This->doc_obj->client, &IID_IOleCommandTarget,
+                        hres = IOleClientSite_QueryInterface(This->doc_obj->client, &IID_IOleCommandTarget,
                                 (void**)&cmdtrg);
-                        if(SUCCEEDED(hr)) {
+                        if(SUCCEEDED(hres)) {
                             olecmd.cmdID = prgCmds[i].cmdID;
                             olecmd.cmdf = 0;
 
-                            hr = IOleCommandTarget_QueryStatus(cmdtrg, NULL, 1, &olecmd, NULL);
-                            if(SUCCEEDED(hr) && olecmd.cmdf)
+                            hres = IOleCommandTarget_QueryStatus(cmdtrg, NULL, 1, &olecmd, NULL);
+                            if(SUCCEEDED(hres) && olecmd.cmdf)
                                 prgCmds[i].cmdf = olecmd.cmdf;
                         }
                     }else {
@@ -826,33 +830,28 @@ static HRESULT WINAPI OleCommandTarget_QueryStatus(IOleCommandTarget *iface, con
                     prgCmds[i].cmdf = exec_table[prgCmds[i].cmdID].cmdf;
                     TRACE("cmdID = %d  returning %x\n", prgCmds[i].cmdID, prgCmds[i].cmdf);
                 }
-                hres = S_OK;
             }
         }
 
-        if(pCmdText)
-            FIXME("Set pCmdText\n");
-    }else if(IsEqualGUID(&CGID_MSHTML, pguidCmdGroup)) {
+        return (prgCmds[cCmds-1].cmdf & OLECMDF_SUPPORTED) ? S_OK : OLECMDERR_E_NOTSUPPORTED;
+    }
+
+    if(IsEqualGUID(&CGID_MSHTML, pguidCmdGroup)) {
         ULONG i;
 
         for(i=0; i<cCmds; i++) {
-            HRESULT hres = query_from_table(This, base_cmds, prgCmds+i);
+            hres = query_from_table(This, base_cmds, prgCmds+i);
             if(hres == OLECMDERR_E_NOTSUPPORTED)
                 hres = query_from_table(This, editmode_cmds, prgCmds+i);
             if(hres == OLECMDERR_E_NOTSUPPORTED)
                 FIXME("CGID_MSHTML: unsupported cmdID %d\n", prgCmds[i].cmdID);
         }
 
-        hres = prgCmds[i-1].cmdf ? S_OK : OLECMDERR_E_NOTSUPPORTED;
-
-        if(pCmdText)
-            FIXME("Set pCmdText\n");
-    }else {
-        FIXME("Unsupported pguidCmdGroup %s\n", debugstr_guid(pguidCmdGroup));
-        hres = OLECMDERR_E_UNKNOWNGROUP;
+        return (prgCmds[cCmds-1].cmdf & OLECMDF_SUPPORTED) ? S_OK : OLECMDERR_E_NOTSUPPORTED;
     }
 
-    return hres;
+    FIXME("Unsupported pguidCmdGroup %s\n", debugstr_guid(pguidCmdGroup));
+    return OLECMDERR_E_UNKNOWNGROUP;
 }
 
 static HRESULT exec_from_table(HTMLDocument *This, const cmdtable_t *cmdtable, DWORD cmdid,




More information about the wine-cvs mailing list