sync mshtml to wine 1.1.4

svn path=/trunk/; revision=36108
This commit is contained in:
Christoph von Wittich 2008-09-10 07:44:02 +00:00
parent 929b9dfa89
commit 124ae67cb4
19 changed files with 475 additions and 117 deletions

View file

@ -0,0 +1,17 @@
<group>
<module name="mshtml_tlb" type="embeddedtypelib">
<file>mshtml_tlb.idl</file>
</module>
<module name="mshtml.tlb" type="win32dll" extension=".tlb" installbase="system32" installname="mshtml.tlb" entrypoint="0">
<importlibrary definition="mshtml.tlb.spec.def" />
<include base="mshtml.tlb" root="intermediate">.</include>
<dependency>mshtml_tlb</dependency>
<define name="__WINESRC__" />
<define name="_WIN32_IE">0x600</define>
<define name="_WIN32_WINNT">0x501</define>
<define name="WINVER">0x501</define>
<library>kernel32</library>
<file>mshtml.tlb.spec</file>
<file>rsrc.rc</file>
</module>
</group>

View file

@ -0,0 +1 @@
# no exported entry points

View file

@ -0,0 +1,19 @@
/*
* Copyright 2007 Jacek Caban for CodeWeavers
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "mshtml.idl"

View file

@ -0,0 +1,24 @@
/*
* Copyright 2007 Jacek Caban for CodeWeavers
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "windef.h"
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
/* @makedep: mshtml_tlb.tlb */
1 TYPELIB LOADONCALL DISCARDABLE mshtml_tlb.tlb

View file

@ -0,0 +1,98 @@
/*
* mshtml (Simplified and Traditional Chinese Resources)
*
* Copyright 2008 Hongbo Ni <hongbo.at.njstar.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
/* Chinese text is encoded in UTF-8 */
#pragma code_page(65001)
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
STRINGTABLE DISCARDABLE
{
IDS_HTMLDISABLED "HTML 功能目前已被停用."
IDS_HTMLDOCUMENT "HTML 文件"
IDS_DOWNLOADING "正在下载..."
IDS_INSTALLING "正在安装..."
}
ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 260, 85
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Wine Gecko 安装"
FONT 9, "MS Song"
{
LTEXT "这个运用程序要显示一个HTML 网页. Wine 需要装上 Gecko (Mozilla HTML " \
"engine)才能显示HTML网页. 如果你想自动下载和安装Gecko" \
"请按'安装'.", ID_DWL_STATUS, 10, 10, 240, 30, SS_LEFT
CONTROL "Progress", ID_DWL_PROGRESS, PROGRESS_CLASSA, WS_BORDER|PBS_SMOOTH, 10, 40, 240, 12
DEFPUSHBUTTON "安装(&I)", ID_DWL_INSTALL, 200, 60, 50, 15, WS_GROUP | WS_TABSTOP
PUSHBUTTON "取消(&C)", IDCANCEL, 140, 60, 50, 15, WS_GROUP | WS_TABSTOP
}
IDD_HYPERLINK DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 250, 65
STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "超链接"
FONT 9, "MS Song"
{
GROUPBOX "超链接信息", IDC_STATIC, 5, 5, 190, 55
LTEXT "类型(&T):", IDC_STATIC, 10, 22, 20, 10
COMBOBOX IDC_TYPE, 35, 20, 45, 100, WS_TABSTOP | WS_GROUP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_HASSTRINGS
LTEXT "网址(&U):", IDC_STATIC, 10, 42, 20, 10
EDITTEXT IDC_URL, 35, 40, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP
PUSHBUTTON "确定", IDOK, 200, 10, 45, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
PUSHBUTTON "取消", IDCANCEL, 200, 28, 45, 14, WS_GROUP | WS_TABSTOP
}
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
STRINGTABLE DISCARDABLE
{
IDS_HTMLDISABLED "HTML 功能目前已被停用."
IDS_HTMLDOCUMENT "HTML 檔案"
IDS_DOWNLOADING "正在下載..."
IDS_INSTALLING "正在安裝..."
}
ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 260, 85
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Wine Gecko 安裝"
FONT 8, "PMingLiu"
{
LTEXT "這個運用程式要顯示一個HTML 網頁. Wine 需要裝上 Gecko (Mozilla HTML " \
"engine)才能顯示HTML網頁. 如果你想自動下載和安裝Gecko" \
"請按'安裝'.", ID_DWL_STATUS, 10, 10, 240, 30, SS_LEFT
CONTROL "Progress", ID_DWL_PROGRESS, PROGRESS_CLASSA, WS_BORDER|PBS_SMOOTH, 10, 40, 240, 12
DEFPUSHBUTTON "安裝(&I)", ID_DWL_INSTALL, 200, 60, 50, 15, WS_GROUP | WS_TABSTOP
PUSHBUTTON "取消(&C)", IDCANCEL, 140, 60, 50, 15, WS_GROUP | WS_TABSTOP
}
IDD_HYPERLINK DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 250, 65
STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "超鏈接"
FONT 8, "PMingLiu"
{
GROUPBOX "超鏈接資訊", IDC_STATIC, 5, 5, 190, 55
LTEXT "類型(&T):", IDC_STATIC, 10, 22, 20, 10
COMBOBOX IDC_TYPE, 35, 20, 45, 100, WS_TABSTOP | WS_GROUP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_HASSTRINGS
LTEXT "網址(&U):", IDC_STATIC, 10, 42, 20, 10
EDITTEXT IDC_URL, 35, 40, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP
PUSHBUTTON "確定", IDOK, 200, 10, 45, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
PUSHBUTTON "取消", IDCANCEL, 200, 28, 45, 14, WS_GROUP | WS_TABSTOP
}
#pragma code_page(default)

