Module: wine Branch: master Commit: 999371724a1da36629a38caded1f011877417593 URL: http://source.winehq.org/git/wine.git/?a=commit;h=999371724a1da36629a38caded...
Author: Jacek Caban jacek@codeweavers.com Date: Tue Nov 24 21:13:38 2009 +0100
mshtml: Return content document in get_document for frame elements.
---
dlls/mshtml/htmlelem.c | 4 +++- dlls/mshtml/htmlframebase.c | 21 ++++++++++++++++++++- dlls/mshtml/htmliframe.c | 21 ++++++++++++++++++++- dlls/mshtml/mshtml_private.h | 1 + 4 files changed, 44 insertions(+), 3 deletions(-)
diff --git a/dlls/mshtml/htmlelem.c b/dlls/mshtml/htmlelem.c index 0864e49..45338fe 100644 --- a/dlls/mshtml/htmlelem.c +++ b/dlls/mshtml/htmlelem.c @@ -569,9 +569,11 @@ static HRESULT WINAPI HTMLElement_get_document(IHTMLElement *iface, IDispatch ** if(!p) return E_POINTER;
+ if(This->node.vtbl->get_document) + return This->node.vtbl->get_document(&This->node, p); + *p = (IDispatch*)HTMLDOC(&This->node.doc->basedoc); IDispatch_AddRef(*p); - return S_OK; }
diff --git a/dlls/mshtml/htmlframebase.c b/dlls/mshtml/htmlframebase.c index b474a34..2526593 100644 --- a/dlls/mshtml/htmlframebase.c +++ b/dlls/mshtml/htmlframebase.c @@ -443,11 +443,30 @@ static void HTMLFrameElement_destructor(HTMLDOMNode *iface) HTMLFrameBase_destructor(&This->framebase); }
+static HRESULT HTMLFrameElement_get_document(HTMLDOMNode *iface, IDispatch **p) +{ + HTMLFrameElement *This = HTMLFRAME_NODE_THIS(iface); + + if(!This->framebase.content_window || !This->framebase.content_window->doc) { + *p = NULL; + return S_OK; + } + + *p = (IDispatch*)HTMLDOC(&This->framebase.content_window->doc->basedoc); + IDispatch_AddRef(*p); + return S_OK; +} + #undef HTMLFRAME_NODE_THIS
static const NodeImplVtbl HTMLFrameElementImplVtbl = { HTMLFrameElement_QI, - HTMLFrameElement_destructor + HTMLFrameElement_destructor, + NULL, + NULL, + NULL, + NULL, + HTMLFrameElement_get_document };
HTMLElement *HTMLFrameElement_Create(HTMLDocumentNode *doc, nsIDOMHTMLElement *nselem, HTMLWindow *content_window) diff --git a/dlls/mshtml/htmliframe.c b/dlls/mshtml/htmliframe.c index 218638b..8c3c520 100644 --- a/dlls/mshtml/htmliframe.c +++ b/dlls/mshtml/htmliframe.c @@ -58,11 +58,30 @@ static void HTMLIFrame_destructor(HTMLDOMNode *iface) HTMLFrameBase_destructor(&This->framebase); }
+static HRESULT HTMLIFrame_get_document(HTMLDOMNode *iface, IDispatch **p) +{ + HTMLIFrame *This = HTMLIFRAME_NODE_THIS(iface); + + if(!This->framebase.content_window || !This->framebase.content_window->doc) { + *p = NULL; + return S_OK; + } + + *p = (IDispatch*)HTMLDOC(&This->framebase.content_window->doc->basedoc); + IDispatch_AddRef(*p); + return S_OK; +} + #undef HTMLIFRAME_NODE_THIS
static const NodeImplVtbl HTMLIFrameImplVtbl = { HTMLIFrame_QI, - HTMLIFrame_destructor + HTMLIFrame_destructor, + NULL, + NULL, + NULL, + NULL, + HTMLIFrame_get_document };
static const tid_t HTMLIFrame_iface_tids[] = { diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index d1fe9f8..ef4642b 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -445,6 +445,7 @@ typedef struct { HRESULT (*call_event)(HTMLDOMNode*,DWORD,BOOL*); HRESULT (*put_disabled)(HTMLDOMNode*,VARIANT_BOOL); HRESULT (*get_disabled)(HTMLDOMNode*,VARIANT_BOOL*); + HRESULT (*get_document)(HTMLDOMNode*,IDispatch**); } NodeImplVtbl;
struct HTMLDOMNode {