Module: wine Branch: master Commit: 23d74d3b73bc610bf503040ef7d4c66906c7c65b URL: http://source.winehq.org/git/wine.git/?a=commit;h=23d74d3b73bc610bf503040ef7...
Author: Jacek Caban jacek@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,