forked from Mirrors/wine-wine
mshtml: Store HTMLDocument reference in HTMLTxtRange object.
parent
9ca3a22487
commit
cfaf00fa51
|
@ -427,7 +427,7 @@ static HRESULT WINAPI HTMLBodyElement_createTextRange(IHTMLBodyElement *iface, I
|
|||
nsIDOMDocumentRange_Release(nsdocrange);
|
||||
}
|
||||
|
||||
*range = HTMLTxtRange_Create(nsrange);
|
||||
*range = HTMLTxtRange_Create(This->element->node->doc, nsrange);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -173,6 +173,7 @@ static ULONG WINAPI HTMLDocument_Release(IHTMLDocument2 *iface)
|
|||
IHTMLWindow2_Release(HTMLWINDOW2(This->window));
|
||||
|
||||
detach_selection(This);
|
||||
detach_ranges(This);
|
||||
release_nodes(This);
|
||||
|
||||
ConnectionPointContainer_Destroy(&This->cp_container);
|
||||
|
@ -1130,6 +1131,7 @@ HRESULT HTMLDocument_Create(IUnknown *pUnkOuter, REFIID riid, void** ppvObject)
|
|||
ret->window = NULL;
|
||||
|
||||
list_init(&ret->selection_list);
|
||||
list_init(&ret->range_list);
|
||||
|
||||
hres = IHTMLDocument_QueryInterface(HTMLDOC(ret), riid, ppvObject);
|
||||
if(FAILED(hres)) {
|
||||
|
|
|
@ -151,6 +151,7 @@ struct HTMLDocument {
|
|||
ConnectionPoint cp_propnotif;
|
||||
|
||||
struct list selection_list;
|
||||
struct list range_list;
|
||||
|
||||
HTMLDOMNode *nodes;
|
||||
};
|
||||
|
@ -404,11 +405,12 @@ void set_document_bscallback(HTMLDocument*,BSCallback*);
|
|||
void set_current_mon(HTMLDocument*,IMoniker*);
|
||||
|
||||
IHTMLSelectionObject *HTMLSelectionObject_Create(HTMLDocument*,nsISelection*);
|
||||
IHTMLTxtRange *HTMLTxtRange_Create(nsIDOMRange*);
|
||||
IHTMLTxtRange *HTMLTxtRange_Create(HTMLDocument*,nsIDOMRange*);
|
||||
IHTMLStyle *HTMLStyle_Create(nsIDOMCSSStyleDeclaration*);
|
||||
IHTMLStyleSheet *HTMLStyleSheet_Create(void);
|
||||
|
||||
void detach_selection(HTMLDocument*);
|
||||
void detach_ranges(HTMLDocument*);
|
||||
|
||||
void HTMLElement_Create(HTMLDOMNode*);
|
||||
void HTMLBodyElement_Create(HTMLElement*);
|
||||
|
|
|
@ -161,7 +161,7 @@ static HRESULT WINAPI HTMLSelectionObject_createRange(IHTMLSelectionObject *ifac
|
|||
ERR("GetRangeAt failed: %08x\n", nsres);
|
||||
}
|
||||
|
||||
*range = (IDispatch*)HTMLTxtRange_Create(nsrange);
|
||||
*range = (IDispatch*)HTMLTxtRange_Create(This->doc, nsrange);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -42,6 +42,9 @@ typedef struct {
|
|||
LONG ref;
|
||||
|
||||
nsIDOMRange *nsrange;
|
||||
HTMLDocument *doc;
|
||||
|
||||
struct list entry;
|
||||
} HTMLTxtRange;
|
||||
|
||||
#define HTMLTXTRANGE(x) ((IHTMLTxtRange*) &(x)->lpHTMLTxtRangeVtbl)
|
||||
|
@ -94,6 +97,8 @@ static ULONG WINAPI HTMLTxtRange_Release(IHTMLTxtRange *iface)
|
|||
if(!ref) {
|
||||
if(This->nsrange)
|
||||
nsISelection_Release(This->nsrange);
|
||||
if(This->doc)
|
||||
list_remove(&This->entry);
|
||||
mshtml_free(This);
|
||||
}
|
||||
|
||||
|
@ -229,7 +234,7 @@ static HRESULT WINAPI HTMLTxtRange_duplicate(IHTMLTxtRange *iface, IHTMLTxtRange
|
|||
TRACE("(%p)->(%p)\n", This, Duplicate);
|
||||
|
||||
nsIDOMRange_CloneRange(This->nsrange, &nsrange);
|
||||
*Duplicate = HTMLTxtRange_Create(nsrange);
|
||||
*Duplicate = HTMLTxtRange_Create(This->doc, nsrange);
|
||||
nsIDOMRange_Release(nsrange);
|
||||
|
||||
return S_OK;
|
||||
|
@ -472,7 +477,7 @@ static const IHTMLTxtRangeVtbl HTMLTxtRangeVtbl = {
|
|||
HTMLTxtRange_execCommandShowHelp
|
||||
};
|
||||
|
||||
IHTMLTxtRange *HTMLTxtRange_Create(nsIDOMRange *nsrange)
|
||||
IHTMLTxtRange *HTMLTxtRange_Create(HTMLDocument *doc, nsIDOMRange *nsrange)
|
||||
{
|
||||
HTMLTxtRange *ret = mshtml_alloc(sizeof(HTMLTxtRange));
|
||||
|
||||
|
@ -483,5 +488,17 @@ IHTMLTxtRange *HTMLTxtRange_Create(nsIDOMRange *nsrange)
|
|||
nsIDOMRange_AddRef(nsrange);
|
||||
ret->nsrange = nsrange;
|
||||
|
||||
ret->doc = doc;
|
||||
list_add_head(&doc->range_list, &ret->entry);
|
||||
|
||||
return HTMLTXTRANGE(ret);
|
||||
}
|
||||
|
||||
void detach_ranges(HTMLDocument *This)
|
||||
{
|
||||
HTMLTxtRange *iter;
|
||||
|
||||
LIST_FOR_EACH_ENTRY(iter, &This->range_list, HTMLTxtRange, entry) {
|
||||
iter->doc = NULL;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue