Module: wine Branch: master Commit: 408024a2d16311bb6f12961362b1ce30e69b0180 URL: http://source.winehq.org/git/wine.git/?a=commit;h=408024a2d16311bb6f12961362...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Oct 8 13:28:27 2008 -0500
mshtml: Use stored nsdoc in createTextRange.
---
dlls/mshtml/htmlbody.c | 42 +++++++++++++++++++++++------------------- 1 files changed, 23 insertions(+), 19 deletions(-)
diff --git a/dlls/mshtml/htmlbody.c b/dlls/mshtml/htmlbody.c index efe5df8..623d83d 100644 --- a/dlls/mshtml/htmlbody.c +++ b/dlls/mshtml/htmlbody.c @@ -544,31 +544,35 @@ static HRESULT WINAPI HTMLBodyElement_get_onbeforeunload(IHTMLBodyElement *iface static HRESULT WINAPI HTMLBodyElement_createTextRange(IHTMLBodyElement *iface, IHTMLTxtRange **range) { HTMLBodyElement *This = HTMLBODY_THIS(iface); + nsIDOMDocumentRange *nsdocrange; nsIDOMRange *nsrange = NULL; + nsresult nsres;
TRACE("(%p)->(%p)\n", This, range);
- if(This->textcont.element.node.doc->nscontainer) { - nsIDOMDocument *nsdoc; - nsIDOMDocumentRange *nsdocrange; - nsresult nsres; - - nsIWebNavigation_GetDocument(This->textcont.element.node.doc->nscontainer->navigation, &nsdoc); - nsIDOMDocument_QueryInterface(nsdoc, &IID_nsIDOMDocumentRange, (void**)&nsdocrange); - nsIDOMDocument_Release(nsdoc); - - nsres = nsIDOMDocumentRange_CreateRange(nsdocrange, &nsrange); - if(NS_SUCCEEDED(nsres)) { - nsres = nsIDOMRange_SelectNodeContents(nsrange, This->textcont.element.node.nsnode); - if(NS_FAILED(nsres)) - ERR("SelectNodeContents failed: %08x\n", nsres); - }else { - ERR("CreateRange failed: %08x\n", nsres); - } - - nsIDOMDocumentRange_Release(nsdocrange); + if(!This->textcont.element.node.doc->nsdoc) { + WARN("No nsdoc\n"); + return E_UNEXPECTED; + } + + nsres = nsIDOMDocument_QueryInterface(This->textcont.element.node.doc->nsdoc, &IID_nsIDOMDocumentRange, + (void**)&nsdocrange); + if(NS_FAILED(nsres)) { + ERR("Could not get nsIDOMDocumentRabge iface: %08x\n", nsres); + return E_FAIL; + } + + nsres = nsIDOMDocumentRange_CreateRange(nsdocrange, &nsrange); + if(NS_SUCCEEDED(nsres)) { + nsres = nsIDOMRange_SelectNodeContents(nsrange, This->textcont.element.node.nsnode); + if(NS_FAILED(nsres)) + ERR("SelectNodeContents failed: %08x\n", nsres); + }else { + ERR("CreateRange failed: %08x\n", nsres); }
+ nsIDOMDocumentRange_Release(nsdocrange); + *range = HTMLTxtRange_Create(This->textcont.element.node.doc, nsrange); return S_OK; }