View file

@ -66,6 +66,7 @@ static struct list dispex_data_list = LIST_INIT(dispex_data_list);
static REFIID tid_ids[] = {
&IID_NULL,
&DIID_DispDOMChildrenCollection,
&DIID_DispHTMLBody,
&DIID_DispHTMLCommentElement,
&DIID_DispHTMLDocument,
&DIID_DispHTMLDOMTextNode,
@ -78,7 +79,10 @@ static REFIID tid_ids[] = {
&DIID_DispHTMLStyle,
&DIID_DispHTMLUnknownElement,
&DIID_DispHTMLWindow2,
&IID_IHTMLBodyElement,
&IID_IHTMLBodyElement2,
&IID_IHTMLCommentElement,
&IID_IHTMLControlElement,
&IID_IHTMLDocument2,
&IID_IHTMLDocument3,
&IID_IHTMLDocument4,
@ -89,6 +93,8 @@ static REFIID tid_ids[] = {
&IID_IHTMLDOMTextNode,
&IID_IHTMLElement,
&IID_IHTMLElement2,
&IID_IHTMLElement3,
&IID_IHTMLElement4,
&IID_IHTMLElementCollection,
&IID_IHTMLGenericElement,
&IID_IHTMLImgElement,
@ -96,6 +102,8 @@ static REFIID tid_ids[] = {
&IID_IHTMLOptionElement,
&IID_IHTMLSelectElement,
&IID_IHTMLStyle,
&IID_IHTMLTextContainer,
&IID_IHTMLUniqueName,
&IID_IHTMLWindow2,
&IID_IHTMLWindow3,
&IID_IOmNavigator

View file

@ -67,16 +67,14 @@ static ULONG WINAPI HTMLAnchorElement_Release(IHTMLAnchorElement *iface)
static HRESULT WINAPI HTMLAnchorElement_GetTypeInfoCount(IHTMLAnchorElement *iface, UINT *pctinfo)
{
HTMLAnchorElement *This = HTMLANCHOR_THIS(iface);
FIXME("(%p)->(%p)\n", This, pctinfo);
return E_NOTIMPL;
return IDispatchEx_GetTypeInfoCount(DISPATCHEX(&This->element.node.dispex), pctinfo);
}
static HRESULT WINAPI HTMLAnchorElement_GetTypeInfo(IHTMLAnchorElement *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLAnchorElement *This = HTMLANCHOR_THIS(iface);
FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
return E_NOTIMPL;
return IDispatchEx_GetTypeInfo(DISPATCHEX(&This->element.node.dispex), iTInfo, lcid, ppTInfo);
}
static HRESULT WINAPI HTMLAnchorElement_GetIDsOfNames(IHTMLAnchorElement *iface, REFIID riid,
@ -84,9 +82,7 @@ static HRESULT WINAPI HTMLAnchorElement_GetIDsOfNames(IHTMLAnchorElement *iface,
LCID lcid, DISPID *rgDispId)
{
HTMLAnchorElement *This = HTMLANCHOR_THIS(iface);
FIXME("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
lcid, rgDispId);
return E_NOTIMPL;
return IDispatchEx_GetIDsOfNames(DISPATCHEX(&This->element.node.dispex), riid, rgszNames, cNames, lcid, rgDispId);
}
static HRESULT WINAPI HTMLAnchorElement_Invoke(IHTMLAnchorElement *iface, DISPID dispIdMember,
@ -94,9 +90,8 @@ static HRESULT WINAPI HTMLAnchorElement_Invoke(IHTMLAnchorElement *iface, DISPID
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLAnchorElement *This = HTMLANCHOR_THIS(iface);
FIXME("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
return E_NOTIMPL;
return IDispatchEx_Invoke(DISPATCHEX(&This->element.node.dispex), dispIdMember, riid, lcid,
wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}
static HRESULT WINAPI HTMLAnchorElement_put_href(IHTMLAnchorElement *iface, BSTR v)

View file

@ -110,16 +110,14 @@ static ULONG WINAPI HTMLBodyElement_Release(IHTMLBodyElement *iface)
static HRESULT WINAPI HTMLBodyElement_GetTypeInfoCount(IHTMLBodyElement *iface, UINT *pctinfo)
{
HTMLBodyElement *This = HTMLBODY_THIS(iface);
FIXME("(%p)->(%p)\n", This, pctinfo);
return E_NOTIMPL;
return IDispatchEx_GetTypeInfoCount(DISPATCHEX(&This->textcont.element.node.dispex), pctinfo);
}
static HRESULT WINAPI HTMLBodyElement_GetTypeInfo(IHTMLBodyElement *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLBodyElement *This = HTMLBODY_THIS(iface);
FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
return E_NOTIMPL;
return IDispatchEx_GetTypeInfo(DISPATCHEX(&This->textcont.element.node.dispex), iTInfo, lcid, ppTInfo);
}
static HRESULT WINAPI HTMLBodyElement_GetIDsOfNames(IHTMLBodyElement *iface, REFIID riid,
@ -127,9 +125,7 @@ static HRESULT WINAPI HTMLBodyElement_GetIDsOfNames(IHTMLBodyElement *iface, REF
LCID lcid, DISPID *rgDispId)
{
HTMLBodyElement *This = HTMLBODY_THIS(iface);
FIXME("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
lcid, rgDispId);
return E_NOTIMPL;
return IDispatchEx_GetIDsOfNames(DISPATCHEX(&This->textcont.element.node.dispex), riid, rgszNames, cNames, lcid, rgDispId);
}
static HRESULT WINAPI HTMLBodyElement_Invoke(IHTMLBodyElement *iface, DISPID dispIdMember,
@ -137,9 +133,8 @@ static HRESULT WINAPI HTMLBodyElement_Invoke(IHTMLBodyElement *iface, DISPID dis
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLBodyElement *This = HTMLBODY_THIS(iface);
FIXME("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
return E_NOTIMPL;
return IDispatchEx_Invoke(DISPATCHEX(&This->textcont.element.node.dispex), dispIdMember, riid, lcid,
wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}
static HRESULT WINAPI HTMLBodyElement_put_background(IHTMLBodyElement *iface, BSTR v)
@ -596,6 +591,28 @@ static const NodeImplVtbl HTMLBodyElementImplVtbl = {
HTMLBodyElement_destructor
};
static const tid_t HTMLBodyElement_iface_tids[] = {
IHTMLBodyElement_tid,
IHTMLBodyElement2_tid,
IHTMLControlElement_tid,
IHTMLDOMNode_tid,
IHTMLDOMNode2_tid,
IHTMLElement_tid,
IHTMLElement2_tid,
IHTMLElement3_tid,
IHTMLElement4_tid,
IHTMLTextContainer_tid,
IHTMLUniqueName_tid,
0
};
static dispex_static_data_t HTMLBodyElement_dispex = {
NULL,
DispHTMLBody_tid,
NULL,
HTMLBodyElement_iface_tids
};
HTMLElement *HTMLBodyElement_Create(nsIDOMHTMLElement *nselem)
{
HTMLBodyElement *ret = heap_alloc_zero(sizeof(HTMLBodyElement));
@ -606,6 +623,8 @@ HTMLElement *HTMLBodyElement_Create(nsIDOMHTMLElement *nselem)
HTMLTextContainer_Init(&ret->textcont);
ret->lpHTMLBodyElementVtbl = &HTMLBodyElementVtbl;
init_dispex(&ret->textcont.element.node.dispex, (IUnknown*)HTMLBODY(ret), &HTMLBodyElement_dispex);
ret->textcont.element.node.vtbl = &HTMLBodyElementImplVtbl;
ConnectionPoint_Init(&ret->cp_propnotif, &ret->textcont.element.cp_container, &IID_IPropertyNotifySink);

View file

@ -252,8 +252,12 @@ static HRESULT WINAPI HTMLDocument_Invoke(IHTMLDocument2 *iface, DISPID dispIdMe
static HRESULT WINAPI HTMLDocument_get_Script(IHTMLDocument2 *iface, IDispatch **p)
{
HTMLDocument *This = HTMLDOC_THIS(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
TRACE("(%p)->(%p)\n", This, p);
*p = (IDispatch*)HTMLWINDOW2(This->window);
IDispatch_AddRef(*p);
return S_OK;
}
static HRESULT WINAPI HTMLDocument_get_all(IHTMLDocument2 *iface, IHTMLElementCollection **p)
@ -381,15 +385,70 @@ static HRESULT WINAPI HTMLDocument_get_anchors(IHTMLDocument2 *iface, IHTMLEleme
static HRESULT WINAPI HTMLDocument_put_title(IHTMLDocument2 *iface, BSTR v)
{
HTMLDocument *This = HTMLDOC_THIS(iface);
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
return E_NOTIMPL;
nsIDOMHTMLDocument *nshtmldoc;
nsIDOMDocument *nsdoc;
nsAString nsstr;
nsresult nsres;
TRACE("(%p)->(%s)\n", This, debugstr_w(v));
if(!This->nscontainer)
return E_FAIL;
nsres = nsIWebNavigation_GetDocument(This->nscontainer->navigation, &nsdoc);
if(NS_FAILED(nsres) || !nsdoc) {
ERR("GetDocument failed: %08x\n", nsres);
return E_FAIL;
}
nsIDOMDocument_QueryInterface(nsdoc, &IID_nsIDOMHTMLDocument, (void**)&nshtmldoc);
nsIDOMDocument_Release(nsdoc);
nsAString_Init(&nsstr, v);
nsres = nsIDOMHTMLDocument_SetTitle(nshtmldoc, &nsstr);
nsIDOMHTMLDocument_Release(nshtmldoc);
nsAString_Finish(&nsstr);
if(NS_FAILED(nsres))
ERR("SetTitle failed: %08x\n", nsres);
return S_OK;
}
static HRESULT WINAPI HTMLDocument_get_title(IHTMLDocument2 *iface, BSTR *p)
{
HTMLDocument *This = HTMLDOC_THIS(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
nsIDOMHTMLDocument *nshtmldoc;
nsIDOMDocument *nsdoc;
const PRUnichar *ret;
nsAString nsstr;
nsresult nsres;
TRACE("(%p)->(%p)\n", This, p);
if(!This->nscontainer)
return E_FAIL;
nsres = nsIWebNavigation_GetDocument(This->nscontainer->navigation, &nsdoc);
if(NS_FAILED(nsres) || !nsdoc) {
ERR("GetDocument failed: %08x\n", nsres);
return E_FAIL;
}
nsIDOMDocument_QueryInterface(nsdoc, &IID_nsIDOMHTMLDocument, (void**)&nshtmldoc);
nsIDOMDocument_Release(nsdoc);
nsAString_Init(&nsstr, NULL);
nsres = nsIDOMHTMLDocument_GetTitle(nshtmldoc, &nsstr);
nsIDOMHTMLDocument_Release(nshtmldoc);
if (NS_FAILED(nsres))
ERR("GetTitle failed: %08x\n", nsres);
nsAString_GetData(&nsstr, &ret);
*p = SysAllocString(ret);
nsAString_Finish(&nsstr);
return S_OK;
}
static HRESULT WINAPI HTMLDocument_get_scripts(IHTMLDocument2 *iface, IHTMLElementCollection **p)

View file

@ -103,16 +103,14 @@ static ULONG WINAPI HTMLElement_Release(IHTMLElement *iface)
static HRESULT WINAPI HTMLElement_GetTypeInfoCount(IHTMLElement *iface, UINT *pctinfo)
{
HTMLElement *This = HTMLELEM_THIS(iface);
FIXME("(%p)->(%p)\n", This, pctinfo);
return E_NOTIMPL;
return IDispatchEx_GetTypeInfoCount(DISPATCHEX(&This->node.dispex), pctinfo);
}
static HRESULT WINAPI HTMLElement_GetTypeInfo(IHTMLElement *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLElement *This = HTMLELEM_THIS(iface);
FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
return E_NOTIMPL;
return IDispatchEx_GetTypeInfo(DISPATCHEX(&This->node.dispex), iTInfo, lcid, ppTInfo);
}
static HRESULT WINAPI HTMLElement_GetIDsOfNames(IHTMLElement *iface, REFIID riid,
@ -120,9 +118,7 @@ static HRESULT WINAPI HTMLElement_GetIDsOfNames(IHTMLElement *iface, REFIID riid
LCID lcid, DISPID *rgDispId)
{
HTMLElement *This = HTMLELEM_THIS(iface);
FIXME("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
lcid, rgDispId);
return E_NOTIMPL;
return IDispatchEx_GetIDsOfNames(DISPATCHEX(&This->node.dispex), riid, rgszNames, cNames, lcid, rgDispId);
}
static HRESULT WINAPI HTMLElement_Invoke(IHTMLElement *iface, DISPID dispIdMember,
@ -130,9 +126,8 @@ static HRESULT WINAPI HTMLElement_Invoke(IHTMLElement *iface, DISPID dispIdMembe
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLElement *This = HTMLELEM_THIS(iface);
FIXME("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
return E_NOTIMPL;
return IDispatchEx_Invoke(DISPATCHEX(&This->node.dispex), dispIdMember, riid, lcid,
wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}
static HRESULT WINAPI HTMLElement_setAttribute(IHTMLElement *iface, BSTR strAttributeName,
@ -387,8 +382,21 @@ static HRESULT WINAPI HTMLElement_get_tagName(IHTMLElement *iface, BSTR *p)
static HRESULT WINAPI HTMLElement_get_parentElement(IHTMLElement *iface, IHTMLElement **p)
{
HTMLElement *This = HTMLELEM_THIS(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
IHTMLDOMNode *node;
HRESULT hres;
TRACE("(%p)->(%p)\n", This, p);
hres = IHTMLDOMNode_get_parentNode(HTMLDOMNODE(&This->node), &node);
if(FAILED(hres))
return hres;
hres = IHTMLDOMNode_QueryInterface(node, &IID_IHTMLElement, (void**)p);
IHTMLDOMNode_Release(node);
if(FAILED(hres))
*p = NULL;
return S_OK;
}
static HRESULT WINAPI HTMLElement_get_style(IHTMLElement *iface, IHTMLStyle **p)
@ -745,8 +753,27 @@ static HRESULT WINAPI HTMLElement_get_offsetWidth(IHTMLElement *iface, long *p)
static HRESULT WINAPI HTMLElement_get_offsetHeight(IHTMLElement *iface, long *p)
{
HTMLElement *This = HTMLELEM_THIS(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
nsIDOMNSHTMLElement *nselem;
PRInt32 offset = 0;
nsresult nsres;
TRACE("(%p)->(%p)\n", This, p);
nsres = nsIDOMHTMLElement_QueryInterface(This->nselem, &IID_nsIDOMNSHTMLElement, (void**)&nselem);
if(NS_FAILED(nsres)) {
ERR("Could not get nsIDOMNSHTMLElement: %08x\n", nsres);
return E_FAIL;
}
nsres = nsIDOMNSHTMLElement_GetOffsetHeight(nselem, &offset);
nsIDOMNSHTMLElement_Release(nselem);
if(NS_FAILED(nsres)) {
ERR("GetOffsetHeight failed: %08x\n", nsres);
return E_FAIL;
}
*p = offset;
return S_OK;
}
static HRESULT WINAPI HTMLElement_get_offsetParent(IHTMLElement *iface, IHTMLElement **p)
@ -1896,6 +1923,31 @@ IHTMLElementCollection *create_all_collection(HTMLDOMNode *node)
return HTMLElementCollection_Create((IUnknown*)HTMLDOMNODE(node), buf.buf, buf.len);
}
IHTMLElementCollection *create_collection_from_nodelist(HTMLDocument *doc, IUnknown *unk, nsIDOMNodeList *nslist)
{
PRUint32 length = 0, i;
elem_vector buf;
nsIDOMNodeList_GetLength(nslist, &length);
buf.len = buf.size = length;
if(buf.len) {
nsIDOMNode *nsnode;
buf.buf = heap_alloc(buf.size*sizeof(HTMLElement*));
for(i=0; i<length; i++) {
nsIDOMNodeList_Item(nslist, i, &nsnode);
buf.buf[i] = HTMLELEM_NODE_THIS(get_node(doc, nsnode, TRUE));
nsIDOMNode_Release(nsnode);
}
}else {
buf.buf = NULL;
}
return HTMLElementCollection_Create(unk, buf.buf, buf.len);
}
static IHTMLElementCollection *HTMLElementCollection_Create(IUnknown *ref_unk,
HTMLElement **elems, DWORD len)
{

View file

@ -56,16 +56,14 @@ static ULONG WINAPI HTMLElement2_Release(IHTMLElement2 *iface)
static HRESULT WINAPI HTMLElement2_GetTypeInfoCount(IHTMLElement2 *iface, UINT *pctinfo)
{
HTMLElement *This = HTMLELEM2_THIS(iface);
FIXME("(%p)->(%p)\n", This, pctinfo);
return E_NOTIMPL;
return IDispatchEx_GetTypeInfoCount(DISPATCHEX(&This->node.dispex), pctinfo);
}
static HRESULT WINAPI HTMLElement2_GetTypeInfo(IHTMLElement2 *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLElement *This = HTMLELEM2_THIS(iface);
FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
return E_NOTIMPL;
return IDispatchEx_GetTypeInfo(DISPATCHEX(&This->node.dispex), iTInfo, lcid, ppTInfo);
}
static HRESULT WINAPI HTMLElement2_GetIDsOfNames(IHTMLElement2 *iface, REFIID riid,
@ -73,9 +71,7 @@ static HRESULT WINAPI HTMLElement2_GetIDsOfNames(IHTMLElement2 *iface, REFIID ri
LCID lcid, DISPID *rgDispId)
{
HTMLElement *This = HTMLELEM2_THIS(iface);
FIXME("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
lcid, rgDispId);
return E_NOTIMPL;
return IDispatchEx_GetIDsOfNames(DISPATCHEX(&This->node.dispex), riid, rgszNames, cNames, lcid, rgDispId);
}
static HRESULT WINAPI HTMLElement2_Invoke(IHTMLElement2 *iface, DISPID dispIdMember,
@ -83,9 +79,8 @@ static HRESULT WINAPI HTMLElement2_Invoke(IHTMLElement2 *iface, DISPID dispIdMem
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLElement *This = HTMLELEM2_THIS(iface);
FIXME("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
return E_NOTIMPL;
return IDispatchEx_Invoke(DISPATCHEX(&This->node.dispex), dispIdMember, riid, lcid,
wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}
static HRESULT WINAPI HTMLElement2_get_scopeName(IHTMLElement2 *iface, BSTR *p)
@ -713,15 +708,51 @@ static HRESULT WINAPI HTMLElement2_createControlRange(IHTMLElement2 *iface, IDis
static HRESULT WINAPI HTMLElement2_get_scrollHeight(IHTMLElement2 *iface, long *p)
{
HTMLElement *This = HTMLELEM2_THIS(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
nsIDOMNSHTMLElement *nselem;
PRInt32 height = 0;
nsresult nsres;
TRACE("(%p)->(%p)\n", This, p);
nsres = nsIDOMElement_QueryInterface(This->nselem, &IID_nsIDOMNSHTMLElement, (void**)&nselem);
if(NS_SUCCEEDED(nsres)) {
nsres = nsIDOMNSHTMLElement_GetScrollHeight(nselem, &height);
nsIDOMNSHTMLElement_Release(nselem);
if(NS_FAILED(nsres))
ERR("GetScrollHeight failed: %08x\n", nsres);
}else {
ERR("Could not get nsIDOMNSHTMLElement interface: %08x\n", nsres);
}
*p = height;
TRACE("*p = %ld\n", *p);
return S_OK;
}
static HRESULT WINAPI HTMLElement2_get_scrollWidth(IHTMLElement2 *iface, long *p)
{
HTMLElement *This = HTMLELEM2_THIS(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
nsIDOMNSHTMLElement *nselem;
PRInt32 width = 0;
nsresult nsres;
TRACE("(%p)->(%p)\n", This, p);
nsres = nsIDOMElement_QueryInterface(This->nselem, &IID_nsIDOMNSHTMLElement, (void**)&nselem);
if(NS_SUCCEEDED(nsres)) {
nsres = nsIDOMNSHTMLElement_GetScrollWidth(nselem, &width);
nsIDOMNSHTMLElement_Release(nselem);
if(NS_FAILED(nsres))
ERR("GetScrollWidth failed: %08x\n", nsres);
}else {
ERR("Could not get nsIDOMNSHTMLElement interface: %08x\n", nsres);
}
*p = width;
TRACE("*p = %ld\n", *p);
return S_OK;
}
static HRESULT WINAPI HTMLElement2_put_scrollTop(IHTMLElement2 *iface, long v)
@ -751,8 +782,26 @@ static HRESULT WINAPI HTMLElement2_put_scrollTop(IHTMLElement2 *iface, long v)
static HRESULT WINAPI HTMLElement2_get_scrollTop(IHTMLElement2 *iface, long *p)
{
HTMLElement *This = HTMLELEM2_THIS(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
nsIDOMNSHTMLElement *nselem;
PRInt32 top = 0;
nsresult nsres;
TRACE("(%p)->(%p)\n", This, p);
nsres = nsIDOMElement_QueryInterface(This->nselem, &IID_nsIDOMNSHTMLElement, (void**)&nselem);
if(NS_SUCCEEDED(nsres)) {
nsres = nsIDOMNSHTMLElement_GetScrollTop(nselem, &top);
nsIDOMNSHTMLElement_Release(nselem);
if(NS_FAILED(nsres))
ERR("GetScrollTop failed: %08x\n", nsres);
}else {
ERR("Could not get nsIDOMNSHTMLElement interface: %08x\n", nsres);
}
*p = top;
TRACE("*p = %ld\n", *p);
return S_OK;
}
static HRESULT WINAPI HTMLElement2_put_scrollLeft(IHTMLElement2 *iface, long v)
@ -917,12 +966,27 @@ static HRESULT WINAPI HTMLElement2_get_readyStateValue(IHTMLElement2 *iface, lon
return E_NOTIMPL;
}
static HRESULT WINAPI HTMLElement2_getElementByTagName(IHTMLElement2 *iface, BSTR v,
static HRESULT WINAPI HTMLElement2_getElementsByTagName(IHTMLElement2 *iface, BSTR v,
IHTMLElementCollection **pelColl)
{
HTMLElement *This = HTMLELEM2_THIS(iface);
FIXME("(%p)->(%s %p)\n", This, debugstr_w(v), pelColl);
return E_NOTIMPL;
nsIDOMNodeList *nslist;
nsAString tag_str;
nsresult nsres;
TRACE("(%p)->(%s %p)\n", This, debugstr_w(v), pelColl);
nsAString_Init(&tag_str, v);
nsres = nsIDOMHTMLElement_GetElementsByTagName(This->nselem, &tag_str, &nslist);
nsAString_Finish(&tag_str);
if(NS_FAILED(nsres)) {
ERR("GetElementByTagName failed: %08x\n", nsres);
return E_FAIL;
}
*pelColl = create_collection_from_nodelist(This->node.doc, (IUnknown*)HTMLELEM(This), nslist);
nsIDOMNodeList_Release(nslist);
return S_OK;
}
#undef HTMLELEM2_THIS
@ -1032,7 +1096,7 @@ static const IHTMLElement2Vtbl HTMLElement2Vtbl = {
HTMLElement2_put_onbeforeeditfocus,
HTMLElement2_get_onbeforeeditfocus,
HTMLElement2_get_readyStateValue,
HTMLElement2_getElementByTagName,
HTMLElement2_getElementsByTagName,
};
void HTMLElement2_Init(HTMLElement *This)

View file

@ -279,16 +279,14 @@ static ULONG WINAPI HTMLStyle_Release(IHTMLStyle *iface)
static HRESULT WINAPI HTMLStyle_GetTypeInfoCount(IHTMLStyle *iface, UINT *pctinfo)
{
HTMLStyle *This = HTMLSTYLE_THIS(iface);
FIXME("(%p)->(%p)\n", This, pctinfo);
return E_NOTIMPL;
return IDispatchEx_GetTypeInfoCount(DISPATCHEX(&This->dispex), pctinfo);
}
static HRESULT WINAPI HTMLStyle_GetTypeInfo(IHTMLStyle *iface, UINT iTInfo,
LCID lcid, ITypeInfo **ppTInfo)
{
HTMLStyle *This = HTMLSTYLE_THIS(iface);
FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
return E_NOTIMPL;
return IDispatchEx_GetTypeInfo(DISPATCHEX(&This->dispex), iTInfo, lcid, ppTInfo);
}
static HRESULT WINAPI HTMLStyle_GetIDsOfNames(IHTMLStyle *iface, REFIID riid,
@ -296,9 +294,7 @@ static HRESULT WINAPI HTMLStyle_GetIDsOfNames(IHTMLStyle *iface, REFIID riid,
LCID lcid, DISPID *rgDispId)
{
HTMLStyle *This = HTMLSTYLE_THIS(iface);
FIXME("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
lcid, rgDispId);
return E_NOTIMPL;
return IDispatchEx_GetIDsOfNames(DISPATCHEX(&This->dispex), riid, rgszNames, cNames, lcid, rgDispId);
}
static HRESULT WINAPI HTMLStyle_Invoke(IHTMLStyle *iface, DISPID dispIdMember,
@ -306,9 +302,8 @@ static HRESULT WINAPI HTMLStyle_Invoke(IHTMLStyle *iface, DISPID dispIdMember,
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
{
HTMLStyle *This = HTMLSTYLE_THIS(iface);
FIXME("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
return E_NOTIMPL;
return IDispatchEx_Invoke(DISPATCHEX(&This->dispex), dispIdMember, riid, lcid,
wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
}
static HRESULT WINAPI HTMLStyle_put_fontFamily(IHTMLStyle *iface, BSTR v)
@ -455,8 +450,10 @@ static HRESULT WINAPI HTMLStyle_put_background(IHTMLStyle *iface, BSTR v)
static HRESULT WINAPI HTMLStyle_get_background(IHTMLStyle *iface, BSTR *p)
{
HTMLStyle *This = HTMLSTYLE_THIS(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
TRACE("(%p)->(%p)\n", This, p);
return get_style_attr(This, attrBackground, p);
}
static HRESULT WINAPI HTMLStyle_put_backgroundColor(IHTMLStyle *iface, VARIANT v)

View file

@ -101,47 +101,19 @@ static HRESULT WINAPI HTMLTextContainer_createControlRange(IHTMLTextContainer *i
static HRESULT WINAPI HTMLTextContainer_get_scrollHeight(IHTMLTextContainer *iface, long *p)
{
HTMLTextContainer *This = HTMLTEXTCONT_THIS(iface);
nsIDOMNSHTMLElement *nselem;
PRInt32 height = 0;
nsresult nsres;
TRACE("(%p)->(%p)\n", This, p);
nsres = nsIDOMElement_QueryInterface(This->element.nselem, &IID_nsIDOMNSHTMLElement, (void**)&nselem);
if(NS_SUCCEEDED(nsres)) {
nsIDOMNSHTMLElement_GetScrollHeight(nselem, &height);
nsIDOMNSHTMLElement_Release(nselem);
}else {
ERR("Could not get nsIDOMNSHTMLElement interface: %08x\n", nsres);
}
*p = height;
TRACE("*p = %ld\n", *p);
return S_OK;
return IHTMLElement2_get_scrollHeight(HTMLELEM2(&This->element), p);
}
static HRESULT WINAPI HTMLTextContainer_get_scrollWidth(IHTMLTextContainer *iface, long *p)
{
HTMLTextContainer *This = HTMLTEXTCONT_THIS(iface);
nsIDOMNSHTMLElement *nselem;
PRInt32 width = 0;
nsresult nsres;
TRACE("(%p)->(%p)\n", This, p);
nsres = nsIDOMElement_QueryInterface(This->element.nselem, &IID_nsIDOMNSHTMLElement, (void**)&nselem);
if(NS_SUCCEEDED(nsres)) {
nsIDOMNSHTMLElement_GetScrollWidth(nselem, &width);
nsIDOMNSHTMLElement_Release(nselem);
}else {
ERR("Could not get nsIDOMNSHTMLElement interface: %08x\n", nsres);
}
*p = width;
TRACE("*p = %ld\n", *p);
return S_OK;
return IHTMLElement2_get_scrollWidth(HTMLELEM2(&This->element), p);
}
static HRESULT WINAPI HTMLTextContainer_put_scrollTop(IHTMLTextContainer *iface, long v)
@ -156,8 +128,10 @@ static HRESULT WINAPI HTMLTextContainer_put_scrollTop(IHTMLTextContainer *iface,
static HRESULT WINAPI HTMLTextContainer_get_scrollTop(IHTMLTextContainer *iface, long *p)
{
HTMLTextContainer *This = HTMLTEXTCONT_THIS(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
TRACE("(%p)->(%p)\n", This, p);
return IHTMLElement2_get_scrollTop(HTMLELEM2(&This->element), p);
}
static HRESULT WINAPI HTMLTextContainer_put_scrollLeft(IHTMLTextContainer *iface, long v)

View file

@ -1281,7 +1281,7 @@ void setup_nswindow(HTMLWindow *This)
HTMLWindow *HTMLWindow_Create(HTMLDocument *doc)
{
HTMLWindow *ret = heap_alloc(sizeof(HTMLWindow));
HTMLWindow *ret = heap_alloc_zero(sizeof(HTMLWindow));
ret->lpHTMLWindow2Vtbl = &HTMLWindow2Vtbl;
ret->lpHTMLWindow3Vtbl = &HTMLWindow3Vtbl;

View file

@ -62,6 +62,7 @@ typedef struct event_target_t event_target_t;
typedef enum {
NULL_tid,
DispDOMChildrenCollection_tid,
DispHTMLBody_tid,
DispHTMLCommentElement_tid,
DispHTMLDocument_tid,
DispHTMLDOMTextNode_tid,
@ -74,7 +75,10 @@ typedef enum {
DispHTMLStyle_tid,
DispHTMLUnknownElement_tid,
DispHTMLWindow2_tid,
IHTMLBodyElement_tid,
IHTMLBodyElement2_tid,
IHTMLCommentElement_tid,
IHTMLControlElement_tid,
IHTMLDocument2_tid,
IHTMLDocument3_tid,
IHTMLDocument4_tid,
@ -85,6 +89,8 @@ typedef enum {
IHTMLDOMTextNode_tid,
IHTMLElement_tid,
IHTMLElement2_tid,
IHTMLElement3_tid,
IHTMLElement4_tid,
IHTMLElementCollection_tid,
IHTMLGenericElement_tid,
IHTMLImgElement_tid,
@ -92,6 +98,8 @@ typedef enum {
IHTMLOptionElement_tid,
IHTMLSelectElement_tid,
IHTMLStyle_tid,
IHTMLTextContainer_tid,
IHTMLUniqueName_tid,
IHTMLWindow2_tid,
IHTMLWindow3_tid,
IOmNavigator_tid,
@ -482,7 +490,7 @@ void hlink_frame_navigate(HTMLDocument*,IHlinkFrame*,LPCWSTR,nsIInputStream*,DWO
void call_property_onchanged(ConnectionPoint*,DISPID);
HRESULT call_set_active_object(IOleInPlaceUIWindow*,IOleInPlaceActiveObject*);
void *nsalloc(size_t);
void *nsalloc(size_t) __WINE_ALLOC_SIZE(1);
void nsfree(void*);
void nsACString_Init(nsACString*,const char*);
@ -566,6 +574,7 @@ void doc_insert_script(HTMLDocument*,nsIDOMHTMLScriptElement*);
IDispatch *script_parse_event(HTMLDocument*,LPCWSTR);
IHTMLElementCollection *create_all_collection(HTMLDOMNode*);
IHTMLElementCollection *create_collection_from_nodelist(HTMLDocument*,IUnknown*,nsIDOMNodeList*);
/* commands */
typedef struct {
@ -645,17 +654,17 @@ extern LONG module_ref;
/* memory allocation functions */
static inline void *heap_alloc(size_t len)
static inline void __WINE_ALLOC_SIZE(1) *heap_alloc(size_t len)
{
return HeapAlloc(GetProcessHeap(), 0, len);
}
static inline void *heap_alloc_zero(size_t len)
static inline void __WINE_ALLOC_SIZE(1) *heap_alloc_zero(size_t len)
{
return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len);
}
static inline void *heap_realloc(void *mem, size_t len)
static inline void __WINE_ALLOC_SIZE(2) *heap_realloc(void *mem, size_t len)
{
return HeapReAlloc(GetProcessHeap(), 0, mem, len);
}

View file

@ -127,8 +127,13 @@ static HRESULT WINAPI OmNavigator_Invoke(IOmNavigator *iface, DISPID dispIdMembe
static HRESULT WINAPI OmNavigator_get_appCodeName(IOmNavigator *iface, BSTR *p)
{
OmNavigator *This = OMNAVIGATOR_THIS(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
static const WCHAR mozillaW[] = {'M','o','z','i','l','l','a',0};
TRACE("(%p)->(%p)\n", This, p);
*p = SysAllocString(mozillaW);
return S_OK;
}
static HRESULT WINAPI OmNavigator_get_appName(IOmNavigator *iface, BSTR *p)
@ -232,8 +237,13 @@ static HRESULT WINAPI OmNavigator_get_userLanguage(IOmNavigator *iface, BSTR *p)
static HRESULT WINAPI OmNavigator_get_platform(IOmNavigator *iface, BSTR *p)
{
OmNavigator *This = OMNAVIGATOR_THIS(iface);
FIXME("(%p)->(%p)\n", This, p);
return E_NOTIMPL;
static const WCHAR win32W[] = {'W','i','n','3','2',0};
TRACE("(%p)->(%p)\n", This, p);
*p = SysAllocString(win32W);
return S_OK;
}
static HRESULT WINAPI OmNavigator_get_appMinorVersion(IOmNavigator *iface, BSTR *p)

View file

@ -49,6 +49,7 @@
#include "Si.rc"
#include "Sv.rc"
#include "Tr.rc"
#include "Zh.rc"
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL

View file

@ -128,6 +128,8 @@ static BOOL queue_timer(thread_data_t *thread_data, task_timer_t *timer)
{
task_timer_t *iter;
list_remove(&timer->entry);
if(list_empty(&thread_data->timer_list)
|| LIST_ENTRY(list_head(&thread_data->timer_list), task_timer_t, entry)->time > timer->time) {
@ -159,6 +161,7 @@ DWORD set_task_timer(HTMLDocument *doc, DWORD msec, BOOL interval, IDispatch *di
timer->doc = doc;
timer->time = tc + msec;
timer->interval = interval ? msec : 0;
list_init(&timer->entry);
IDispatch_AddRef(disp);
timer->disp = disp;
@ -363,6 +366,8 @@ static void process_task(task_t *task)
static LRESULT process_timer(void)
{
thread_data_t *thread_data = get_thread_data(TRUE);
HTMLDocument *doc;
IDispatch *disp;
DWORD tc;
task_timer_t *timer;
@ -377,10 +382,9 @@ static LRESULT process_timer(void)
return 0;
}
list_remove(&timer->entry);
list_init(&timer->entry);
call_disp_func(timer->doc, timer->disp);
doc = timer->doc;
disp = timer->disp;
IDispatch_AddRef(disp);
if(timer->interval) {
timer->time += timer->interval;
@ -388,6 +392,10 @@ static LRESULT process_timer(void)
}else {
release_task_timer(thread_data->thread_hwnd, timer);
}
call_disp_func(doc, disp);
IDispatch_Release(disp);
}
KillTimer(thread_data->thread_hwnd, TIMER_ID);

View file

@ -163,6 +163,9 @@
<directory name="mshtml">
<xi:include href="mshtml/mshtml.rbuild" />
</directory>
<directory name="mshtml.tlb">
<xi:include href="mshtml.tlb/mshtml.tlb.rbuild" />
</directory>
<directory name="msi">
<xi:include href="msi/msi.rbuild" />
</directory>