From: Jacek Caban Subject: [PATCH 1/2] mshtml: Improved IOleCommandTarget::QueryStatus implementation. Message-Id: <54C149CC.90807@codeweavers.com> Date: Thu, 22 Jan 2015 20:04:44 +0100 --- 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; iOLECMDID_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