Jacek Caban : mshtml: Initialize HTMLStyleSheet object with compat mode.
Alexandre Julliard
julliard at winehq.org
Mon Mar 15 16:59:13 CDT 2021
Module: wine
Branch: master
Commit: f35737a0885f4acd349f85b129aa39dd01a9bd85
URL: https://source.winehq.org/git/wine.git/?a=commit;h=f35737a0885f4acd349f85b129aa39dd01a9bd85
Author: Jacek Caban <jacek at codeweavers.com>
Date: Mon Mar 15 16:18:13 2021 +0100
mshtml: Initialize HTMLStyleSheet object with compat mode.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/mshtml/htmldoc.c | 4 ++--
dlls/mshtml/htmlstyleelem.c | 7 ++++---
dlls/mshtml/htmlstylesheet.c | 30 ++++++++++++++++++++----------
dlls/mshtml/mshtml_private.h | 2 +-
4 files changed, 27 insertions(+), 16 deletions(-)
diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c
index 54273f5a6e0..ad3ce941002 100644
--- a/dlls/mshtml/htmldoc.c
+++ b/dlls/mshtml/htmldoc.c
@@ -1733,8 +1733,8 @@ static HRESULT WINAPI HTMLDocument_createStyleSheet(IHTMLDocument2 *iface, BSTR
if(bstrHref && *bstrHref) {
FIXME("semi-stub for href %s\n", debugstr_w(bstrHref));
- *ppnewStyleSheet = HTMLStyleSheet_Create(NULL);
- return S_OK;
+ return create_style_sheet(NULL, dispex_compat_mode(&This->doc_node->node.event_target.dispex),
+ ppnewStyleSheet);
}
hres = create_element(This->doc_node, L"style", &elem);
diff --git a/dlls/mshtml/htmlstyleelem.c b/dlls/mshtml/htmlstyleelem.c
index 14fd8bc8f53..0cb6bac0710 100644
--- a/dlls/mshtml/htmlstyleelem.c
+++ b/dlls/mshtml/htmlstyleelem.c
@@ -198,10 +198,11 @@ static HRESULT WINAPI HTMLStyleElement_get_styleSheet(IHTMLStyleElement *iface,
assert(nsres == NS_OK);
if(ss) {
- This->style_sheet = HTMLStyleSheet_Create(ss);
+ HRESULT hres = create_style_sheet(ss, dispex_compat_mode(&This->element.node.event_target.dispex),
+ &This->style_sheet);
nsIDOMStyleSheet_Release(ss);
- if(!This->style_sheet)
- return E_OUTOFMEMORY;
+ if(FAILED(hres))
+ return hres;
}
}
diff --git a/dlls/mshtml/htmlstylesheet.c b/dlls/mshtml/htmlstylesheet.c
index a4e3254100b..8d535a657a9 100644
--- a/dlls/mshtml/htmlstylesheet.c
+++ b/dlls/mshtml/htmlstylesheet.c
@@ -517,7 +517,9 @@ static HRESULT WINAPI HTMLStyleSheetsCollection_item(IHTMLStyleSheetsCollection
switch(V_VT(pvarIndex)) {
case VT_I4: {
nsIDOMStyleSheet *nsstylesheet;
+ IHTMLStyleSheet *stylesheet;
nsresult nsres;
+ HRESULT hres;
TRACE("index=%d\n", V_I4(pvarIndex));
@@ -528,9 +530,12 @@ static HRESULT WINAPI HTMLStyleSheetsCollection_item(IHTMLStyleSheetsCollection
return E_INVALIDARG;
}
- V_VT(pvarResult) = VT_DISPATCH;
- V_DISPATCH(pvarResult) = (IDispatch*)HTMLStyleSheet_Create(nsstylesheet);
+ hres = create_style_sheet(nsstylesheet, dispex_compat_mode(&This->dispex), &stylesheet);
+ if(FAILED(hres))
+ return hres;
+ V_VT(pvarResult) = VT_DISPATCH;
+ V_DISPATCH(pvarResult) = (IDispatch*)stylesheet;
return S_OK;
}
@@ -938,23 +943,28 @@ static dispex_static_data_t HTMLStyleSheet_dispex = {
HTMLStyleSheet_iface_tids
};
-IHTMLStyleSheet *HTMLStyleSheet_Create(nsIDOMStyleSheet *nsstylesheet)
+HRESULT create_style_sheet(nsIDOMStyleSheet *nsstylesheet, compat_mode_t compat_mode, IHTMLStyleSheet **ret)
{
- HTMLStyleSheet *ret = heap_alloc(sizeof(HTMLStyleSheet));
+ HTMLStyleSheet *style_sheet;
nsresult nsres;
- ret->IHTMLStyleSheet_iface.lpVtbl = &HTMLStyleSheetVtbl;
- ret->ref = 1;
- ret->nsstylesheet = NULL;
+ if(!(style_sheet = heap_alloc(sizeof(HTMLStyleSheet))))
+ return E_OUTOFMEMORY;
- init_dispex(&ret->dispex, (IUnknown*)&ret->IHTMLStyleSheet_iface, &HTMLStyleSheet_dispex);
+ style_sheet->IHTMLStyleSheet_iface.lpVtbl = &HTMLStyleSheetVtbl;
+ style_sheet->ref = 1;
+ style_sheet->nsstylesheet = NULL;
+
+ init_dispex_with_compat_mode(&style_sheet->dispex, (IUnknown*)&style_sheet->IHTMLStyleSheet_iface,
+ &HTMLStyleSheet_dispex, compat_mode);
if(nsstylesheet) {
nsres = nsIDOMStyleSheet_QueryInterface(nsstylesheet, &IID_nsIDOMCSSStyleSheet,
- (void**)&ret->nsstylesheet);
+ (void**)&style_sheet->nsstylesheet);
if(NS_FAILED(nsres))
ERR("Could not get nsICSSStyleSheet interface: %08x\n", nsres);
}
- return &ret->IHTMLStyleSheet_iface;
+ *ret = &style_sheet->IHTMLStyleSheet_iface;
+ return S_OK;
}
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index be19d98637f..735f9279b04 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -1019,7 +1019,7 @@ HRESULT get_readystate_string(READYSTATE,BSTR*) DECLSPEC_HIDDEN;
HRESULT HTMLSelectionObject_Create(HTMLDocumentNode*,nsISelection*,IHTMLSelectionObject**) DECLSPEC_HIDDEN;
HRESULT HTMLTxtRange_Create(HTMLDocumentNode*,nsIDOMRange*,IHTMLTxtRange**) DECLSPEC_HIDDEN;
-IHTMLStyleSheet *HTMLStyleSheet_Create(nsIDOMStyleSheet*) DECLSPEC_HIDDEN;
+HRESULT create_style_sheet(nsIDOMStyleSheet*,compat_mode_t,IHTMLStyleSheet**) DECLSPEC_HIDDEN;
IHTMLStyleSheetsCollection *HTMLStyleSheetsCollection_Create(nsIDOMStyleSheetList*) DECLSPEC_HIDDEN;
HRESULT HTMLDOMRange_Create(nsIDOMRange*,IHTMLDOMRange**) DECLSPEC_HIDDEN;
HRESULT create_markup_pointer(IMarkupPointer**) DECLSPEC_HIDDEN;
More information about the wine-cvs
mailing list