Jacek Caban : mshtml: Return content document in get_document for frame elements.
Alexandre Julliard
julliard at winehq.org
Mon Nov 30 10:42:42 CST 2009
Module: wine
Branch: master
Commit: 999371724a1da36629a38caded1f011877417593
URL: http://source.winehq.org/git/wine.git/?a=commit;h=999371724a1da36629a38caded1f011877417593
Author: Jacek Caban <jacek at 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 {
More information about the wine-cvs
mailing list