mshtml: Added IHTMLElement::put_outerText implementation.

Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Jacek Caban 2016-03-31 14:50:33 +02:00 committed by Alexandre Julliard
parent ca3178d0c5
commit 7c1fa88ced
3 changed files with 59 additions and 3 deletions

View File

@ -25,6 +25,7 @@
#include "winbase.h" #include "winbase.h"
#include "winuser.h" #include "winuser.h"
#include "ole2.h" #include "ole2.h"
#include "mshtmdid.h"
#include "wine/debug.h" #include "wine/debug.h"
@ -838,6 +839,16 @@ static BOOL HTMLBodyElement_is_text_edit(HTMLDOMNode *iface)
return TRUE; return TRUE;
} }
static BOOL HTMLBodyElement_is_settable(HTMLDOMNode *iface, DISPID dispid)
{
switch(dispid) {
case DISPID_IHTMLELEMENT_OUTERTEXT:
return FALSE;
default:
return TRUE;
}
}
static const cpc_entry_t HTMLBodyElement_cpc[] = { static const cpc_entry_t HTMLBodyElement_cpc[] = {
{&DIID_HTMLTextContainerEvents}, {&DIID_HTMLTextContainerEvents},
{&IID_IPropertyNotifySink}, {&IID_IPropertyNotifySink},
@ -863,7 +874,8 @@ static const NodeImplVtbl HTMLBodyElementImplVtbl = {
NULL, NULL,
HTMLBodyElement_traverse, HTMLBodyElement_traverse,
HTMLBodyElement_unlink, HTMLBodyElement_unlink,
HTMLBodyElement_is_text_edit HTMLBodyElement_is_text_edit,
HTMLBodyElement_is_settable
}; };
static const tid_t HTMLBodyElement_iface_tids[] = { static const tid_t HTMLBodyElement_iface_tids[] = {

View File

@ -1552,8 +1552,51 @@ static HRESULT WINAPI HTMLElement_get_outerHTML(IHTMLElement *iface, BSTR *p)
static HRESULT WINAPI HTMLElement_put_outerText(IHTMLElement *iface, BSTR v) static HRESULT WINAPI HTMLElement_put_outerText(IHTMLElement *iface, BSTR v)
{ {
HTMLElement *This = impl_from_IHTMLElement(iface); HTMLElement *This = impl_from_IHTMLElement(iface);
FIXME("(%p)->(%s)\n", This, debugstr_w(v)); nsIDOMText *text_node;
return E_NOTIMPL; nsIDOMRange *range;
nsAString nsstr;
nsresult nsres;
TRACE("(%p)->(%s)\n", This, debugstr_w(v));
if(This->node.vtbl->is_settable && !This->node.vtbl->is_settable(&This->node, DISPID_IHTMLELEMENT_OUTERTEXT)) {
WARN("Called on element that does not support setting the property.\n");
return 0x800a0258; /* undocumented error code */
}
if(!This->node.doc->nsdoc) {
FIXME("NULL nsdoc\n");
return E_FAIL;
}
nsAString_InitDepend(&nsstr, v);
nsres = nsIDOMHTMLDocument_CreateTextNode(This->node.doc->nsdoc, &nsstr, &text_node);
nsAString_Finish(&nsstr);
if(NS_FAILED(nsres)) {
ERR("CreateTextNode failed\n");
return E_FAIL;
}
nsres = nsIDOMHTMLDocument_CreateRange(This->node.doc->nsdoc, &range);
if(NS_SUCCEEDED(nsres)) {
nsres = nsIDOMRange_SelectNode(range, This->node.nsnode);
if(NS_SUCCEEDED(nsres))
nsres = nsIDOMRange_DeleteContents(range);
if(NS_SUCCEEDED(nsres))
nsres = nsIDOMRange_InsertNode(range, (nsIDOMNode*)text_node);
if(NS_SUCCEEDED(nsres))
nsres = nsIDOMRange_SelectNodeContents(range, This->node.nsnode);
if(NS_SUCCEEDED(nsres))
nsres = nsIDOMRange_DeleteContents(range);
nsIDOMRange_Release(range);
}
nsIDOMText_Release(text_node);
if(NS_FAILED(nsres)) {
ERR("failed to set text: %08x\n", nsres);
return E_FAIL;
}
return S_OK;
} }
static HRESULT WINAPI HTMLElement_get_outerText(IHTMLElement *iface, BSTR *p) static HRESULT WINAPI HTMLElement_get_outerText(IHTMLElement *iface, BSTR *p)

View File

@ -677,6 +677,7 @@ typedef struct {
void (*traverse)(HTMLDOMNode*,nsCycleCollectionTraversalCallback*); void (*traverse)(HTMLDOMNode*,nsCycleCollectionTraversalCallback*);
void (*unlink)(HTMLDOMNode*); void (*unlink)(HTMLDOMNode*);
BOOL (*is_text_edit)(HTMLDOMNode*); BOOL (*is_text_edit)(HTMLDOMNode*);
BOOL (*is_settable)(HTMLDOMNode*,DISPID);
} NodeImplVtbl; } NodeImplVtbl;
struct HTMLDOMNode { struct HTMLDOMNode {