mshtml: Use command table for IDM_COPY, IDM_CUT and IDM_PASTE query.
This commit is contained in:
parent
eb8b3417e0
commit
7d336240d4
|
@ -530,6 +530,12 @@ static DWORD query_align_status(HTMLDocument *This, const char *align_str)
|
||||||
return OLECMDF_SUPPORTED | OLECMDF_ENABLED | (align && !strcmp(align_str, align) ? OLECMDF_LATCHED : 0);
|
return OLECMDF_SUPPORTED | OLECMDF_ENABLED | (align && !strcmp(align_str, align) ? OLECMDF_LATCHED : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static HRESULT query_mshtml_copy(HTMLDocument *This, OLECMD *cmd)
|
||||||
|
{
|
||||||
|
FIXME("(%p)\n", This);
|
||||||
|
cmd->cmdf = OLECMDF_SUPPORTED|OLECMDF_ENABLED;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
static HRESULT exec_mshtml_copy(HTMLDocument *This, DWORD cmdexecopt, VARIANT *in, VARIANT *out)
|
static HRESULT exec_mshtml_copy(HTMLDocument *This, DWORD cmdexecopt, VARIANT *in, VARIANT *out)
|
||||||
{
|
{
|
||||||
|
@ -537,12 +543,26 @@ static HRESULT exec_mshtml_copy(HTMLDocument *This, DWORD cmdexecopt, VARIANT *i
|
||||||
return E_NOTIMPL;
|
return E_NOTIMPL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static HRESULT query_mshtml_cut(HTMLDocument *This, OLECMD *cmd)
|
||||||
|
{
|
||||||
|
FIXME("(%p)\n", This);
|
||||||
|
cmd->cmdf = OLECMDF_SUPPORTED|OLECMDF_ENABLED;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
static HRESULT exec_mshtml_cut(HTMLDocument *This, DWORD cmdexecopt, VARIANT *in, VARIANT *out)
|
static HRESULT exec_mshtml_cut(HTMLDocument *This, DWORD cmdexecopt, VARIANT *in, VARIANT *out)
|
||||||
{
|
{
|
||||||
FIXME("(%p)->(%08x %p %p)\n", This, cmdexecopt, in, out);
|
FIXME("(%p)->(%08x %p %p)\n", This, cmdexecopt, in, out);
|
||||||
return E_NOTIMPL;
|
return E_NOTIMPL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static HRESULT query_mshtml_paste(HTMLDocument *This, OLECMD *cmd)
|
||||||
|
{
|
||||||
|
FIXME("(%p)\n", This);
|
||||||
|
cmd->cmdf = OLECMDF_SUPPORTED|OLECMDF_ENABLED;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
static HRESULT exec_mshtml_paste(HTMLDocument *This, DWORD cmdexecopt, VARIANT *in, VARIANT *out)
|
static HRESULT exec_mshtml_paste(HTMLDocument *This, DWORD cmdexecopt, VARIANT *in, VARIANT *out)
|
||||||
{
|
{
|
||||||
FIXME("(%p)->(%08x %p %p)\n", This, cmdexecopt, in, out);
|
FIXME("(%p)->(%08x %p %p)\n", This, cmdexecopt, in, out);
|
||||||
|
@ -715,9 +735,9 @@ static const struct {
|
||||||
};
|
};
|
||||||
|
|
||||||
static const cmdtable_t base_cmds[] = {
|
static const cmdtable_t base_cmds[] = {
|
||||||
{IDM_COPY, NULL, exec_mshtml_copy},
|
{IDM_COPY, query_mshtml_copy, exec_mshtml_copy},
|
||||||
{IDM_PASTE, NULL, exec_mshtml_paste},
|
{IDM_PASTE, query_mshtml_paste, exec_mshtml_paste},
|
||||||
{IDM_CUT, NULL, exec_mshtml_cut},
|
{IDM_CUT, query_mshtml_cut, exec_mshtml_cut},
|
||||||
{IDM_BROWSEMODE, NULL, exec_browsemode},
|
{IDM_BROWSEMODE, NULL, exec_browsemode},
|
||||||
{IDM_EDITMODE, NULL, exec_editmode},
|
{IDM_EDITMODE, NULL, exec_editmode},
|
||||||
{IDM_PRINT, NULL, exec_print},
|
{IDM_PRINT, NULL, exec_print},
|
||||||
|
@ -745,6 +765,21 @@ static ULONG WINAPI OleCommandTarget_Release(IOleCommandTarget *iface)
|
||||||
return IHTMLDocument_Release(HTMLDOC(This));
|
return IHTMLDocument_Release(HTMLDOC(This));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static HRESULT query_from_table(HTMLDocument *This, const cmdtable_t *cmdtable, OLECMD *cmd)
|
||||||
|
{
|
||||||
|
const cmdtable_t *iter = cmdtable;
|
||||||
|
|
||||||
|
cmd->cmdf = 0;
|
||||||
|
|
||||||
|
while(iter->id && iter->id != cmd->cmdID)
|
||||||
|
iter++;
|
||||||
|
|
||||||
|
if(!iter->id || !iter->query)
|
||||||
|
return OLECMDERR_E_NOTSUPPORTED;
|
||||||
|
|
||||||
|
return iter->query(This, cmd);
|
||||||
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI OleCommandTarget_QueryStatus(IOleCommandTarget *iface, const GUID *pguidCmdGroup,
|
static HRESULT WINAPI OleCommandTarget_QueryStatus(IOleCommandTarget *iface, const GUID *pguidCmdGroup,
|
||||||
ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText)
|
ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText)
|
||||||
{
|
{
|
||||||
|
@ -795,15 +830,13 @@ static HRESULT WINAPI OleCommandTarget_QueryStatus(IOleCommandTarget *iface, con
|
||||||
ULONG i;
|
ULONG i;
|
||||||
|
|
||||||
for(i=0; i<cCmds; i++) {
|
for(i=0; i<cCmds; i++) {
|
||||||
|
HRESULT 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)
|
||||||
|
continue;
|
||||||
|
|
||||||
switch(prgCmds[i].cmdID) {
|
switch(prgCmds[i].cmdID) {
|
||||||
case IDM_COPY:
|
|
||||||
FIXME("CGID_MSHTML: IDM_COPY\n");
|
|
||||||
prgCmds[i].cmdf = OLECMDF_SUPPORTED|OLECMDF_ENABLED;
|
|
||||||
break;
|
|
||||||
case IDM_CUT:
|
|
||||||
FIXME("CGID_MSHTML: IDM_CUT\n");
|
|
||||||
prgCmds[i].cmdf = OLECMDF_SUPPORTED|OLECMDF_ENABLED;
|
|
||||||
break;
|
|
||||||
case IDM_FONTNAME:
|
case IDM_FONTNAME:
|
||||||
TRACE("CGID_MSHTML: IDM_FONTNAME\n");
|
TRACE("CGID_MSHTML: IDM_FONTNAME\n");
|
||||||
prgCmds[i].cmdf = query_edit_status(This, NULL);
|
prgCmds[i].cmdf = query_edit_status(This, NULL);
|
||||||
|
@ -816,10 +849,6 @@ static HRESULT WINAPI OleCommandTarget_QueryStatus(IOleCommandTarget *iface, con
|
||||||
FIXME("CGID_MSHTML: IDM_PRINT\n");
|
FIXME("CGID_MSHTML: IDM_PRINT\n");
|
||||||
prgCmds[i].cmdf = OLECMDF_SUPPORTED|OLECMDF_ENABLED;
|
prgCmds[i].cmdf = OLECMDF_SUPPORTED|OLECMDF_ENABLED;
|
||||||
break;
|
break;
|
||||||
case IDM_PASTE:
|
|
||||||
FIXME("CGID_MSHTML: IDM_PASTE\n");
|
|
||||||
prgCmds[i].cmdf = OLECMDF_SUPPORTED|OLECMDF_ENABLED;
|
|
||||||
break;
|
|
||||||
case IDM_BOLD:
|
case IDM_BOLD:
|
||||||
TRACE("CGID_MSHTML: IDM_BOLD\n");
|
TRACE("CGID_MSHTML: IDM_BOLD\n");
|
||||||
prgCmds[i].cmdf = query_edit_status(This, NSCMD_BOLD);
|
prgCmds[i].cmdf = query_edit_status(This, NSCMD_BOLD);
|
||||||
|
|
Loading…
Reference in New Issue