mirror of
https://github.com/reactos/reactos.git
synced 2025-08-02 06:15:52 +00:00
Autosyncing with Wine HEAD
svn path=/trunk/; revision=34369
This commit is contained in:
parent
1e229a53dc
commit
0a953de77e
52 changed files with 13929 additions and 490 deletions
57
reactos/dll/win32/mshtml/Da.rc
Normal file
57
reactos/dll/win32/mshtml/Da.rc
Normal file
|
@ -0,0 +1,57 @@
|
|||
/*
|
||||
* Danish language support
|
||||
*
|
||||
* Copyright (C) 2008 Jens Albretsen <jens@albretsen.dk>
|
||||
*
|
||||
* 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
|
||||
*/
|
||||
|
||||
|
||||
LANGUAGE LANG_DANISH, SUBLANG_DEFAULT
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
{
|
||||
IDS_HTMLDISABLED "HTML optegning er i øjeblikket deaktiveret."
|
||||
IDS_HTMLDOCUMENT "HTML dokument"
|
||||
IDS_DOWNLOADING "Henter..."
|
||||
IDS_INSTALLING "Installerer..."
|
||||
}
|
||||
|
||||
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 "Installere Wine Gecko"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
{
|
||||
LTEXT "Dette program prøver at vise en HTML-side. Wine har brug for Gecko" \
|
||||
"(Mozillas HTML motor) for at vise denne siden. Vælg Installer hvis " \
|
||||
"du vil have at Wine skal hente og installere Gecko automatisk.", 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 "&Installer", ID_DWL_INSTALL, 200, 60, 50, 15, WS_GROUP | WS_TABSTOP
|
||||
PUSHBUTTON "&Annuller", 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 "Hyperlink"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
{
|
||||
GROUPBOX "Information om Hyperlink'en", IDC_STATIC, 5, 5, 190, 55
|
||||
LTEXT "&Type:", IDC_STATIC, 10, 22, 20, 10
|
||||
COMBOBOX IDC_TYPE, 35, 20, 45, 100, WS_TABSTOP | WS_GROUP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_HASSTRINGS
|
||||
LTEXT "&URL:", IDC_STATIC, 10, 42, 20, 10
|
||||
EDITTEXT IDC_URL, 35, 40, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP
|
||||
PUSHBUTTON "OK", IDOK, 200, 10, 45, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
|
||||
PUSHBUTTON "Annuller", IDCANCEL, 200, 28, 45, 14, WS_GROUP | WS_TABSTOP
|
||||
}
|
|
@ -25,4 +25,6 @@ STRINGTABLE DISCARDABLE
|
|||
{
|
||||
IDS_HTMLDISABLED "HTML:n näyttäminen on tällähetkellä poistettu käytöstä."
|
||||
IDS_HTMLDOCUMENT "HTML Dokumentti"
|
||||
IDS_DOWNLOADING "Downloading..."
|
||||
IDS_INSTALLING "Installing..."
|
||||
}
|
||||
|
|
|
@ -23,4 +23,6 @@ STRINGTABLE DISCARDABLE
|
|||
{
|
||||
IDS_HTMLDISABLED "A HTML rajzolás jelenleg le van tiltva."
|
||||
IDS_HTMLDOCUMENT "HTML Dokumentum"
|
||||
IDS_DOWNLOADING "Downloading..."
|
||||
IDS_INSTALLING "Installing..."
|
||||
}
|
||||
|
|
|
@ -25,8 +25,8 @@ STRINGTABLE DISCARDABLE
|
|||
{
|
||||
IDS_HTMLDISABLED "HTML-tegning er for øyeblikket deaktivert."
|
||||
IDS_HTMLDOCUMENT "HTML-dokument"
|
||||
IDS_DOWNLOADING "Laster ned . . ."
|
||||
IDS_INSTALLING "Installerer . . ."
|
||||
IDS_DOWNLOADING "Laster ned..."
|
||||
IDS_INSTALLING "Installerer..."
|
||||
}
|
||||
|
||||
ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 260, 85
|
||||
|
|
|
@ -27,17 +27,17 @@ STRINGTABLE DISCARDABLE
|
|||
IDS_INSTALLING "Óñòàíîâêà..."
|
||||
}
|
||||
|
||||
ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 260, 85
|
||||
ID_DWL_DIALOG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 261, 85
|
||||
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Óñòàíîâêà Wine Gecko"
|
||||
FONT 8, "MS Shell Dlg"
|
||||
{
|
||||
LTEXT "Ýòà ïðîãðàììà ïûòàåòñÿ îòîáðàçèòü HTML ñòðàíèöó. Äëÿ å¸ îòîáðàæåíèÿ Wine íåîáõîäèìî " \
|
||||
"óñòàíîâèòü Gecko (Mozilla HTML engine). Íàæìèòå êíîïêó óñòàíîâèòü åñëè âû õîòèòå, ÷òî áû Wine " \
|
||||
"àâòîìàòè÷åñêè çàãðóçèë è óñòàíîâèë Gecko.", ID_DWL_STATUS, 10, 10, 240, 30, SS_LEFT
|
||||
CONTROL "Ïðîãðåññ", ID_DWL_PROGRESS, PROGRESS_CLASSA, WS_BORDER|PBS_SMOOTH, 10, 40, 240, 12
|
||||
DEFPUSHBUTTON "&Óñòàíîâèòü", ID_DWL_INSTALL, 200, 60, 50, 15, WS_GROUP | WS_TABSTOP
|
||||
PUSHBUTTON "&Îòìåíà", IDCANCEL, 140, 60, 50, 15, WS_GROUP | WS_TABSTOP
|
||||
"àâòîìàòè÷åñêè çàãðóçèë è óñòàíîâèë Gecko.", ID_DWL_STATUS, 10, 10, 240, 33, SS_LEFT
|
||||
CONTROL "Ïðîãðåññ", ID_DWL_PROGRESS, PROGRESS_CLASSA, WS_BORDER|PBS_SMOOTH, 10, 46, 240, 12
|
||||
DEFPUSHBUTTON "&Óñòàíîâèòü", ID_DWL_INSTALL, 200, 63, 50, 15, WS_GROUP | WS_TABSTOP
|
||||
PUSHBUTTON "&Îòìåíà", IDCANCEL, 140, 63, 50, 15, WS_GROUP | WS_TABSTOP
|
||||
}
|
||||
|
||||
IDD_HYPERLINK DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 250, 65
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
*/
|
||||
|
||||
|
||||
LANGUAGE LANG_SWEDISH, SUBLANG_DEFAULT
|
||||
LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
{
|
||||
|
|
652
reactos/dll/win32/mshtml/dispex.c
Normal file
652
reactos/dll/win32/mshtml/dispex.c
Normal file
|
@ -0,0 +1,652 @@
|
|||
/*
|
||||
* Copyright 2008 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 <stdarg.h>
|
||||
|
||||
#define COBJMACROS
|
||||
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
#include "winuser.h"
|
||||
#include "ole2.h"
|
||||
|
||||
#include "wine/debug.h"
|
||||
|
||||
#include "mshtml_private.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
|
||||
|
||||
typedef struct {
|
||||
DISPID id;
|
||||
BSTR name;
|
||||
tid_t tid;
|
||||
} func_info_t;
|
||||
|
||||
struct dispex_data_t {
|
||||
DWORD func_cnt;
|
||||
func_info_t *funcs;
|
||||
func_info_t **name_table;
|
||||
|
||||
struct list entry;
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
VARIANT var;
|
||||
LPWSTR name;
|
||||
} dynamic_prop_t;
|
||||
|
||||
struct dispex_dynamic_data_t {
|
||||
DWORD buf_size;
|
||||
DWORD prop_cnt;
|
||||
dynamic_prop_t *props;
|
||||
};
|
||||
|
||||
#define DISPID_DYNPROP_0 0x50000000
|
||||
#define DISPID_DYNPROP_MAX 0x5fffffff
|
||||
|
||||
static ITypeLib *typelib;
|
||||
static ITypeInfo *typeinfos[LAST_tid];
|
||||
static struct list dispex_data_list = LIST_INIT(dispex_data_list);
|
||||
|
||||
static REFIID tid_ids[] = {
|
||||
&IID_NULL,
|
||||
&DIID_DispDOMChildrenCollection,
|
||||
&DIID_DispHTMLCommentElement,
|
||||
&DIID_DispHTMLDocument,
|
||||
&DIID_DispHTMLDOMTextNode,
|
||||
&DIID_DispHTMLElementCollection,
|
||||
&DIID_DispHTMLGenericElement,
|
||||
&DIID_DispHTMLImg,
|
||||
&DIID_DispHTMLInputElement,
|
||||
&DIID_DispHTMLOptionElement,
|
||||
&DIID_DispHTMLSelectElement,
|
||||
&DIID_DispHTMLStyle,
|
||||
&DIID_DispHTMLUnknownElement,
|
||||
&DIID_DispHTMLWindow2,
|
||||
&IID_IHTMLCommentElement,
|
||||
&IID_IHTMLDocument2,
|
||||
&IID_IHTMLDocument3,
|
||||
&IID_IHTMLDocument4,
|
||||
&IID_IHTMLDocument5,
|
||||
&IID_IHTMLDOMChildrenCollection,
|
||||
&IID_IHTMLDOMNode,
|
||||
&IID_IHTMLDOMNode2,
|
||||
&IID_IHTMLDOMTextNode,
|
||||
&IID_IHTMLElement,
|
||||
&IID_IHTMLElement2,
|
||||
&IID_IHTMLElementCollection,
|
||||
&IID_IHTMLGenericElement,
|
||||
&IID_IHTMLImgElement,
|
||||
&IID_IHTMLInputElement,
|
||||
&IID_IHTMLOptionElement,
|
||||
&IID_IHTMLSelectElement,
|
||||
&IID_IHTMLStyle,
|
||||
&IID_IHTMLWindow2,
|
||||
&IID_IHTMLWindow3,
|
||||
&IID_IOmNavigator
|
||||
};
|
||||
|
||||
HRESULT get_typeinfo(tid_t tid, ITypeInfo **typeinfo)
|
||||
{
|
||||
HRESULT hres;
|
||||
|
||||
if(!typelib) {
|
||||
ITypeLib *tl;
|
||||
|
||||
hres = LoadRegTypeLib(&LIBID_MSHTML, 4, 0, LOCALE_SYSTEM_DEFAULT, &tl);
|
||||
if(FAILED(hres)) {
|
||||
ERR("LoadRegTypeLib failed: %08x\n", hres);
|
||||
return hres;
|
||||
}
|
||||
|
||||
if(InterlockedCompareExchangePointer((void**)&typelib, tl, NULL))
|
||||
ITypeLib_Release(tl);
|
||||
}
|
||||
|
||||
if(!typeinfos[tid]) {
|
||||
ITypeInfo *typeinfo;
|
||||
|
||||
hres = ITypeLib_GetTypeInfoOfGuid(typelib, tid_ids[tid], &typeinfo);
|
||||
if(FAILED(hres)) {
|
||||
ERR("GetTypeInfoOfGuid(%s) failed: %08x\n", debugstr_guid(tid_ids[tid]), hres);
|
||||
return hres;
|
||||
}
|
||||
|
||||
if(InterlockedCompareExchangePointer((void**)(typeinfos+tid), typeinfo, NULL))
|
||||
ITypeInfo_Release(typeinfo);
|
||||
}
|
||||
|
||||
*typeinfo = typeinfos[tid];
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
void release_typelib(void)
|
||||
{
|
||||
dispex_data_t *iter;
|
||||
unsigned i;
|
||||
|
||||
while(!list_empty(&dispex_data_list)) {
|
||||
iter = LIST_ENTRY(list_head(&dispex_data_list), dispex_data_t, entry);
|
||||
list_remove(&iter->entry);
|
||||
|
||||
for(i=0; i < iter->func_cnt; i++)
|
||||
SysFreeString(iter->funcs[i].name);
|
||||
|
||||
heap_free(iter->funcs);
|
||||
heap_free(iter->name_table);
|
||||
heap_free(iter);
|
||||
}
|
||||
|
||||
if(!typelib)
|
||||
return;
|
||||
|
||||
for(i=0; i < sizeof(typeinfos)/sizeof(*typeinfos); i++)
|
||||
if(typeinfos[i])
|
||||
ITypeInfo_Release(typeinfos[i]);
|
||||
|
||||
ITypeLib_Release(typelib);
|
||||
}
|
||||
|
||||
static void add_func_info(dispex_data_t *data, DWORD *size, tid_t tid, DISPID id, ITypeInfo *dti)
|
||||
{
|
||||
HRESULT hres;
|
||||
|
||||
if(data->func_cnt && data->funcs[data->func_cnt-1].id == id)
|
||||
return;
|
||||
|
||||
if(data->func_cnt == *size)
|
||||
data->funcs = heap_realloc(data->funcs, (*size <<= 1)*sizeof(func_info_t));
|
||||
|
||||
hres = ITypeInfo_GetDocumentation(dti, id, &data->funcs[data->func_cnt].name, NULL, NULL, NULL);
|
||||
if(FAILED(hres))
|
||||
return;
|
||||
|
||||
data->funcs[data->func_cnt].id = id;
|
||||
data->funcs[data->func_cnt].tid = tid;
|
||||
|
||||
data->func_cnt++;
|
||||
}
|
||||
|
||||
static int dispid_cmp(const void *p1, const void *p2)
|
||||
{
|
||||
return ((func_info_t*)p1)->id - ((func_info_t*)p2)->id;
|
||||
}
|
||||
|
||||
static int func_name_cmp(const void *p1, const void *p2)
|
||||
{
|
||||
return strcmpiW((*(func_info_t**)p1)->name, (*(func_info_t**)p2)->name);
|
||||
}
|
||||
|
||||
static dispex_data_t *preprocess_dispex_data(DispatchEx *This)
|
||||
{
|
||||
const tid_t *tid = This->data->iface_tids;
|
||||
FUNCDESC *funcdesc;
|
||||
dispex_data_t *data;
|
||||
DWORD size = 16, i;
|
||||
ITypeInfo *ti, *dti;
|
||||
HRESULT hres;
|
||||
|
||||
TRACE("(%p)\n", This);
|
||||
|
||||
hres = get_typeinfo(This->data->disp_tid, &dti);
|
||||
if(FAILED(hres)) {
|
||||
ERR("Could not get disp type info: %08x\n", hres);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
data = heap_alloc(sizeof(dispex_data_t));
|
||||
data->func_cnt = 0;
|
||||
data->funcs = heap_alloc(size*sizeof(func_info_t));
|
||||
list_add_tail(&dispex_data_list, &data->entry);
|
||||
|
||||
while(*tid) {
|
||||
hres = get_typeinfo(*tid, &ti);
|
||||
if(FAILED(hres))
|
||||
break;
|
||||
|
||||
i=7;
|
||||
while(1) {
|
||||
hres = ITypeInfo_GetFuncDesc(ti, i++, &funcdesc);
|
||||
if(FAILED(hres))
|
||||
break;
|
||||
|
||||
add_func_info(data, &size, *tid, funcdesc->memid, dti);
|
||||
ITypeInfo_ReleaseFuncDesc(ti, funcdesc);
|
||||
}
|
||||
|
||||
tid++;
|
||||
}
|
||||
|
||||
if(!data->func_cnt) {
|
||||
heap_free(data->funcs);
|
||||
data->funcs = NULL;
|
||||
}else if(data->func_cnt != size) {
|
||||
data->funcs = heap_realloc(data->funcs, data->func_cnt * sizeof(func_info_t));
|
||||
}
|
||||
|
||||
qsort(data->funcs, data->func_cnt, sizeof(func_info_t), dispid_cmp);
|
||||
|
||||
if(data->funcs) {
|
||||
data->name_table = heap_alloc(data->func_cnt * sizeof(func_info_t*));
|
||||
for(i=0; i < data->func_cnt; i++)
|
||||
data->name_table[i] = data->funcs+i;
|
||||
qsort(data->name_table, data->func_cnt, sizeof(func_info_t*), func_name_cmp);
|
||||
}else {
|
||||
data->name_table = NULL;
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
static CRITICAL_SECTION cs_dispex_static_data;
|
||||
static CRITICAL_SECTION_DEBUG cs_dispex_static_data_dbg =
|
||||
{
|
||||
0, 0, &cs_dispex_static_data,
|
||||
{ &cs_dispex_static_data_dbg.ProcessLocksList, &cs_dispex_static_data_dbg.ProcessLocksList },
|
||||
0, 0, { (DWORD_PTR)(__FILE__ ": dispex_static_data") }
|
||||
};
|
||||
static CRITICAL_SECTION cs_dispex_static_data = { &cs_dispex_static_data_dbg, -1, 0, 0, 0, 0 };
|
||||
|
||||
|
||||
static dispex_data_t *get_dispex_data(DispatchEx *This)
|
||||
{
|
||||
if(This->data->data)
|
||||
return This->data->data;
|
||||
|
||||
EnterCriticalSection(&cs_dispex_static_data);
|
||||
|
||||
if(!This->data->data)
|
||||
This->data->data = preprocess_dispex_data(This);
|
||||
|
||||
LeaveCriticalSection(&cs_dispex_static_data);
|
||||
|
||||
return This->data->data;
|
||||
}
|
||||
|
||||
void call_disp_func(HTMLDocument *doc, IDispatch *disp)
|
||||
{
|
||||
DISPID named_arg = DISPID_THIS;
|
||||
VARIANTARG arg;
|
||||
DISPPARAMS params = {&arg, &named_arg, 1, 1};
|
||||
EXCEPINFO ei;
|
||||
IDispatchEx *dispex;
|
||||
VARIANT res;
|
||||
HRESULT hres;
|
||||
|
||||
hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex);
|
||||
if(FAILED(hres)) {
|
||||
FIXME("Could not get IDispatchEx interface: %08x\n", hres);
|
||||
return;
|
||||
}
|
||||
|
||||
V_VT(&arg) = VT_DISPATCH;
|
||||
V_DISPATCH(&arg) = (IDispatch*)HTMLWINDOW2(doc->window);
|
||||
VariantInit(&res);
|
||||
memset(&ei, 0, sizeof(ei));
|
||||
|
||||
hres = IDispatchEx_InvokeEx(dispex, 0, GetUserDefaultLCID(), DISPATCH_METHOD, ¶ms, &res, &ei, NULL);
|
||||
IDispatchEx_Release(dispex);
|
||||
|
||||
TRACE("%p returned %08x\n", disp, hres);
|
||||
|
||||
VariantClear(&res);
|
||||
}
|
||||
|
||||
static inline BOOL is_custom_dispid(DISPID id)
|
||||
{
|
||||
return MSHTML_DISPID_CUSTOM_MIN <= id && id <= MSHTML_DISPID_CUSTOM_MAX;
|
||||
}
|
||||
|
||||
static inline BOOL is_dynamic_dispid(DISPID id)
|
||||
{
|
||||
return DISPID_DYNPROP_0 <= id && id <= DISPID_DYNPROP_MAX;
|
||||
}
|
||||
|
||||
#define DISPATCHEX_THIS(iface) DEFINE_THIS(DispatchEx, IDispatchEx, iface)
|
||||
|
||||
static HRESULT WINAPI DispatchEx_QueryInterface(IDispatchEx *iface, REFIID riid, void **ppv)
|
||||
{
|
||||
DispatchEx *This = DISPATCHEX_THIS(iface);
|
||||
|
||||
return IUnknown_QueryInterface(This->outer, riid, ppv);
|
||||
}
|
||||
|
||||
static ULONG WINAPI DispatchEx_AddRef(IDispatchEx *iface)
|
||||
{
|
||||
DispatchEx *This = DISPATCHEX_THIS(iface);
|
||||
|
||||
return IUnknown_AddRef(This->outer);
|
||||
}
|
||||
|
||||
static ULONG WINAPI DispatchEx_Release(IDispatchEx *iface)
|
||||
{
|
||||
DispatchEx *This = DISPATCHEX_THIS(iface);
|
||||
|
||||
return IUnknown_Release(This->outer);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI DispatchEx_GetTypeInfoCount(IDispatchEx *iface, UINT *pctinfo)
|
||||
{
|
||||
DispatchEx *This = DISPATCHEX_THIS(iface);
|
||||
|
||||
TRACE("(%p)->(%p)\n", This, pctinfo);
|
||||
|
||||
*pctinfo = 1;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI DispatchEx_GetTypeInfo(IDispatchEx *iface, UINT iTInfo,
|
||||
LCID lcid, ITypeInfo **ppTInfo)
|
||||
{
|
||||
DispatchEx *This = DISPATCHEX_THIS(iface);
|
||||
HRESULT hres;
|
||||
|
||||
TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
|
||||
|
||||
hres = get_typeinfo(This->data->disp_tid, ppTInfo);
|
||||
if(FAILED(hres))
|
||||
return hres;
|
||||
|
||||
ITypeInfo_AddRef(*ppTInfo);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI DispatchEx_GetIDsOfNames(IDispatchEx *iface, REFIID riid,
|
||||
LPOLESTR *rgszNames, UINT cNames,
|
||||
LCID lcid, DISPID *rgDispId)
|
||||
{
|
||||
DispatchEx *This = DISPATCHEX_THIS(iface);
|
||||
UINT i;
|
||||
HRESULT hres;
|
||||
|
||||
TRACE("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
|
||||
lcid, rgDispId);
|
||||
|
||||
for(i=0; i < cNames; i++) {
|
||||
hres = IDispatchEx_GetDispID(DISPATCHEX(This), rgszNames[i], 0, rgDispId+i);
|
||||
if(FAILED(hres))
|
||||
return hres;
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI DispatchEx_Invoke(IDispatchEx *iface, DISPID dispIdMember,
|
||||
REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
|
||||
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
|
||||
{
|
||||
DispatchEx *This = DISPATCHEX_THIS(iface);
|
||||
|
||||
TRACE("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
|
||||
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
|
||||
|
||||
return IDispatchEx_InvokeEx(DISPATCHEX(This), dispIdMember, lcid, wFlags,
|
||||
pDispParams, pVarResult, pExcepInfo, NULL);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI DispatchEx_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD grfdex, DISPID *pid)
|
||||
{
|
||||
DispatchEx *This = DISPATCHEX_THIS(iface);
|
||||
dispex_data_t *data;
|
||||
int min, max, n, c;
|
||||
|
||||
TRACE("(%p)->(%s %x %p)\n", This, debugstr_w(bstrName), grfdex, pid);
|
||||
|
||||
if(grfdex & ~(fdexNameCaseSensitive|fdexNameEnsure|fdexNameImplicit))
|
||||
FIXME("Unsupported grfdex %x\n", grfdex);
|
||||
|
||||
data = get_dispex_data(This);
|
||||
if(!data)
|
||||
return E_FAIL;
|
||||
|
||||
min = 0;
|
||||
max = data->func_cnt-1;
|
||||
|
||||
while(min <= max) {
|
||||
n = (min+max)/2;
|
||||
|
||||
c = strcmpiW(data->name_table[n]->name, bstrName);
|
||||
if(!c) {
|
||||
if((grfdex & fdexNameCaseSensitive) && strcmpW(data->name_table[n]->name, bstrName))
|
||||
break;
|
||||
|
||||
*pid = data->name_table[n]->id;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
if(c > 0)
|
||||
max = n-1;
|
||||
else
|
||||
min = n+1;
|
||||
}
|
||||
|
||||
if(This->dynamic_data) {
|
||||
unsigned i;
|
||||
|
||||
for(i=0; i < This->dynamic_data->prop_cnt; i++) {
|
||||
if(!strcmpW(This->dynamic_data->props[i].name, bstrName)) {
|
||||
*pid = DISPID_DYNPROP_0 + i;
|
||||
return S_OK;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(This->data->vtbl && This->data->vtbl->get_dispid) {
|
||||
HRESULT hres;
|
||||
|
||||
hres = This->data->vtbl->get_dispid(This->outer, bstrName, grfdex, pid);
|
||||
if(hres != DISP_E_UNKNOWNNAME)
|
||||
return hres;
|
||||
}
|
||||
|
||||
if(grfdex & fdexNameEnsure) {
|
||||
TRACE("creating dynamic prop %s\n", debugstr_w(bstrName));
|
||||
|
||||
if(!This->dynamic_data) {
|
||||
This->dynamic_data = heap_alloc_zero(sizeof(dispex_dynamic_data_t));
|
||||
This->dynamic_data->props = heap_alloc(This->dynamic_data->buf_size = 4);
|
||||
}else if(This->dynamic_data->buf_size == This->dynamic_data->prop_cnt) {
|
||||
This->dynamic_data->props = heap_realloc(This->dynamic_data->props, This->dynamic_data->buf_size<<=1);
|
||||
}
|
||||
|
||||
This->dynamic_data->props[This->dynamic_data->prop_cnt].name = heap_strdupW(bstrName);
|
||||
VariantInit(&This->dynamic_data->props[This->dynamic_data->prop_cnt].var);
|
||||
*pid = DISPID_DYNPROP_0 + This->dynamic_data->prop_cnt++;
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
TRACE("not found %s\n", debugstr_w(bstrName));
|
||||
return DISP_E_UNKNOWNNAME;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI DispatchEx_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp,
|
||||
VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
|
||||
{
|
||||
DispatchEx *This = DISPATCHEX_THIS(iface);
|
||||
IUnknown *unk;
|
||||
ITypeInfo *ti;
|
||||
dispex_data_t *data;
|
||||
UINT argerr=0;
|
||||
int min, max, n;
|
||||
HRESULT hres;
|
||||
|
||||
TRACE("(%p)->(%x %x %x %p %p %p %p)\n", This, id, lcid, wFlags, pdp, pvarRes, pei, pspCaller);
|
||||
|
||||
if(is_custom_dispid(id) && This->data->vtbl && This->data->vtbl->invoke)
|
||||
return This->data->vtbl->invoke(This->outer, id, lcid, wFlags, pdp, pvarRes, pei, pspCaller);
|
||||
|
||||
if(wFlags == DISPATCH_CONSTRUCT) {
|
||||
FIXME("DISPATCH_CONSTRUCT not implemented\n");
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
if(is_dynamic_dispid(id)) {
|
||||
DWORD idx = id - DISPID_DYNPROP_0;
|
||||
VARIANT *var;
|
||||
|
||||
if(!This->dynamic_data || This->dynamic_data->prop_cnt <= idx)
|
||||
return DISP_E_UNKNOWNNAME;
|
||||
|
||||
var = &This->dynamic_data->props[idx].var;
|
||||
|
||||
switch(wFlags) {
|
||||
case INVOKE_PROPERTYGET:
|
||||
return VariantCopy(pvarRes, var);
|
||||
case INVOKE_PROPERTYPUT:
|
||||
VariantClear(var);
|
||||
return VariantCopy(var, pdp->rgvarg);
|
||||
default:
|
||||
FIXME("unhandled wFlags %x\n", wFlags);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
}
|
||||
|
||||
data = get_dispex_data(This);
|
||||
if(!data)
|
||||
return E_FAIL;
|
||||
|
||||
min = 0;
|
||||
max = data->func_cnt-1;
|
||||
|
||||
while(min <= max) {
|
||||
n = (min+max)/2;
|
||||
|
||||
if(data->funcs[n].id == id)
|
||||
break;
|
||||
|
||||
if(data->funcs[n].id < id)
|
||||
min = n+1;
|
||||
else
|
||||
max = n-1;
|
||||
}
|
||||
|
||||
if(min > max) {
|
||||
WARN("invalid id %x\n", id);
|
||||
return DISP_E_UNKNOWNNAME;
|
||||
}
|
||||
|
||||
hres = get_typeinfo(data->funcs[n].tid, &ti);
|
||||
if(FAILED(hres)) {
|
||||
ERR("Could not get type info: %08x\n", hres);
|
||||
return hres;
|
||||
}
|
||||
|
||||
hres = IUnknown_QueryInterface(This->outer, tid_ids[data->funcs[n].tid], (void**)&unk);
|
||||
if(FAILED(hres)) {
|
||||
ERR("Could not get iface: %08x\n", hres);
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
hres = ITypeInfo_Invoke(ti, unk, id, wFlags, pdp, pvarRes, pei, &argerr);
|
||||
|
||||
IUnknown_Release(unk);
|
||||
return hres;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI DispatchEx_DeleteMemberByName(IDispatchEx *iface, BSTR bstrName, DWORD grfdex)
|
||||
{
|
||||
DispatchEx *This = DISPATCHEX_THIS(iface);
|
||||
FIXME("(%p)->(%s %x)\n", This, debugstr_w(bstrName), grfdex);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI DispatchEx_DeleteMemberByDispID(IDispatchEx *iface, DISPID id)
|
||||
{
|
||||
DispatchEx *This = DISPATCHEX_THIS(iface);
|
||||
FIXME("(%p)->(%x)\n", This, id);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI DispatchEx_GetMemberProperties(IDispatchEx *iface, DISPID id, DWORD grfdexFetch, DWORD *pgrfdex)
|
||||
{
|
||||
DispatchEx *This = DISPATCHEX_THIS(iface);
|
||||
FIXME("(%p)->(%x %x %p)\n", This, id, grfdexFetch, pgrfdex);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI DispatchEx_GetMemberName(IDispatchEx *iface, DISPID id, BSTR *pbstrName)
|
||||
{
|
||||
DispatchEx *This = DISPATCHEX_THIS(iface);
|
||||
FIXME("(%p)->(%x %p)\n", This, id, pbstrName);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI DispatchEx_GetNextDispID(IDispatchEx *iface, DWORD grfdex, DISPID id, DISPID *pid)
|
||||
{
|
||||
DispatchEx *This = DISPATCHEX_THIS(iface);
|
||||
FIXME("(%p)->(%x %x %p)\n", This, grfdex, id, pid);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI DispatchEx_GetNameSpaceParent(IDispatchEx *iface, IUnknown **ppunk)
|
||||
{
|
||||
DispatchEx *This = DISPATCHEX_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, ppunk);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
#undef DISPATCHEX_THIS
|
||||
|
||||
static IDispatchExVtbl DispatchExVtbl = {
|
||||
DispatchEx_QueryInterface,
|
||||
DispatchEx_AddRef,
|
||||
DispatchEx_Release,
|
||||
DispatchEx_GetTypeInfoCount,
|
||||
DispatchEx_GetTypeInfo,
|
||||
DispatchEx_GetIDsOfNames,
|
||||
DispatchEx_Invoke,
|
||||
DispatchEx_GetDispID,
|
||||
DispatchEx_InvokeEx,
|
||||
DispatchEx_DeleteMemberByName,
|
||||
DispatchEx_DeleteMemberByDispID,
|
||||
DispatchEx_GetMemberProperties,
|
||||
DispatchEx_GetMemberName,
|
||||
DispatchEx_GetNextDispID,
|
||||
DispatchEx_GetNameSpaceParent
|
||||
};
|
||||
|
||||
BOOL dispex_query_interface(DispatchEx *This, REFIID riid, void **ppv)
|
||||
{
|
||||
static const IID IID_UndocumentedScriptIface =
|
||||
{0x719c3050,0xf9d3,0x11cf,{0xa4,0x93,0x00,0x40,0x05,0x23,0xa8,0xa0}};
|
||||
|
||||
if(IsEqualGUID(&IID_IDispatch, riid)) {
|
||||
TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
|
||||
*ppv = DISPATCHEX(This);
|
||||
}else if(IsEqualGUID(&IID_IDispatchEx, riid)) {
|
||||
TRACE("(%p)->(IID_IDispatchEx %p)\n", This, ppv);
|
||||
*ppv = DISPATCHEX(This);
|
||||
}else if(IsEqualGUID(&IID_UndocumentedScriptIface, riid)) {
|
||||
TRACE("(%p)->(IID_UndocumentedScriptIface %p) returning NULL\n", This, ppv);
|
||||
*ppv = NULL;
|
||||
}else {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if(*ppv)
|
||||
IUnknown_AddRef((IUnknown*)*ppv);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void init_dispex(DispatchEx *dispex, IUnknown *outer, dispex_static_data_t *data)
|
||||
{
|
||||
dispex->lpIDispatchExVtbl = &DispatchExVtbl;
|
||||
dispex->outer = outer;
|
||||
dispex->data = data;
|
||||
}
|
|
@ -481,7 +481,7 @@ static const NodeImplVtbl HTMLAnchorElementImplVtbl = {
|
|||
|
||||
HTMLElement *HTMLAnchorElement_Create(nsIDOMHTMLElement *nselem)
|
||||
{
|
||||
HTMLAnchorElement *ret = heap_alloc(sizeof(HTMLAnchorElement));
|
||||
HTMLAnchorElement *ret = heap_alloc_zero(sizeof(HTMLAnchorElement));
|
||||
|
||||
HTMLElement_Init(&ret->element);
|
||||
|
||||
|
|
|
@ -598,7 +598,7 @@ static const NodeImplVtbl HTMLBodyElementImplVtbl = {
|
|||
|
||||
HTMLElement *HTMLBodyElement_Create(nsIDOMHTMLElement *nselem)
|
||||
{
|
||||
HTMLBodyElement *ret = heap_alloc(sizeof(HTMLBodyElement));
|
||||
HTMLBodyElement *ret = heap_alloc_zero(sizeof(HTMLBodyElement));
|
||||
nsresult nsres;
|
||||
|
||||
TRACE("(%p)->(%p)\n", ret, nselem);
|
||||
|
|
205
reactos/dll/win32/mshtml/htmlcomment.c
Normal file
205
reactos/dll/win32/mshtml/htmlcomment.c
Normal file
|
@ -0,0 +1,205 @@
|
|||
/*
|
||||
* Copyright 2008 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 <stdarg.h>
|
||||
|
||||
#define COBJMACROS
|
||||
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
#include "winuser.h"
|
||||
#include "ole2.h"
|
||||
|
||||
#include "mshtml_private.h"
|
||||
|
||||
#include "wine/debug.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
|
||||
|
||||
typedef struct {
|
||||
HTMLElement element;
|
||||
const IHTMLCommentElementVtbl *lpIHTMLCommentElementVtbl;
|
||||
} HTMLCommentElement;
|
||||
|
||||
#define HTMLCOMMENT(x) ((IHTMLCommentElement*) &(x)->lpIHTMLCommentElementVtbl)
|
||||
|
||||
#define HTMLCOMMENT_THIS(iface) DEFINE_THIS(HTMLCommentElement, IHTMLCommentElement, iface)
|
||||
|
||||
static HRESULT WINAPI HTMLCommentElement_QueryInterface(IHTMLCommentElement *iface,
|
||||
REFIID riid, void **ppv)
|
||||
{
|
||||
HTMLCommentElement *This = HTMLCOMMENT_THIS(iface);
|
||||
|
||||
return IHTMLDOMNode_QueryInterface(HTMLDOMNODE(&This->element.node), riid, ppv);
|
||||
}
|
||||
|
||||
static ULONG WINAPI HTMLCommentElement_AddRef(IHTMLCommentElement *iface)
|
||||
{
|
||||
HTMLCommentElement *This = HTMLCOMMENT_THIS(iface);
|
||||
|
||||
return IHTMLDOMNode_AddRef(HTMLDOMNODE(&This->element.node));
|
||||
}
|
||||
|
||||
static ULONG WINAPI HTMLCommentElement_Release(IHTMLCommentElement *iface)
|
||||
{
|
||||
HTMLCommentElement *This = HTMLCOMMENT_THIS(iface);
|
||||
|
||||
return IHTMLDOMNode_Release(HTMLDOMNODE(&This->element.node));
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLCommentElement_GetTypeInfoCount(IHTMLCommentElement *iface, UINT *pctinfo)
|
||||
{
|
||||
HTMLCommentElement *This = HTMLCOMMENT_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, pctinfo);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLCommentElement_GetTypeInfo(IHTMLCommentElement *iface, UINT iTInfo,
|
||||
LCID lcid, ITypeInfo **ppTInfo)
|
||||
{
|
||||
HTMLCommentElement *This = HTMLCOMMENT_THIS(iface);
|
||||
FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLCommentElement_GetIDsOfNames(IHTMLCommentElement *iface, REFIID riid,
|
||||
LPOLESTR *rgszNames, UINT cNames,
|
||||
LCID lcid, DISPID *rgDispId)
|
||||
{
|
||||
HTMLCommentElement *This = HTMLCOMMENT_THIS(iface);
|
||||
FIXME("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
|
||||
lcid, rgDispId);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLCommentElement_Invoke(IHTMLCommentElement *iface, DISPID dispIdMember,
|
||||
REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
|
||||
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
|
||||
{
|
||||
HTMLCommentElement *This = HTMLCOMMENT_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;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLCommentElement_put_text(IHTMLCommentElement *iface, BSTR v)
|
||||
{
|
||||
HTMLCommentElement *This = HTMLCOMMENT_THIS(iface);
|
||||
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLCommentElement_get_text(IHTMLCommentElement *iface, BSTR *p)
|
||||
{
|
||||
HTMLCommentElement *This = HTMLCOMMENT_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLCommentElement_put_atomic(IHTMLCommentElement *iface, long v)
|
||||
{
|
||||
HTMLCommentElement *This = HTMLCOMMENT_THIS(iface);
|
||||
FIXME("(%p)->(%ld)\n", This, v);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLCommentElement_get_atomic(IHTMLCommentElement *iface, long *p)
|
||||
{
|
||||
HTMLCommentElement *This = HTMLCOMMENT_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
#undef HTMLCOMMENT_THIS
|
||||
|
||||
static const IHTMLCommentElementVtbl HTMLCommentElementVtbl = {
|
||||
HTMLCommentElement_QueryInterface,
|
||||
HTMLCommentElement_AddRef,
|
||||
HTMLCommentElement_Release,
|
||||
HTMLCommentElement_GetTypeInfoCount,
|
||||
HTMLCommentElement_GetTypeInfo,
|
||||
HTMLCommentElement_GetIDsOfNames,
|
||||
HTMLCommentElement_Invoke,
|
||||
HTMLCommentElement_put_text,
|
||||
HTMLCommentElement_get_text,
|
||||
HTMLCommentElement_put_atomic,
|
||||
HTMLCommentElement_get_atomic
|
||||
};
|
||||
|
||||
#define HTMLCOMMENT_NODE_THIS(iface) DEFINE_THIS2(HTMLCommentElement, element.node, iface)
|
||||
|
||||
HRESULT HTMLCommentElement_QI(HTMLDOMNode *iface, REFIID riid, void **ppv)
|
||||
{
|
||||
HTMLCommentElement *This = HTMLCOMMENT_NODE_THIS(iface);
|
||||
|
||||
*ppv = NULL;
|
||||
|
||||
if(IsEqualGUID(&IID_IHTMLCommentElement, riid)) {
|
||||
TRACE("(%p)->(IID_IHTMLCommentElement %p)\n", This, ppv);
|
||||
*ppv = HTMLCOMMENT(This);
|
||||
}else {
|
||||
return HTMLElement_QI(&This->element.node, riid, ppv);
|
||||
}
|
||||
|
||||
IUnknown_AddRef((IUnknown*)*ppv);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
void HTMLCommentElement_destructor(HTMLDOMNode *iface)
|
||||
{
|
||||
HTMLCommentElement *This = HTMLCOMMENT_NODE_THIS(iface);
|
||||
|
||||
HTMLElement_destructor(&This->element.node);
|
||||
}
|
||||
|
||||
#undef HTMLCOMMENT_NODE_THIS
|
||||
|
||||
static const NodeImplVtbl HTMLCommentElementImplVtbl = {
|
||||
HTMLCommentElement_QI,
|
||||
HTMLCommentElement_destructor
|
||||
};
|
||||
|
||||
static const tid_t HTMLCommentElement_iface_tids[] = {
|
||||
IHTMLDOMNode_tid,
|
||||
IHTMLDOMNode2_tid,
|
||||
IHTMLElement_tid,
|
||||
IHTMLElement2_tid,
|
||||
IHTMLCommentElement_tid,
|
||||
0
|
||||
};
|
||||
static dispex_static_data_t HTMLCommentElement_dispex = {
|
||||
NULL,
|
||||
DispHTMLCommentElement_tid,
|
||||
NULL,
|
||||
HTMLCommentElement_iface_tids
|
||||
};
|
||||
|
||||
HTMLElement *HTMLCommentElement_Create(HTMLDocument *doc, nsIDOMNode *nsnode)
|
||||
{
|
||||
HTMLCommentElement *ret = heap_alloc_zero(sizeof(*ret));
|
||||
|
||||
ret->element.node.vtbl = &HTMLCommentElementImplVtbl;
|
||||
ret->lpIHTMLCommentElementVtbl = &HTMLCommentElementVtbl;
|
||||
|
||||
init_dispex(&ret->element.node.dispex, (IUnknown*)HTMLCOMMENT(ret), &HTMLCommentElement_dispex);
|
||||
HTMLElement_Init(&ret->element);
|
||||
HTMLDOMNode_Init(doc, &ret->element.node, nsnode);
|
||||
|
||||
return &ret->element;
|
||||
}
|
File diff suppressed because it is too large
Load diff
|
@ -108,8 +108,31 @@ static HRESULT WINAPI HTMLDocument3_createTextNode(IHTMLDocument3 *iface, BSTR t
|
|||
IHTMLDOMNode **newTextNode)
|
||||
{
|
||||
HTMLDocument *This = HTMLDOC3_THIS(iface);
|
||||
FIXME("(%p)->(%s %p)\n", This, debugstr_w(text), newTextNode);
|
||||
return E_NOTIMPL;
|
||||
nsIDOMDocument *nsdoc;
|
||||
nsIDOMText *nstext;
|
||||
HTMLDOMNode *node;
|
||||
nsAString text_str;
|
||||
nsresult nsres;
|
||||
|
||||
TRACE("(%p)->(%s %p)\n", This, debugstr_w(text), newTextNode);
|
||||
|
||||
nsIWebNavigation_GetDocument(This->nscontainer->navigation, &nsdoc);
|
||||
|
||||
nsAString_Init(&text_str, text);
|
||||
nsres = nsIDOMDocument_CreateTextNode(nsdoc, &text_str, &nstext);
|
||||
nsAString_Finish(&text_str);
|
||||
nsIDOMDocument_Release(nsdoc);
|
||||
if(NS_FAILED(nsres)) {
|
||||
ERR("CreateTextNode failed: %08x\n", nsres);
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
node = HTMLDOMTextNode_Create(This, (nsIDOMNode*)nstext);
|
||||
nsIDOMElement_Release(nstext);
|
||||
|
||||
*newTextNode = HTMLDOMNODE(node);
|
||||
IHTMLDOMNode_AddRef(HTMLDOMNODE(node));
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDocument3_get_documentElement(IHTMLDocument3 *iface, IHTMLElement **p)
|
||||
|
@ -137,7 +160,7 @@ static HRESULT WINAPI HTMLDocument3_get_documentElement(IHTMLDocument3 *iface, I
|
|||
ERR("GetDocumentElement failed: %08x\n", nsres);
|
||||
}
|
||||
if(nselem) {
|
||||
node = get_node(This, (nsIDOMNode *)nselem);
|
||||
node = get_node(This, (nsIDOMNode *)nselem, TRUE);
|
||||
nsIDOMDocument_Release(nsdoc);
|
||||
|
||||
IHTMLDOMNode_QueryInterface(HTMLDOMNODE(node), &IID_IHTMLElement, (void**)p);
|
||||
|
@ -407,8 +430,37 @@ static HRESULT WINAPI HTMLDocument3_getElementById(IHTMLDocument3 *iface, BSTR v
|
|||
IHTMLElement **pel)
|
||||
{
|
||||
HTMLDocument *This = HTMLDOC3_THIS(iface);
|
||||
FIXME("(%p)->(%s %p)\n", This, debugstr_w(v), pel);
|
||||
return E_NOTIMPL;
|
||||
nsIDOMDocument *nsdoc = NULL;
|
||||
nsIDOMElement *nselem = NULL;
|
||||
HTMLDOMNode *node;
|
||||
nsAString id_str;
|
||||
nsresult nsres;
|
||||
|
||||
TRACE("(%p)->(%s %p)\n", This, debugstr_w(v), pel);
|
||||
|
||||
*pel = NULL;
|
||||
|
||||
if(!This->nscontainer)
|
||||
return S_OK;
|
||||
|
||||
nsres = nsIWebNavigation_GetDocument(This->nscontainer->navigation, &nsdoc);
|
||||
if(NS_FAILED(nsres) || !nsdoc)
|
||||
return S_OK;
|
||||
|
||||
nsAString_Init(&id_str, v);
|
||||
nsIDOMDocument_GetElementById(nsdoc, &id_str, &nselem);
|
||||
nsIDOMDocument_Release(nsdoc);
|
||||
nsAString_Finish(&id_str);
|
||||
|
||||
if(!nselem) {
|
||||
*pel = NULL;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
node = get_node(This, (nsIDOMNode*)nselem, TRUE);
|
||||
nsIDOMElement_Release(nselem);
|
||||
|
||||
return IHTMLDOMNode_QueryInterface(HTMLDOMNODE(node), &IID_IHTMLElement, (void**)pel);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -65,6 +65,15 @@ static void elem_vector_normalize(elem_vector *buf)
|
|||
buf->size = buf->len;
|
||||
}
|
||||
|
||||
static BOOL is_elem_node(nsIDOMNode *node)
|
||||
{
|
||||
PRUint16 type=0;
|
||||
|
||||
nsIDOMNode_GetNodeType(node, &type);
|
||||
|
||||
return type == ELEMENT_NODE || type == COMMENT_NODE;
|
||||
}
|
||||
|
||||
#define HTMLELEM_THIS(iface) DEFINE_THIS(HTMLElement, HTMLElement, iface)
|
||||
|
||||
#define HTMLELEM_NODE_THIS(iface) DEFINE_THIS2(HTMLElement, node, iface)
|
||||
|
@ -138,6 +147,11 @@ static HRESULT WINAPI HTMLElement_setAttribute(IHTMLElement *iface, BSTR strAttr
|
|||
|
||||
WARN("(%p)->(%s . %08x)\n", This, debugstr_w(strAttributeName), lFlags);
|
||||
|
||||
if(!This->nselem) {
|
||||
FIXME("NULL nselem\n");
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
VariantInit(&AttributeValueChanged);
|
||||
|
||||
hres = VariantChangeType(&AttributeValueChanged, &AttributeValue, 0, VT_BSTR);
|
||||
|
@ -178,7 +192,13 @@ static HRESULT WINAPI HTMLElement_getAttribute(IHTMLElement *iface, BSTR strAttr
|
|||
|
||||
WARN("(%p)->(%s %08x %p)\n", This, debugstr_w(strAttributeName), lFlags, AttributeValue);
|
||||
|
||||
VariantInit(AttributeValue);
|
||||
if(!This->nselem) {
|
||||
FIXME("NULL nselem\n");
|
||||
V_VT(AttributeValue) = VT_NULL;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
V_VT(AttributeValue) = VT_NULL;
|
||||
|
||||
nsAString_Init(&attr_str, strAttributeName);
|
||||
nsAString_Init(&value_str, NULL);
|
||||
|
@ -206,7 +226,7 @@ static HRESULT WINAPI HTMLElement_getAttribute(IHTMLElement *iface, BSTR strAttr
|
|||
TRACE("attr_value=%s\n", debugstr_w(V_BSTR(AttributeValue)));
|
||||
}
|
||||
}
|
||||
}else {
|
||||
}else if(*value) {
|
||||
V_VT(AttributeValue) = VT_BSTR;
|
||||
V_BSTR(AttributeValue) = SysAllocString(value);
|
||||
TRACE("attr_value=%s\n", debugstr_w(V_BSTR(AttributeValue)));
|
||||
|
@ -232,8 +252,23 @@ static HRESULT WINAPI HTMLElement_removeAttribute(IHTMLElement *iface, BSTR strA
|
|||
static HRESULT WINAPI HTMLElement_put_className(IHTMLElement *iface, BSTR v)
|
||||
{
|
||||
HTMLElement *This = HTMLELEM_THIS(iface);
|
||||
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
|
||||
return E_NOTIMPL;
|
||||
nsAString classname_str;
|
||||
nsresult nsres;
|
||||
|
||||
TRACE("(%p)->(%s)\n", This, debugstr_w(v));
|
||||
|
||||
if(!This->nselem) {
|
||||
FIXME("NULL nselem\n");
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
nsAString_Init(&classname_str, v);
|
||||
nsres = nsIDOMHTMLElement_SetClassName(This->nselem, &classname_str);
|
||||
nsAString_Finish(&classname_str);
|
||||
if(NS_FAILED(nsres))
|
||||
ERR("SetClassName failed: %08x\n", nsres);
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLElement_get_className(IHTMLElement *iface, BSTR *p)
|
||||
|
@ -245,13 +280,18 @@ static HRESULT WINAPI HTMLElement_get_className(IHTMLElement *iface, BSTR *p)
|
|||
|
||||
TRACE("(%p)->(%p)\n", This, p);
|
||||
|
||||
if(!This->nselem) {
|
||||
FIXME("NULL nselem\n");
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
nsAString_Init(&class_str, NULL);
|
||||
nsres = nsIDOMHTMLElement_GetClassName(This->nselem, &class_str);
|
||||
|
||||
if(NS_SUCCEEDED(nsres)) {
|
||||
const PRUnichar *class;
|
||||
nsAString_GetData(&class_str, &class);
|
||||
*p = SysAllocString(class);
|
||||
*p = *class ? SysAllocString(class) : NULL;
|
||||
}else {
|
||||
ERR("GetClassName failed: %08x\n", nsres);
|
||||
hres = E_FAIL;
|
||||
|
@ -266,15 +306,50 @@ static HRESULT WINAPI HTMLElement_get_className(IHTMLElement *iface, BSTR *p)
|
|||
static HRESULT WINAPI HTMLElement_put_id(IHTMLElement *iface, BSTR v)
|
||||
{
|
||||
HTMLElement *This = HTMLELEM_THIS(iface);
|
||||
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
|
||||
return E_NOTIMPL;
|
||||
nsAString id_str;
|
||||
nsresult nsres;
|
||||
|
||||
TRACE("(%p)->(%s)\n", This, debugstr_w(v));
|
||||
|
||||
if(!This->nselem) {
|
||||
FIXME("nselem == NULL\n");
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
nsAString_Init(&id_str, v);
|
||||
nsres = nsIDOMHTMLElement_SetId(This->nselem, &id_str);
|
||||
nsAString_Finish(&id_str);
|
||||
if(NS_FAILED(nsres))
|
||||
ERR("SetId failed: %08x\n", nsres);
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLElement_get_id(IHTMLElement *iface, BSTR *p)
|
||||
{
|
||||
HTMLElement *This = HTMLELEM_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
const PRUnichar *id;
|
||||
nsAString id_str;
|
||||
nsresult nsres;
|
||||
|
||||
TRACE("(%p)->(%p)\n", This, p);
|
||||
|
||||
*p = NULL;
|
||||
|
||||
if(!This->nselem)
|
||||
return S_OK;
|
||||
|
||||
nsAString_Init(&id_str, NULL);
|
||||
nsres = nsIDOMHTMLElement_GetId(This->nselem, &id_str);
|
||||
nsAString_GetData(&id_str, &id);
|
||||
|
||||
if(NS_FAILED(nsres))
|
||||
ERR("GetId failed: %08x\n", nsres);
|
||||
else if(*id)
|
||||
*p = SysAllocString(id);
|
||||
|
||||
nsAString_Finish(&id_str);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLElement_get_tagName(IHTMLElement *iface, BSTR *p)
|
||||
|
@ -286,6 +361,15 @@ static HRESULT WINAPI HTMLElement_get_tagName(IHTMLElement *iface, BSTR *p)
|
|||
|
||||
TRACE("(%p)->(%p)\n", This, p);
|
||||
|
||||
if(!This->nselem) {
|
||||
static const WCHAR comment_tagW[] = {'!',0};
|
||||
|
||||
WARN("NULL nselem, assuming comment\n");
|
||||
|
||||
*p = SysAllocString(comment_tagW);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
nsAString_Init(&tag_str, NULL);
|
||||
nsres = nsIDOMHTMLElement_GetTagName(This->nselem, &tag_str);
|
||||
if(NS_SUCCEEDED(nsres)) {
|
||||
|
@ -316,6 +400,11 @@ static HRESULT WINAPI HTMLElement_get_style(IHTMLElement *iface, IHTMLStyle **p)
|
|||
|
||||
TRACE("(%p)->(%p)\n", This, p);
|
||||
|
||||
if(!This->nselem) {
|
||||
FIXME("NULL nselem\n");
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
nsres = nsIDOMHTMLElement_QueryInterface(This->nselem, &IID_nsIDOMElementCSSInlineStyle,
|
||||
(void**)&nselemstyle);
|
||||
if(NS_FAILED(nsres)) {
|
||||
|
@ -354,8 +443,10 @@ static HRESULT WINAPI HTMLElement_get_onhelp(IHTMLElement *iface, VARIANT *p)
|
|||
static HRESULT WINAPI HTMLElement_put_onclick(IHTMLElement *iface, VARIANT v)
|
||||
{
|
||||
HTMLElement *This = HTMLELEM_THIS(iface);
|
||||
FIXME("(%p)->()\n", This);
|
||||
return E_NOTIMPL;
|
||||
|
||||
TRACE("(%p)->()\n", This);
|
||||
|
||||
return set_node_event(&This->node, EVENTID_CLICK, &v);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLElement_get_onclick(IHTMLElement *iface, VARIANT *p)
|
||||
|
@ -396,8 +487,10 @@ static HRESULT WINAPI HTMLElement_get_onkeydown(IHTMLElement *iface, VARIANT *p)
|
|||
static HRESULT WINAPI HTMLElement_put_onkeyup(IHTMLElement *iface, VARIANT v)
|
||||
{
|
||||
HTMLElement *This = HTMLELEM_THIS(iface);
|
||||
FIXME("(%p)->()\n", This);
|
||||
return E_NOTIMPL;
|
||||
|
||||
TRACE("(%p)->()\n", This);
|
||||
|
||||
return set_node_event(&This->node, EVENTID_KEYUP, &v);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLElement_get_onkeyup(IHTMLElement *iface, VARIANT *p)
|
||||
|
@ -501,15 +594,41 @@ static HRESULT WINAPI HTMLElement_get_document(IHTMLElement *iface, IDispatch **
|
|||
static HRESULT WINAPI HTMLElement_put_title(IHTMLElement *iface, BSTR v)
|
||||
{
|
||||
HTMLElement *This = HTMLELEM_THIS(iface);
|
||||
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
|
||||
return E_NOTIMPL;
|
||||
nsAString title_str;
|
||||
nsresult nsres;
|
||||
|
||||
TRACE("(%p)->(%s)\n", This, debugstr_w(v));
|
||||
|
||||
nsAString_Init(&title_str, v);
|
||||
nsres = nsIDOMHTMLElement_SetTitle(This->nselem, &title_str);
|
||||
nsAString_Finish(&title_str);
|
||||
if(NS_FAILED(nsres))
|
||||
ERR("SetTitle failed: %08x\n", nsres);
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLElement_get_title(IHTMLElement *iface, BSTR *p)
|
||||
{
|
||||
HTMLElement *This = HTMLELEM_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
nsAString title_str;
|
||||
nsresult nsres;
|
||||
|
||||
TRACE("(%p)->(%p)\n", This, p);
|
||||
|
||||
nsAString_Init(&title_str, NULL);
|
||||
nsres = nsIDOMHTMLElement_GetTitle(This->nselem, &title_str);
|
||||
if(NS_SUCCEEDED(nsres)) {
|
||||
const PRUnichar *title;
|
||||
|
||||
nsAString_GetData(&title_str, &title);
|
||||
*p = *title ? SysAllocString(title) : NULL;
|
||||
}else {
|
||||
ERR("GetTitle failed: %08x\n", nsres);
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLElement_put_language(IHTMLElement *iface, BSTR v)
|
||||
|
@ -593,8 +712,27 @@ static HRESULT WINAPI HTMLElement_get_offsetLeft(IHTMLElement *iface, long *p)
|
|||
static HRESULT WINAPI HTMLElement_get_offsetTop(IHTMLElement *iface, long *p)
|
||||
{
|
||||
HTMLElement *This = HTMLELEM_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 = 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_GetOffsetTop(nselem, &top);
|
||||
nsIDOMNSHTMLElement_Release(nselem);
|
||||
if(NS_FAILED(nsres)) {
|
||||
ERR("GetOffsetTop failed: %08x\n", nsres);
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
*p = top;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLElement_get_offsetWidth(IHTMLElement *iface, long *p)
|
||||
|
@ -627,6 +765,11 @@ static HRESULT WINAPI HTMLElement_put_innerHTML(IHTMLElement *iface, BSTR v)
|
|||
|
||||
TRACE("(%p)->(%s)\n", This, debugstr_w(v));
|
||||
|
||||
if(!This->nselem) {
|
||||
FIXME("NULL nselem\n");
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
nsres = nsIDOMHTMLElement_QueryInterface(This->nselem, &IID_nsIDOMNSHTMLElement, (void**)&nselem);
|
||||
if(NS_FAILED(nsres)) {
|
||||
ERR("Could not get nsIDOMNSHTMLElement: %08x\n", nsres);
|
||||
|
@ -702,6 +845,11 @@ static HRESULT HTMLElement_InsertAdjacentNode(HTMLElement *This, BSTR where, nsI
|
|||
static const WCHAR wszAfterEnd[] = {'a','f','t','e','r','E','n','d',0};
|
||||
nsresult nsres;
|
||||
|
||||
if(!This->nselem) {
|
||||
FIXME("NULL nselem\n");
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
if (!strcmpiW(where, wszBeforeBegin))
|
||||
{
|
||||
nsIDOMNode *unused;
|
||||
|
@ -1042,7 +1190,6 @@ static void create_child_list(HTMLDocument *doc, HTMLElement *elem, elem_vector
|
|||
nsIDOMNodeList *nsnode_list;
|
||||
nsIDOMNode *iter;
|
||||
PRUint32 list_len = 0, i;
|
||||
PRUint16 node_type;
|
||||
nsresult nsres;
|
||||
|
||||
nsres = nsIDOMNode_GetChildNodes(elem->node.nsnode, &nsnode_list);
|
||||
|
@ -1065,9 +1212,8 @@ static void create_child_list(HTMLDocument *doc, HTMLElement *elem, elem_vector
|
|||
continue;
|
||||
}
|
||||
|
||||
nsres = nsIDOMNode_GetNodeType(iter, &node_type);
|
||||
if(NS_SUCCEEDED(nsres) && node_type == ELEMENT_NODE)
|
||||
elem_vector_add(buf, HTMLELEM_NODE_THIS(get_node(doc, iter)));
|
||||
if(is_elem_node(iter))
|
||||
elem_vector_add(buf, HTMLELEM_NODE_THIS(get_node(doc, iter, TRUE)));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1089,7 +1235,6 @@ static void create_all_list(HTMLDocument *doc, HTMLDOMNode *elem, elem_vector *b
|
|||
nsIDOMNodeList *nsnode_list;
|
||||
nsIDOMNode *iter;
|
||||
PRUint32 list_len = 0, i;
|
||||
PRUint16 node_type;
|
||||
nsresult nsres;
|
||||
|
||||
nsres = nsIDOMNode_GetChildNodes(elem->nsnode, &nsnode_list);
|
||||
|
@ -1109,9 +1254,8 @@ static void create_all_list(HTMLDocument *doc, HTMLDOMNode *elem, elem_vector *b
|
|||
continue;
|
||||
}
|
||||
|
||||
nsres = nsIDOMNode_GetNodeType(iter, &node_type);
|
||||
if(NS_SUCCEEDED(nsres) && node_type == ELEMENT_NODE) {
|
||||
HTMLDOMNode *node = get_node(doc, iter);
|
||||
if(is_elem_node(iter)) {
|
||||
HTMLDOMNode *node = get_node(doc, iter, TRUE);
|
||||
|
||||
elem_vector_add(buf, HTMLELEM_NODE_THIS(node));
|
||||
create_all_list(doc, node, buf);
|
||||
|
@ -1282,17 +1426,34 @@ static const NodeImplVtbl HTMLElementImplVtbl = {
|
|||
HTMLElement_destructor
|
||||
};
|
||||
|
||||
static const tid_t HTMLElement_iface_tids[] = {
|
||||
IHTMLDOMNode_tid,
|
||||
IHTMLDOMNode2_tid,
|
||||
IHTMLElement_tid,
|
||||
IHTMLElement2_tid,
|
||||
0
|
||||
};
|
||||
|
||||
static dispex_static_data_t HTMLElement_dispex = {
|
||||
NULL,
|
||||
DispHTMLUnknownElement_tid,
|
||||
NULL,
|
||||
HTMLElement_iface_tids
|
||||
};
|
||||
|
||||
void HTMLElement_Init(HTMLElement *This)
|
||||
{
|
||||
This->node.vtbl = &HTMLElementImplVtbl;
|
||||
This->lpHTMLElementVtbl = &HTMLElementVtbl;
|
||||
|
||||
ConnectionPointContainer_Init(&This->cp_container, (IUnknown*)HTMLELEM(This));
|
||||
|
||||
HTMLElement2_Init(This);
|
||||
|
||||
if(!This->node.dispex.data)
|
||||
init_dispex(&This->node.dispex, (IUnknown*)HTMLELEM(This), &HTMLElement_dispex);
|
||||
}
|
||||
|
||||
HTMLElement *HTMLElement_Create(nsIDOMNode *nsnode)
|
||||
HTMLElement *HTMLElement_Create(HTMLDocument *doc, nsIDOMNode *nsnode, BOOL use_generic)
|
||||
{
|
||||
nsIDOMHTMLElement *nselem;
|
||||
HTMLElement *ret = NULL;
|
||||
|
@ -1302,6 +1463,7 @@ HTMLElement *HTMLElement_Create(nsIDOMNode *nsnode)
|
|||
|
||||
static const WCHAR wszA[] = {'A',0};
|
||||
static const WCHAR wszBODY[] = {'B','O','D','Y',0};
|
||||
static const WCHAR wszIMG[] = {'I','M','G',0};
|
||||
static const WCHAR wszINPUT[] = {'I','N','P','U','T',0};
|
||||
static const WCHAR wszOPTION[] = {'O','P','T','I','O','N',0};
|
||||
static const WCHAR wszSCRIPT[] = {'S','C','R','I','P','T',0};
|
||||
|
@ -1322,6 +1484,8 @@ HTMLElement *HTMLElement_Create(nsIDOMNode *nsnode)
|
|||
ret = HTMLAnchorElement_Create(nselem);
|
||||
else if(!strcmpW(class_name, wszBODY))
|
||||
ret = HTMLBodyElement_Create(nselem);
|
||||
else if(!strcmpW(class_name, wszIMG))
|
||||
ret = HTMLImgElement_Create(nselem);
|
||||
else if(!strcmpW(class_name, wszINPUT))
|
||||
ret = HTMLInputElement_Create(nselem);
|
||||
else if(!strcmpW(class_name, wszOPTION))
|
||||
|
@ -1334,20 +1498,27 @@ HTMLElement *HTMLElement_Create(nsIDOMNode *nsnode)
|
|||
ret = HTMLTable_Create(nselem);
|
||||
else if(!strcmpW(class_name, wszTEXTAREA))
|
||||
ret = HTMLTextAreaElement_Create(nselem);
|
||||
else if(use_generic)
|
||||
ret = HTMLGenericElement_Create(nselem);
|
||||
|
||||
if(!ret) {
|
||||
ret = heap_alloc(sizeof(HTMLElement));
|
||||
ret = heap_alloc_zero(sizeof(HTMLElement));
|
||||
HTMLElement_Init(ret);
|
||||
ret->node.vtbl = &HTMLElementImplVtbl;
|
||||
}
|
||||
|
||||
TRACE("%s ret %p\n", debugstr_w(class_name), ret);
|
||||
|
||||
nsAString_Finish(&class_name_str);
|
||||
|
||||
ret->nselem = nselem;
|
||||
HTMLDOMNode_Init(doc, &ret->node, (nsIDOMNode*)nselem);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
DispatchEx dispex;
|
||||
const IHTMLElementCollectionVtbl *lpHTMLElementCollectionVtbl;
|
||||
|
||||
IUnknown *ref_unk;
|
||||
|
@ -1371,12 +1542,11 @@ static HRESULT WINAPI HTMLElementCollection_QueryInterface(IHTMLElementCollectio
|
|||
if(IsEqualGUID(&IID_IUnknown, riid)) {
|
||||
TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
|
||||
*ppv = HTMLELEMCOL(This);
|
||||
}else if(IsEqualGUID(&IID_IDispatch, riid)) {
|
||||
TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
|
||||
*ppv = HTMLELEMCOL(This);
|
||||
}else if(IsEqualGUID(&IID_IHTMLElementCollection, riid)) {
|
||||
TRACE("(%p)->(IID_IHTMLElementCollection %p)\n", This, ppv);
|
||||
*ppv = HTMLELEMCOL(This);
|
||||
}else if(dispex_query_interface(&This->dispex, riid, ppv)) {
|
||||
return *ppv ? S_OK : E_NOINTERFACE;
|
||||
}
|
||||
|
||||
if(*ppv) {
|
||||
|
@ -1493,6 +1663,9 @@ static BOOL is_elem_name(HTMLElement *elem, LPCWSTR name)
|
|||
|
||||
static const PRUnichar nameW[] = {'n','a','m','e',0};
|
||||
|
||||
if(!elem->nselem)
|
||||
return FALSE;
|
||||
|
||||
nsAString_Init(&nsstr, NULL);
|
||||
nsIDOMHTMLElement_GetId(elem->nselem, &nsstr);
|
||||
nsAString_GetData(&nsstr, &str);
|
||||
|
@ -1631,6 +1804,51 @@ static HRESULT WINAPI HTMLElementCollection_tags(IHTMLElementCollection *iface,
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
#define DISPID_ELEMCOL_0 MSHTML_DISPID_CUSTOM_MIN
|
||||
|
||||
static HRESULT HTMLElementCollection_get_dispid(IUnknown *iface, BSTR name, DWORD flags, DISPID *dispid)
|
||||
{
|
||||
HTMLElementCollection *This = ELEMCOL_THIS(iface);
|
||||
WCHAR *ptr;
|
||||
DWORD idx=0;
|
||||
|
||||
for(ptr = name; *ptr && isdigitW(*ptr); ptr++)
|
||||
idx = idx*10 + (*ptr-'0');
|
||||
|
||||
if(*ptr || idx >= This->len)
|
||||
return DISP_E_UNKNOWNNAME;
|
||||
|
||||
*dispid = DISPID_ELEMCOL_0 + idx;
|
||||
TRACE("ret %x\n", *dispid);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT HTMLElementCollection_invoke(IUnknown *iface, DISPID id, LCID lcid, WORD flags, DISPPARAMS *params,
|
||||
VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller)
|
||||
{
|
||||
HTMLElementCollection *This = ELEMCOL_THIS(iface);
|
||||
DWORD idx;
|
||||
|
||||
TRACE("(%p)->(%x %x %x %p %p %p %p)\n", This, id, lcid, flags, params, res, ei, caller);
|
||||
|
||||
idx = id - DISPID_ELEMCOL_0;
|
||||
if(idx >= This->len)
|
||||
return DISP_E_UNKNOWNNAME;
|
||||
|
||||
switch(flags) {
|
||||
case INVOKE_PROPERTYGET:
|
||||
V_VT(res) = VT_DISPATCH;
|
||||
V_DISPATCH(res) = (IDispatch*)HTMLELEM(This->elems[idx]);
|
||||
IHTMLElement_AddRef(HTMLELEM(This->elems[idx]));
|
||||
break;
|
||||
default:
|
||||
FIXME("unimplemented flags %x\n", flags);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
#undef ELEMCOL_THIS
|
||||
|
||||
static const IHTMLElementCollectionVtbl HTMLElementCollectionVtbl = {
|
||||
|
@ -1649,6 +1867,22 @@ static const IHTMLElementCollectionVtbl HTMLElementCollectionVtbl = {
|
|||
HTMLElementCollection_tags
|
||||
};
|
||||
|
||||
static const dispex_static_data_vtbl_t HTMLElementColection_dispex_vtbl = {
|
||||
HTMLElementCollection_get_dispid,
|
||||
HTMLElementCollection_invoke
|
||||
};
|
||||
|
||||
static const tid_t HTMLElementCollection_iface_tids[] = {
|
||||
IHTMLElementCollection_tid,
|
||||
0
|
||||
};
|
||||
static dispex_static_data_t HTMLElementCollection_dispex = {
|
||||
&HTMLElementColection_dispex_vtbl,
|
||||
DispHTMLElementCollection_tid,
|
||||
NULL,
|
||||
HTMLElementCollection_iface_tids
|
||||
};
|
||||
|
||||
IHTMLElementCollection *create_all_collection(HTMLDOMNode *node)
|
||||
{
|
||||
elem_vector buf = {NULL, 0, 8};
|
||||
|
@ -1665,13 +1899,15 @@ IHTMLElementCollection *create_all_collection(HTMLDOMNode *node)
|
|||
static IHTMLElementCollection *HTMLElementCollection_Create(IUnknown *ref_unk,
|
||||
HTMLElement **elems, DWORD len)
|
||||
{
|
||||
HTMLElementCollection *ret = heap_alloc(sizeof(HTMLElementCollection));
|
||||
HTMLElementCollection *ret = heap_alloc_zero(sizeof(HTMLElementCollection));
|
||||
|
||||
ret->lpHTMLElementCollectionVtbl = &HTMLElementCollectionVtbl;
|
||||
ret->ref = 1;
|
||||
ret->elems = elems;
|
||||
ret->len = len;
|
||||
|
||||
init_dispex(&ret->dispex, (IUnknown*)HTMLELEMCOL(ret), &HTMLElementCollection_dispex);
|
||||
|
||||
IUnknown_AddRef(ref_unk);
|
||||
ret->ref_unk = ref_unk;
|
||||
|
||||
|
|
|
@ -383,29 +383,82 @@ static HRESULT WINAPI HTMLElement2_removeExpression(IHTMLElement2 *iface, BSTR p
|
|||
static HRESULT WINAPI HTMLElement2_put_tabIndex(IHTMLElement2 *iface, short v)
|
||||
{
|
||||
HTMLElement *This = HTMLELEM2_THIS(iface);
|
||||
FIXME("(%p)->(%d)\n", This, v);
|
||||
return E_NOTIMPL;
|
||||
nsIDOMNSHTMLElement *nselem;
|
||||
nsresult nsres;
|
||||
|
||||
TRACE("(%p)->(%d)\n", This, v);
|
||||
|
||||
nsres = nsIDOMHTMLElement_QueryInterface(This->nselem, &IID_nsIDOMNSHTMLElement, (void**)&nselem);
|
||||
if(NS_FAILED(nsres)) {
|
||||
ERR("Could not get nsIDOMHTMLNSElement: %08x\n", nsres);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
nsres = nsIDOMNSHTMLElement_SetTabIndex(nselem, v);
|
||||
nsIDOMNSHTMLElement_Release(nselem);
|
||||
if(NS_FAILED(nsres))
|
||||
ERR("GetTabIndex failed: %08x\n", nsres);
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLElement2_get_tabIndex(IHTMLElement2 *iface, short *p)
|
||||
{
|
||||
HTMLElement *This = HTMLELEM2_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
nsIDOMNSHTMLElement *nselem;
|
||||
PRInt32 index = 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 nsIDOMHTMLNSElement: %08x\n", nsres);
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
nsres = nsIDOMNSHTMLElement_GetTabIndex(nselem, &index);
|
||||
nsIDOMNSHTMLElement_Release(nselem);
|
||||
if(NS_FAILED(nsres)) {
|
||||
ERR("GetTabIndex failed: %08x\n", nsres);
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
*p = index;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLElement2_focus(IHTMLElement2 *iface)
|
||||
{
|
||||
HTMLElement *This = HTMLELEM2_THIS(iface);
|
||||
FIXME("(%p)\n", This);
|
||||
return E_NOTIMPL;
|
||||
nsIDOMNSHTMLElement *nselem;
|
||||
nsresult nsres;
|
||||
|
||||
TRACE("(%p)\n", This);
|
||||
|
||||
nsres = nsIDOMHTMLElement_QueryInterface(This->nselem, &IID_nsIDOMNSHTMLElement, (void**)&nselem);
|
||||
if(NS_SUCCEEDED(nsres)) {
|
||||
nsIDOMNSHTMLElement_focus(nselem);
|
||||
nsIDOMNSHTMLElement_Release(nselem);
|
||||
}else {
|
||||
ERR("Could not get nsIDOMHTMLNSElement: %08x\n", nsres);
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLElement2_put_accessKey(IHTMLElement2 *iface, BSTR v)
|
||||
{
|
||||
HTMLElement *This = HTMLELEM2_THIS(iface);
|
||||
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
|
||||
return E_NOTIMPL;
|
||||
VARIANT var;
|
||||
|
||||
static WCHAR accessKeyW[] = {'a','c','c','e','s','s','K','e','y',0};
|
||||
|
||||
TRACE("(%p)->(%s)\n", This, debugstr_w(v));
|
||||
|
||||
V_VT(&var) = VT_BSTR;
|
||||
V_BSTR(&var) = v;
|
||||
return IHTMLElement_setAttribute(HTMLELEM(This), accessKeyW, var, 0);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLElement2_get_accessKey(IHTMLElement2 *iface, BSTR *p)
|
||||
|
@ -481,15 +534,43 @@ static HRESULT WINAPI HTMLElement2_removeFilter(IHTMLElement2 *iface, IUnknown *
|
|||
static HRESULT WINAPI HTMLElement2_get_clientHeight(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 = nsIDOMHTMLElement_QueryInterface(This->nselem, &IID_nsIDOMNSHTMLElement, (void**)&nselem);
|
||||
if(NS_SUCCEEDED(nsres)) {
|
||||
nsIDOMNSHTMLElement_GetClientHeight(nselem, &height);
|
||||
nsIDOMNSHTMLElement_Release(nselem);
|
||||
}else {
|
||||
ERR("Could not get nsIDOMHTMLNSElement: %08x\n", nsres);
|
||||
}
|
||||
|
||||
*p = height;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLElement2_get_clientWidth(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 = nsIDOMHTMLElement_QueryInterface(This->nselem, &IID_nsIDOMNSHTMLElement, (void**)&nselem);
|
||||
if(NS_SUCCEEDED(nsres)) {
|
||||
nsIDOMNSHTMLElement_GetClientWidth(nselem, &width);
|
||||
nsIDOMNSHTMLElement_Release(nselem);
|
||||
}else {
|
||||
ERR("Could not get nsIDOMHTMLNSElement: %08x\n", nsres);
|
||||
}
|
||||
|
||||
*p = width;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLElement2_get_clientTop(IHTMLElement2 *iface, long *p)
|
||||
|
@ -651,6 +732,11 @@ static HRESULT WINAPI HTMLElement2_put_scrollTop(IHTMLElement2 *iface, long v)
|
|||
|
||||
TRACE("(%p)->(%ld)\n", This, v);
|
||||
|
||||
if(!This->nselem) {
|
||||
FIXME("NULL nselem\n");
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
nsres = nsIDOMHTMLElement_QueryInterface(This->nselem, &IID_nsIDOMNSHTMLElement, (void**)&nselem);
|
||||
if(NS_SUCCEEDED(nsres)) {
|
||||
nsIDOMNSHTMLElement_SetScrollTop(nselem, v);
|
||||
|
@ -677,6 +763,11 @@ static HRESULT WINAPI HTMLElement2_put_scrollLeft(IHTMLElement2 *iface, long v)
|
|||
|
||||
TRACE("(%p)->(%ld)\n", This, v);
|
||||
|
||||
if(!This->nselem) {
|
||||
FIXME("NULL nselem\n");
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
nsres = nsIDOMHTMLElement_QueryInterface(This->nselem, &IID_nsIDOMNSHTMLElement, (void**)&nselem);
|
||||
if(NS_SUCCEEDED(nsres)) {
|
||||
nsIDOMNSHTMLElement_SetScrollLeft(nselem, v);
|
||||
|
|
490
reactos/dll/win32/mshtml/htmlevent.c
Normal file
490
reactos/dll/win32/mshtml/htmlevent.c
Normal file
|
@ -0,0 +1,490 @@
|
|||
/*
|
||||
* Copyright 2008 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 <stdarg.h>
|
||||
|
||||
#define COBJMACROS
|
||||
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
#include "winuser.h"
|
||||
#include "ole2.h"
|
||||
|
||||
#include "mshtml_private.h"
|
||||
|
||||
#include "wine/debug.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
|
||||
|
||||
struct event_target_t {
|
||||
IDispatch *event_table[EVENTID_LAST];
|
||||
};
|
||||
|
||||
static const WCHAR changeW[] = {'c','h','a','n','g','e',0};
|
||||
static const WCHAR onchangeW[] = {'o','n','c','h','a','n','g','e',0};
|
||||
|
||||
static const WCHAR clickW[] = {'c','l','i','c','k',0};
|
||||
static const WCHAR onclickW[] = {'o','n','c','l','i','c','k',0};
|
||||
|
||||
static const WCHAR keyupW[] = {'k','e','y','u','p',0};
|
||||
static const WCHAR onkeyupW[] = {'o','n','k','e','y','u','p',0};
|
||||
|
||||
static const WCHAR loadW[] = {'l','o','a','d',0};
|
||||
static const WCHAR onloadW[] = {'o','n','l','o','a','d',0};
|
||||
|
||||
typedef struct {
|
||||
LPCWSTR name;
|
||||
LPCWSTR attr_name;
|
||||
DWORD flags;
|
||||
} event_info_t;
|
||||
|
||||
#define EVENT_DEFAULTLISTENER 0x0001
|
||||
|
||||
static const event_info_t event_info[] = {
|
||||
{changeW, onchangeW, EVENT_DEFAULTLISTENER},
|
||||
{clickW, onclickW, EVENT_DEFAULTLISTENER},
|
||||
{keyupW, onkeyupW, EVENT_DEFAULTLISTENER},
|
||||
{loadW, onloadW, 0}
|
||||
};
|
||||
|
||||
eventid_t str_to_eid(LPCWSTR str)
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i=0; i < sizeof(event_info)/sizeof(event_info[0]); i++) {
|
||||
if(!strcmpW(event_info[i].name, str))
|
||||
return i;
|
||||
}
|
||||
|
||||
ERR("unknown type %s\n", debugstr_w(str));
|
||||
return EVENTID_LAST;
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
const IHTMLEventObjVtbl *lpIHTMLEventObjVtbl;
|
||||
LONG ref;
|
||||
} HTMLEventObj;
|
||||
|
||||
#define HTMLEVENTOBJ(x) ((IHTMLEventObj*) &(x)->lpIHTMLEventObjVtbl)
|
||||
|
||||
#define HTMLEVENTOBJ_THIS(iface) DEFINE_THIS(HTMLEventObj, IHTMLEventObj, iface)
|
||||
|
||||
static HRESULT WINAPI HTMLEventObj_QueryInterface(IHTMLEventObj *iface, REFIID riid, void **ppv)
|
||||
{
|
||||
HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
|
||||
|
||||
*ppv = NULL;
|
||||
|
||||
if(IsEqualGUID(&IID_IUnknown, riid)) {
|
||||
TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
|
||||
*ppv = HTMLEVENTOBJ(This);
|
||||
}else if(IsEqualGUID(&IID_IDispatch, riid)) {
|
||||
TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
|
||||
*ppv = HTMLEVENTOBJ(This);
|
||||
}else if(IsEqualGUID(&IID_IHTMLEventObj, riid)) {
|
||||
TRACE("(%p)->(IID_IHTMLEventObj %p)\n", This, ppv);
|
||||
*ppv = HTMLEVENTOBJ(This);
|
||||
}
|
||||
|
||||
if(*ppv) {
|
||||
IUnknown_AddRef((IUnknown*)*ppv);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
static ULONG WINAPI HTMLEventObj_AddRef(IHTMLEventObj *iface)
|
||||
{
|
||||
HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
|
||||
LONG ref = InterlockedIncrement(&This->ref);
|
||||
|
||||
TRACE("(%p) ref=%d\n", This, ref);
|
||||
|
||||
return ref;
|
||||
}
|
||||
|
||||
static ULONG WINAPI HTMLEventObj_Release(IHTMLEventObj *iface)
|
||||
{
|
||||
HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
|
||||
LONG ref = InterlockedDecrement(&This->ref);
|
||||
|
||||
TRACE("(%p) ref=%d\n", This, ref);
|
||||
|
||||
if(!ref)
|
||||
heap_free(This);
|
||||
|
||||
return ref;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLEventObj_GetTypeInfoCount(IHTMLEventObj *iface, UINT *pctinfo)
|
||||
{
|
||||
HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, pctinfo);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLEventObj_GetTypeInfo(IHTMLEventObj *iface, UINT iTInfo,
|
||||
LCID lcid, ITypeInfo **ppTInfo)
|
||||
{
|
||||
HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
|
||||
FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLEventObj_GetIDsOfNames(IHTMLEventObj *iface, REFIID riid,
|
||||
LPOLESTR *rgszNames, UINT cNames,
|
||||
LCID lcid, DISPID *rgDispId)
|
||||
{
|
||||
HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
|
||||
FIXME("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
|
||||
lcid, rgDispId);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLEventObj_Invoke(IHTMLEventObj *iface, DISPID dispIdMember,
|
||||
REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
|
||||
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
|
||||
{
|
||||
HTMLEventObj *This = HTMLEVENTOBJ_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;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLEventObj_get_srcElement(IHTMLEventObj *iface, IHTMLElement **p)
|
||||
{
|
||||
HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLEventObj_get_altKey(IHTMLEventObj *iface, VARIANT_BOOL *p)
|
||||
{
|
||||
HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLEventObj_get_ctrlKey(IHTMLEventObj *iface, VARIANT_BOOL *p)
|
||||
{
|
||||
HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLEventObj_get_shiftKey(IHTMLEventObj *iface, VARIANT_BOOL *p)
|
||||
{
|
||||
HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLEventObj_put_returnValue(IHTMLEventObj *iface, VARIANT v)
|
||||
{
|
||||
HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
|
||||
FIXME("(%p)->()\n", This);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLEventObj_get_returnValue(IHTMLEventObj *iface, VARIANT *p)
|
||||
{
|
||||
HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLEventObj_put_cancelBubble(IHTMLEventObj *iface, VARIANT_BOOL v)
|
||||
{
|
||||
HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
|
||||
FIXME("(%p)->(%x)\n", This, v);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLEventObj_get_cancelBubble(IHTMLEventObj *iface, VARIANT_BOOL *p)
|
||||
{
|
||||
HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLEventObj_get_fromElement(IHTMLEventObj *iface, IHTMLElement **p)
|
||||
{
|
||||
HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLEventObj_get_toElement(IHTMLEventObj *iface, IHTMLElement **p)
|
||||
{
|
||||
HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLEventObj_put_keyCode(IHTMLEventObj *iface, long v)
|
||||
{
|
||||
HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
|
||||
FIXME("(%p)->(%ld)\n", This, v);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLEventObj_get_keyCode(IHTMLEventObj *iface, long *p)
|
||||
{
|
||||
HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLEventObj_get_button(IHTMLEventObj *iface, long *p)
|
||||
{
|
||||
HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLEventObj_get_type(IHTMLEventObj *iface, BSTR *p)
|
||||
{
|
||||
HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLEventObj_get_qualifier(IHTMLEventObj *iface, BSTR *p)
|
||||
{
|
||||
HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLEventObj_get_reason(IHTMLEventObj *iface, long *p)
|
||||
{
|
||||
HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLEventObj_get_x(IHTMLEventObj *iface, long *p)
|
||||
{
|
||||
HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLEventObj_get_y(IHTMLEventObj *iface, long *p)
|
||||
{
|
||||
HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLEventObj_get_clientX(IHTMLEventObj *iface, long *p)
|
||||
{
|
||||
HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLEventObj_get_clientY(IHTMLEventObj *iface, long *p)
|
||||
{
|
||||
HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLEventObj_get_offsetX(IHTMLEventObj *iface, long *p)
|
||||
{
|
||||
HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLEventObj_get_offsetY(IHTMLEventObj *iface, long *p)
|
||||
{
|
||||
HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLEventObj_get_screenX(IHTMLEventObj *iface, long *p)
|
||||
{
|
||||
HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLEventObj_get_screenY(IHTMLEventObj *iface, long *p)
|
||||
{
|
||||
HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLEventObj_get_srcFilter(IHTMLEventObj *iface, IDispatch **p)
|
||||
{
|
||||
HTMLEventObj *This = HTMLEVENTOBJ_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
#undef HTMLEVENTOBJ_THIS
|
||||
|
||||
static const IHTMLEventObjVtbl HTMLEventObjVtbl = {
|
||||
HTMLEventObj_QueryInterface,
|
||||
HTMLEventObj_AddRef,
|
||||
HTMLEventObj_Release,
|
||||
HTMLEventObj_GetTypeInfoCount,
|
||||
HTMLEventObj_GetTypeInfo,
|
||||
HTMLEventObj_GetIDsOfNames,
|
||||
HTMLEventObj_Invoke,
|
||||
HTMLEventObj_get_srcElement,
|
||||
HTMLEventObj_get_altKey,
|
||||
HTMLEventObj_get_ctrlKey,
|
||||
HTMLEventObj_get_shiftKey,
|
||||
HTMLEventObj_put_returnValue,
|
||||
HTMLEventObj_get_returnValue,
|
||||
HTMLEventObj_put_cancelBubble,
|
||||
HTMLEventObj_get_cancelBubble,
|
||||
HTMLEventObj_get_fromElement,
|
||||
HTMLEventObj_get_toElement,
|
||||
HTMLEventObj_put_keyCode,
|
||||
HTMLEventObj_get_keyCode,
|
||||
HTMLEventObj_get_button,
|
||||
HTMLEventObj_get_type,
|
||||
HTMLEventObj_get_qualifier,
|
||||
HTMLEventObj_get_reason,
|
||||
HTMLEventObj_get_x,
|
||||
HTMLEventObj_get_y,
|
||||
HTMLEventObj_get_clientX,
|
||||
HTMLEventObj_get_clientY,
|
||||
HTMLEventObj_get_offsetX,
|
||||
HTMLEventObj_get_offsetY,
|
||||
HTMLEventObj_get_screenX,
|
||||
HTMLEventObj_get_screenY,
|
||||
HTMLEventObj_get_srcFilter
|
||||
};
|
||||
|
||||
static IHTMLEventObj *create_event(void)
|
||||
{
|
||||
HTMLEventObj *ret;
|
||||
|
||||
ret = heap_alloc(sizeof(*ret));
|
||||
ret->lpIHTMLEventObjVtbl = &HTMLEventObjVtbl;
|
||||
ret->ref = 1;
|
||||
|
||||
return HTMLEVENTOBJ(ret);
|
||||
}
|
||||
|
||||
void fire_event(HTMLDocument *doc, eventid_t eid, nsIDOMNode *target)
|
||||
{
|
||||
HTMLDOMNode *node;
|
||||
|
||||
node = get_node(doc, target, FALSE);
|
||||
if(!node)
|
||||
return;
|
||||
|
||||
if(node->event_target && node->event_target->event_table[eid]) {
|
||||
doc->window->event = create_event();
|
||||
|
||||
TRACE("%s >>>\n", debugstr_w(event_info[eid].name));
|
||||
call_disp_func(doc, node->event_target->event_table[eid]);
|
||||
TRACE("%s <<<\n", debugstr_w(event_info[eid].name));
|
||||
|
||||
IHTMLEventObj_Release(doc->window->event);
|
||||
doc->window->event = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static HRESULT set_node_event_disp(HTMLDOMNode *node, eventid_t eid, IDispatch *disp)
|
||||
{
|
||||
if(!node->event_target)
|
||||
node->event_target = heap_alloc_zero(sizeof(event_target_t));
|
||||
else if(node->event_target->event_table[eid])
|
||||
IDispatch_Release(node->event_target->event_table[eid]);
|
||||
|
||||
IDispatch_AddRef(disp);
|
||||
node->event_target->event_table[eid] = disp;
|
||||
|
||||
if((event_info[eid].flags & EVENT_DEFAULTLISTENER) && !node->doc->nscontainer->event_vector[eid]) {
|
||||
node->doc->nscontainer->event_vector[eid] = TRUE;
|
||||
add_nsevent_listener(node->doc->nscontainer, event_info[eid].name);
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT set_node_event(HTMLDOMNode *node, eventid_t eid, VARIANT *var)
|
||||
{
|
||||
switch(V_VT(var)) {
|
||||
case VT_DISPATCH:
|
||||
return set_node_event_disp(node, eid, V_DISPATCH(var));
|
||||
|
||||
default:
|
||||
FIXME("not supported vt=%d\n", V_VT(var));
|
||||
}
|
||||
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
void check_event_attr(HTMLDocument *doc, nsIDOMElement *nselem)
|
||||
{
|
||||
const PRUnichar *attr_value;
|
||||
nsAString attr_name_str, attr_value_str;
|
||||
IDispatch *disp;
|
||||
HTMLDOMNode *node;
|
||||
int i;
|
||||
nsresult nsres;
|
||||
|
||||
nsAString_Init(&attr_value_str, NULL);
|
||||
nsAString_Init(&attr_name_str, NULL);
|
||||
|
||||
for(i=0; i < EVENTID_LAST; i++) {
|
||||
nsAString_SetData(&attr_name_str, event_info[i].attr_name);
|
||||
nsres = nsIDOMElement_GetAttribute(nselem, &attr_name_str, &attr_value_str);
|
||||
if(NS_SUCCEEDED(nsres)) {
|
||||
nsAString_GetData(&attr_value_str, &attr_value);
|
||||
if(!*attr_value)
|
||||
continue;
|
||||
|
||||
TRACE("%p.%s = %s\n", nselem, debugstr_w(event_info[i].attr_name), debugstr_w(attr_value));
|
||||
|
||||
disp = script_parse_event(doc, attr_value);
|
||||
if(disp) {
|
||||
node = get_node(doc, (nsIDOMNode*)nselem, TRUE);
|
||||
set_node_event_disp(node, i, disp);
|
||||
IDispatch_Release(disp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
nsAString_Finish(&attr_value_str);
|
||||
nsAString_Finish(&attr_name_str);
|
||||
}
|
||||
|
||||
void release_event_target(event_target_t *event_target)
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i=0; i < EVENTID_LAST; i++) {
|
||||
if(event_target->event_table[i])
|
||||
IDispatch_Release(event_target->event_table[i]);
|
||||
}
|
||||
|
||||
heap_free(event_target);
|
||||
}
|
190
reactos/dll/win32/mshtml/htmlgeneric.c
Normal file
190
reactos/dll/win32/mshtml/htmlgeneric.c
Normal file
|
@ -0,0 +1,190 @@
|
|||
/*
|
||||
* Copyright 2008 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 <stdarg.h>
|
||||
|
||||
#define COBJMACROS
|
||||
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
#include "winuser.h"
|
||||
#include "ole2.h"
|
||||
|
||||
#include "wine/debug.h"
|
||||
|
||||
#include "mshtml_private.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
|
||||
|
||||
typedef struct {
|
||||
HTMLElement element;
|
||||
|
||||
const IHTMLGenericElementVtbl *lpHTMLGenericElementVtbl;
|
||||
} HTMLGenericElement;
|
||||
|
||||
#define HTMLGENERIC(x) ((IHTMLGenericElement*) &(x)->lpHTMLGenericElementVtbl)
|
||||
|
||||
#define HTMLGENERIC_THIS(iface) DEFINE_THIS(HTMLGenericElement, HTMLGenericElement, iface)
|
||||
|
||||
static HRESULT WINAPI HTMLGenericElement_QueryInterface(IHTMLGenericElement *iface, REFIID riid, void **ppv)
|
||||
{
|
||||
HTMLGenericElement *This = HTMLGENERIC_THIS(iface);
|
||||
|
||||
return IHTMLDOMNode_QueryInterface(HTMLDOMNODE(&This->element.node), riid, ppv);
|
||||
}
|
||||
|
||||
static ULONG WINAPI HTMLGenericElement_AddRef(IHTMLGenericElement *iface)
|
||||
{
|
||||
HTMLGenericElement *This = HTMLGENERIC_THIS(iface);
|
||||
|
||||
return IHTMLDOMNode_AddRef(HTMLDOMNODE(&This->element.node));
|
||||
}
|
||||
|
||||
static ULONG WINAPI HTMLGenericElement_Release(IHTMLGenericElement *iface)
|
||||
{
|
||||
HTMLGenericElement *This = HTMLGENERIC_THIS(iface);
|
||||
|
||||
return IHTMLDOMNode_Release(HTMLDOMNODE(&This->element.node));
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLGenericElement_GetTypeInfoCount(IHTMLGenericElement *iface, UINT *pctinfo)
|
||||
{
|
||||
HTMLGenericElement *This = HTMLGENERIC_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, pctinfo);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLGenericElement_GetTypeInfo(IHTMLGenericElement *iface, UINT iTInfo,
|
||||
LCID lcid, ITypeInfo **ppTInfo)
|
||||
{
|
||||
HTMLGenericElement *This = HTMLGENERIC_THIS(iface);
|
||||
FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLGenericElement_GetIDsOfNames(IHTMLGenericElement *iface, REFIID riid,
|
||||
LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
|
||||
{
|
||||
HTMLGenericElement *This = HTMLGENERIC_THIS(iface);
|
||||
FIXME("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
|
||||
lcid, rgDispId);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLGenericElement_Invoke(IHTMLGenericElement *iface, DISPID dispIdMember,
|
||||
REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
|
||||
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
|
||||
{
|
||||
HTMLGenericElement *This = HTMLGENERIC_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;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLGenericElement_get_recordset(IHTMLGenericElement *iface, IDispatch **p)
|
||||
{
|
||||
HTMLGenericElement *This = HTMLGENERIC_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLGenericElement_namedRecordset(IHTMLGenericElement *iface,
|
||||
BSTR dataMember, VARIANT *hierarchy, IDispatch **ppRecordset)
|
||||
{
|
||||
HTMLGenericElement *This = HTMLGENERIC_THIS(iface);
|
||||
FIXME("(%p)->(%s %p %p)\n", This, debugstr_w(dataMember), hierarchy, ppRecordset);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static const IHTMLGenericElementVtbl HTMLGenericElementVtbl = {
|
||||
HTMLGenericElement_QueryInterface,
|
||||
HTMLGenericElement_AddRef,
|
||||
HTMLGenericElement_Release,
|
||||
HTMLGenericElement_GetTypeInfoCount,
|
||||
HTMLGenericElement_GetTypeInfo,
|
||||
HTMLGenericElement_GetIDsOfNames,
|
||||
HTMLGenericElement_Invoke,
|
||||
HTMLGenericElement_get_recordset,
|
||||
HTMLGenericElement_namedRecordset
|
||||
};
|
||||
|
||||
#define HTMLGENERIC_NODE_THIS(iface) DEFINE_THIS2(HTMLGenericElement, element.node, iface)
|
||||
|
||||
static HRESULT HTMLGenericElement_QI(HTMLDOMNode *iface, REFIID riid, void **ppv)
|
||||
{
|
||||
HTMLGenericElement *This = HTMLGENERIC_NODE_THIS(iface);
|
||||
|
||||
*ppv = NULL;
|
||||
|
||||
if(IsEqualGUID(&IID_IHTMLGenericElement, riid)) {
|
||||
TRACE("(%p)->(IID_IHTMLGenericElement %p)\n", This, ppv);
|
||||
*ppv = HTMLGENERIC(This);
|
||||
}else {
|
||||
return HTMLElement_QI(&This->element.node, riid, ppv);
|
||||
}
|
||||
|
||||
IUnknown_AddRef((IUnknown*)*ppv);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static void HTMLGenericElement_destructor(HTMLDOMNode *iface)
|
||||
{
|
||||
HTMLGenericElement *This = HTMLGENERIC_NODE_THIS(iface);
|
||||
|
||||
HTMLElement_destructor(&This->element.node);
|
||||
}
|
||||
|
||||
#undef HTMLGENERIC_NODE_THIS
|
||||
|
||||
static const NodeImplVtbl HTMLGenericElementImplVtbl = {
|
||||
HTMLGenericElement_QI,
|
||||
HTMLGenericElement_destructor
|
||||
};
|
||||
|
||||
static const tid_t HTMLGenericElement_iface_tids[] = {
|
||||
IHTMLDOMNode_tid,
|
||||
IHTMLDOMNode2_tid,
|
||||
IHTMLElement_tid,
|
||||
IHTMLElement2_tid,
|
||||
IHTMLElement2_tid,
|
||||
IHTMLGenericElement_tid,
|
||||
0
|
||||
};
|
||||
|
||||
static dispex_static_data_t HTMLGenericElement_dispex = {
|
||||
NULL,
|
||||
DispHTMLGenericElement_tid,
|
||||
NULL,
|
||||
HTMLGenericElement_iface_tids
|
||||
};
|
||||
|
||||
HTMLElement *HTMLGenericElement_Create(nsIDOMHTMLElement *nselem)
|
||||
{
|
||||
HTMLGenericElement *ret;
|
||||
|
||||
ret = heap_alloc_zero(sizeof(HTMLGenericElement));
|
||||
|
||||
ret->lpHTMLGenericElementVtbl = &HTMLGenericElementVtbl;
|
||||
ret->element.node.vtbl = &HTMLGenericElementImplVtbl;
|
||||
|
||||
init_dispex(&ret->element.node.dispex, (IUnknown*)HTMLGENERIC(ret), &HTMLGenericElement_dispex);
|
||||
HTMLElement_Init(&ret->element);
|
||||
|
||||
return &ret->element;
|
||||
}
|
601
reactos/dll/win32/mshtml/htmlimg.c
Normal file
601
reactos/dll/win32/mshtml/htmlimg.c
Normal file
|
@ -0,0 +1,601 @@
|
|||
/*
|
||||
* Copyright 2008 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 <stdarg.h>
|
||||
|
||||
#define COBJMACROS
|
||||
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
#include "winuser.h"
|
||||
#include "ole2.h"
|
||||
|
||||
#include "wine/debug.h"
|
||||
|
||||
#include "mshtml_private.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
|
||||
|
||||
typedef struct {
|
||||
HTMLElement element;
|
||||
|
||||
const IHTMLImgElementVtbl *lpHTMLImgElementVtbl;
|
||||
|
||||
nsIDOMHTMLImageElement *nsimg;
|
||||
} HTMLImgElement;
|
||||
|
||||
#define HTMLIMG(x) ((IHTMLImgElement*) &(x)->lpHTMLImgElementVtbl)
|
||||
|
||||
#define HTMLIMG_THIS(iface) DEFINE_THIS(HTMLImgElement, HTMLImgElement, iface)
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_QueryInterface(IHTMLImgElement *iface, REFIID riid, void **ppv)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
|
||||
return IHTMLDOMNode_QueryInterface(HTMLDOMNODE(&This->element.node), riid, ppv);
|
||||
}
|
||||
|
||||
static ULONG WINAPI HTMLImgElement_AddRef(IHTMLImgElement *iface)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
|
||||
return IHTMLDOMNode_AddRef(HTMLDOMNODE(&This->element.node));
|
||||
}
|
||||
|
||||
static ULONG WINAPI HTMLImgElement_Release(IHTMLImgElement *iface)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
|
||||
return IHTMLDOMNode_Release(HTMLDOMNODE(&This->element.node));
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_GetTypeInfoCount(IHTMLImgElement *iface, UINT *pctinfo)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, pctinfo);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_GetTypeInfo(IHTMLImgElement *iface, UINT iTInfo,
|
||||
LCID lcid, ITypeInfo **ppTInfo)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_GetIDsOfNames(IHTMLImgElement *iface, REFIID riid,
|
||||
LPOLESTR *rgszNames, UINT cNames,
|
||||
LCID lcid, DISPID *rgDispId)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
|
||||
lcid, rgDispId);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_Invoke(IHTMLImgElement *iface, DISPID dispIdMember,
|
||||
REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
|
||||
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_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;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_put_isMap(IHTMLImgElement *iface, VARIANT_BOOL v)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%x)\n", This, v);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_get_isMap(IHTMLImgElement *iface, VARIANT_BOOL *p)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_put_useMap(IHTMLImgElement *iface, BSTR v)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_get_useMap(IHTMLImgElement *iface, BSTR *p)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_get_mimeType(IHTMLImgElement *iface, BSTR *p)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_get_fileSize(IHTMLImgElement *iface, BSTR *p)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_get_fileCreatedDate(IHTMLImgElement *iface, BSTR *p)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_get_fileModifiedDate(IHTMLImgElement *iface, BSTR *p)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_get_fileUpdatedDate(IHTMLImgElement *iface, BSTR *p)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_get_protocol(IHTMLImgElement *iface, BSTR *p)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_get_href(IHTMLImgElement *iface, BSTR *p)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_get_nameProp(IHTMLImgElement *iface, BSTR *p)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_put_border(IHTMLImgElement *iface, VARIANT v)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->()\n", This);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_get_border(IHTMLImgElement *iface, VARIANT *p)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_put_vspace(IHTMLImgElement *iface, long v)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%ld)\n", This, v);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_get_vspace(IHTMLImgElement *iface, long *p)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_put_hspace(IHTMLImgElement *iface, long v)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%ld)\n", This, v);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_get_hspace(IHTMLImgElement *iface, long *p)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_put_alt(IHTMLImgElement *iface, BSTR v)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
nsAString alt_str;
|
||||
nsresult nsres;
|
||||
|
||||
TRACE("(%p)->(%s)\n", This, debugstr_w(v));
|
||||
|
||||
nsAString_Init(&alt_str, v);
|
||||
nsres = nsIDOMHTMLImageElement_SetAlt(This->nsimg, &alt_str);
|
||||
nsAString_Finish(&alt_str);
|
||||
if(NS_FAILED(nsres))
|
||||
ERR("SetAlt failed: %08x\n", nsres);
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_get_alt(IHTMLImgElement *iface, BSTR *p)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
nsAString alt_str;
|
||||
nsresult nsres;
|
||||
|
||||
TRACE("(%p)->(%p)\n", This, p);
|
||||
|
||||
nsAString_Init(&alt_str, NULL);
|
||||
nsres = nsIDOMHTMLImageElement_GetAlt(This->nsimg, &alt_str);
|
||||
if(NS_SUCCEEDED(nsres)) {
|
||||
const PRUnichar *alt;
|
||||
|
||||
nsAString_GetData(&alt_str, &alt);
|
||||
*p = *alt ? SysAllocString(alt) : NULL;
|
||||
}else {
|
||||
ERR("GetAlt failed: %08x\n", nsres);
|
||||
}
|
||||
nsAString_Finish(&alt_str);
|
||||
|
||||
return NS_SUCCEEDED(nsres) ? S_OK : E_FAIL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_put_src(IHTMLImgElement *iface, BSTR v)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
nsAString src_str;
|
||||
nsresult nsres;
|
||||
|
||||
TRACE("(%p)->(%s)\n", This, debugstr_w(v));
|
||||
|
||||
nsAString_Init(&src_str, v);
|
||||
nsres = nsIDOMHTMLImageElement_SetSrc(This->nsimg, &src_str);
|
||||
nsAString_Finish(&src_str);
|
||||
if(NS_FAILED(nsres))
|
||||
ERR("SetSrc failed: %08x\n", nsres);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_get_src(IHTMLImgElement *iface, BSTR *p)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_put_lowsrc(IHTMLImgElement *iface, BSTR v)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_get_lowsrc(IHTMLImgElement *iface, BSTR *p)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_put_vrml(IHTMLImgElement *iface, BSTR v)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_get_vrml(IHTMLImgElement *iface, BSTR *p)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_put_dynsrc(IHTMLImgElement *iface, BSTR v)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_get_dynsrc(IHTMLImgElement *iface, BSTR *p)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_get_readyState(IHTMLImgElement *iface, BSTR *p)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_get_complete(IHTMLImgElement *iface, VARIANT_BOOL *p)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_put_loop(IHTMLImgElement *iface, VARIANT v)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->()\n", This);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_get_loop(IHTMLImgElement *iface, VARIANT *p)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_put_align(IHTMLImgElement *iface, BSTR v)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_get_align(IHTMLImgElement *iface, BSTR *p)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_put_onload(IHTMLImgElement *iface, VARIANT v)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->()\n", This);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_get_onload(IHTMLImgElement *iface, VARIANT *p)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_put_onerror(IHTMLImgElement *iface, VARIANT v)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->()\n", This);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_get_onerror(IHTMLImgElement *iface, VARIANT *p)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_put_onabort(IHTMLImgElement *iface, VARIANT v)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->()\n", This);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_get_onabort(IHTMLImgElement *iface, VARIANT *p)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_put_name(IHTMLImgElement *iface, BSTR v)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_get_name(IHTMLImgElement *iface, BSTR *p)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_put_width(IHTMLImgElement *iface, long v)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%ld)\n", This, v);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_get_width(IHTMLImgElement *iface, long *p)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_put_height(IHTMLImgElement *iface, long v)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%ld)\n", This, v);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_get_height(IHTMLImgElement *iface, long *p)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_put_start(IHTMLImgElement *iface, BSTR v)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->()\n", This);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLImgElement_get_start(IHTMLImgElement *iface, BSTR *p)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
#undef HTMLIMG_THIS
|
||||
|
||||
static const IHTMLImgElementVtbl HTMLImgElementVtbl = {
|
||||
HTMLImgElement_QueryInterface,
|
||||
HTMLImgElement_AddRef,
|
||||
HTMLImgElement_Release,
|
||||
HTMLImgElement_GetTypeInfoCount,
|
||||
HTMLImgElement_GetTypeInfo,
|
||||
HTMLImgElement_GetIDsOfNames,
|
||||
HTMLImgElement_Invoke,
|
||||
HTMLImgElement_put_isMap,
|
||||
HTMLImgElement_get_isMap,
|
||||
HTMLImgElement_put_useMap,
|
||||
HTMLImgElement_get_useMap,
|
||||
HTMLImgElement_get_mimeType,
|
||||
HTMLImgElement_get_fileSize,
|
||||
HTMLImgElement_get_fileCreatedDate,
|
||||
HTMLImgElement_get_fileModifiedDate,
|
||||
HTMLImgElement_get_fileUpdatedDate,
|
||||
HTMLImgElement_get_protocol,
|
||||
HTMLImgElement_get_href,
|
||||
HTMLImgElement_get_nameProp,
|
||||
HTMLImgElement_put_border,
|
||||
HTMLImgElement_get_border,
|
||||
HTMLImgElement_put_vspace,
|
||||
HTMLImgElement_get_vspace,
|
||||
HTMLImgElement_put_hspace,
|
||||
HTMLImgElement_get_hspace,
|
||||
HTMLImgElement_put_alt,
|
||||
HTMLImgElement_get_alt,
|
||||
HTMLImgElement_put_src,
|
||||
HTMLImgElement_get_src,
|
||||
HTMLImgElement_put_lowsrc,
|
||||
HTMLImgElement_get_lowsrc,
|
||||
HTMLImgElement_put_vrml,
|
||||
HTMLImgElement_get_vrml,
|
||||
HTMLImgElement_put_dynsrc,
|
||||
HTMLImgElement_get_dynsrc,
|
||||
HTMLImgElement_get_readyState,
|
||||
HTMLImgElement_get_complete,
|
||||
HTMLImgElement_put_loop,
|
||||
HTMLImgElement_get_loop,
|
||||
HTMLImgElement_put_align,
|
||||
HTMLImgElement_get_align,
|
||||
HTMLImgElement_put_onload,
|
||||
HTMLImgElement_get_onload,
|
||||
HTMLImgElement_put_onerror,
|
||||
HTMLImgElement_get_onerror,
|
||||
HTMLImgElement_put_onabort,
|
||||
HTMLImgElement_get_onabort,
|
||||
HTMLImgElement_put_name,
|
||||
HTMLImgElement_get_name,
|
||||
HTMLImgElement_put_width,
|
||||
HTMLImgElement_get_width,
|
||||
HTMLImgElement_put_height,
|
||||
HTMLImgElement_get_height,
|
||||
HTMLImgElement_put_start,
|
||||
HTMLImgElement_get_start
|
||||
};
|
||||
|
||||
#define HTMLIMG_NODE_THIS(iface) DEFINE_THIS2(HTMLImgElement, element.node, iface)
|
||||
|
||||
static HRESULT HTMLImgElement_QI(HTMLDOMNode *iface, REFIID riid, void **ppv)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_NODE_THIS(iface);
|
||||
|
||||
*ppv = NULL;
|
||||
|
||||
if(IsEqualGUID(&IID_IHTMLImgElement, riid)) {
|
||||
TRACE("(%p)->(IID_IHTMLImgElement %p)\n", This, ppv);
|
||||
*ppv = HTMLIMG(This);
|
||||
}else {
|
||||
return HTMLElement_QI(&This->element.node, riid, ppv);
|
||||
}
|
||||
|
||||
IUnknown_AddRef((IUnknown*)*ppv);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static void HTMLImgElement_destructor(HTMLDOMNode *iface)
|
||||
{
|
||||
HTMLImgElement *This = HTMLIMG_NODE_THIS(iface);
|
||||
|
||||
if(This->nsimg)
|
||||
nsIDOMHTMLImageElement_Release(This->nsimg);
|
||||
|
||||
HTMLElement_destructor(&This->element.node);
|
||||
}
|
||||
|
||||
#undef HTMLIMG_NODE_THIS
|
||||
|
||||
static const NodeImplVtbl HTMLImgElementImplVtbl = {
|
||||
HTMLImgElement_QI,
|
||||
HTMLImgElement_destructor
|
||||
};
|
||||
|
||||
static const tid_t HTMLImgElement_iface_tids[] = {
|
||||
IHTMLDOMNode_tid,
|
||||
IHTMLDOMNode2_tid,
|
||||
IHTMLElement_tid,
|
||||
IHTMLElement2_tid,
|
||||
IHTMLImgElement_tid,
|
||||
0
|
||||
};
|
||||
static dispex_static_data_t HTMLImgElement_dispex = {
|
||||
NULL,
|
||||
DispHTMLImg_tid,
|
||||
NULL,
|
||||
HTMLImgElement_iface_tids
|
||||
};
|
||||
|
||||
HTMLElement *HTMLImgElement_Create(nsIDOMHTMLElement *nselem)
|
||||
{
|
||||
HTMLImgElement *ret = heap_alloc_zero(sizeof(HTMLImgElement));
|
||||
nsresult nsres;
|
||||
|
||||
ret->lpHTMLImgElementVtbl = &HTMLImgElementVtbl;
|
||||
ret->element.node.vtbl = &HTMLImgElementImplVtbl;
|
||||
|
||||
nsres = nsIDOMHTMLElement_QueryInterface(nselem, &IID_nsIDOMHTMLImageElement, (void**)&ret->nsimg);
|
||||
if(NS_FAILED(nsres))
|
||||
ERR("Could not get nsIDOMHTMLImageElement: %08x\n", nsres);
|
||||
|
||||
init_dispex(&ret->element.node.dispex, (IUnknown*)HTMLIMG(ret), &HTMLImgElement_dispex);
|
||||
HTMLElement_Init(&ret->element);
|
||||
|
||||
return &ret->element;
|
||||
}
|
|
@ -70,16 +70,16 @@ static ULONG WINAPI HTMLInputElement_Release(IHTMLInputElement *iface)
|
|||
static HRESULT WINAPI HTMLInputElement_GetTypeInfoCount(IHTMLInputElement *iface, UINT *pctinfo)
|
||||
{
|
||||
HTMLInputElement *This = HTMLINPUT_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, pctinfo);
|
||||
return E_NOTIMPL;
|
||||
|
||||
return IDispatchEx_GetTypeInfoCount(DISPATCHEX(&This->element.node.dispex), pctinfo);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLInputElement_GetTypeInfo(IHTMLInputElement *iface, UINT iTInfo,
|
||||
LCID lcid, ITypeInfo **ppTInfo)
|
||||
{
|
||||
HTMLInputElement *This = HTMLINPUT_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 HTMLInputElement_GetIDsOfNames(IHTMLInputElement *iface, REFIID riid,
|
||||
|
@ -87,9 +87,9 @@ static HRESULT WINAPI HTMLInputElement_GetIDsOfNames(IHTMLInputElement *iface, R
|
|||
LCID lcid, DISPID *rgDispId)
|
||||
{
|
||||
HTMLInputElement *This = HTMLINPUT_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 HTMLInputElement_Invoke(IHTMLInputElement *iface, DISPID dispIdMember,
|
||||
|
@ -97,9 +97,9 @@ static HRESULT WINAPI HTMLInputElement_Invoke(IHTMLInputElement *iface, DISPID d
|
|||
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
|
||||
{
|
||||
HTMLInputElement *This = HTMLINPUT_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 HTMLInputElement_put_type(IHTMLInputElement *iface, BSTR v)
|
||||
|
@ -137,8 +137,18 @@ static HRESULT WINAPI HTMLInputElement_get_type(IHTMLInputElement *iface, BSTR *
|
|||
static HRESULT WINAPI HTMLInputElement_put_value(IHTMLInputElement *iface, BSTR v)
|
||||
{
|
||||
HTMLInputElement *This = HTMLINPUT_THIS(iface);
|
||||
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
|
||||
return E_NOTIMPL;
|
||||
nsAString val_str;
|
||||
nsresult nsres;
|
||||
|
||||
TRACE("(%p)->(%s)\n", This, debugstr_w(v));
|
||||
|
||||
nsAString_Init(&val_str, v);
|
||||
nsres = nsIDOMHTMLInputElement_SetValue(This->nsinput, &val_str);
|
||||
nsAString_Finish(&val_str);
|
||||
if(NS_FAILED(nsres))
|
||||
ERR("SetValue failed: %08x\n", nsres);
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLInputElement_get_value(IHTMLInputElement *iface, BSTR *p)
|
||||
|
@ -216,15 +226,28 @@ static HRESULT WINAPI HTMLInputElement_get_status(IHTMLInputElement *iface, VARI
|
|||
static HRESULT WINAPI HTMLInputElement_put_disabled(IHTMLInputElement *iface, VARIANT_BOOL v)
|
||||
{
|
||||
HTMLInputElement *This = HTMLINPUT_THIS(iface);
|
||||
FIXME("(%p)->(%x)\n", This, v);
|
||||
return E_NOTIMPL;
|
||||
nsresult nsres;
|
||||
|
||||
TRACE("(%p)->(%x)\n", This, v);
|
||||
|
||||
nsres = nsIDOMHTMLInputElement_SetDisabled(This->nsinput, v != VARIANT_FALSE);
|
||||
if(NS_FAILED(nsres))
|
||||
ERR("SetDisabled failed: %08x\n", nsres);
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLInputElement_get_disabled(IHTMLInputElement *iface, VARIANT_BOOL *p)
|
||||
{
|
||||
HTMLInputElement *This = HTMLINPUT_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
PRBool disabled = FALSE;
|
||||
|
||||
TRACE("(%p)->(%p)\n", This, p);
|
||||
|
||||
nsIDOMHTMLInputElement_GetDisabled(This->nsinput, &disabled);
|
||||
|
||||
*p = disabled ? VARIANT_TRUE : VARIANT_FALSE;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLInputElement_get_form(IHTMLInputElement *iface, IHTMLFormElement **p)
|
||||
|
@ -1053,16 +1076,32 @@ static const NodeImplVtbl HTMLInputElementImplVtbl = {
|
|||
HTMLInputElement_destructor
|
||||
};
|
||||
|
||||
static const tid_t HTMLInputElement_iface_tids[] = {
|
||||
IHTMLDOMNode_tid,
|
||||
IHTMLDOMNode2_tid,
|
||||
IHTMLElement_tid,
|
||||
IHTMLElement2_tid,
|
||||
IHTMLInputElement_tid,
|
||||
0
|
||||
};
|
||||
static dispex_static_data_t HTMLInputElement_dispex = {
|
||||
NULL,
|
||||
DispHTMLInputElement_tid,
|
||||
NULL,
|
||||
HTMLInputElement_iface_tids
|
||||
};
|
||||
|
||||
HTMLElement *HTMLInputElement_Create(nsIDOMHTMLElement *nselem)
|
||||
{
|
||||
HTMLInputElement *ret = heap_alloc(sizeof(HTMLInputElement));
|
||||
HTMLInputElement *ret = heap_alloc_zero(sizeof(HTMLInputElement));
|
||||
nsresult nsres;
|
||||
|
||||
HTMLElement_Init(&ret->element);
|
||||
|
||||
ret->lpHTMLInputElementVtbl = &HTMLInputElementVtbl;
|
||||
ret->element.node.vtbl = &HTMLInputElementImplVtbl;
|
||||
|
||||
init_dispex(&ret->element.node.dispex, (IUnknown*)HTMLINPUT(ret), &HTMLInputElement_dispex);
|
||||
HTMLElement_Init(&ret->element);
|
||||
|
||||
nsres = nsIDOMHTMLElement_QueryInterface(nselem, &IID_nsIDOMHTMLInputElement,
|
||||
(void**)&ret->nsinput);
|
||||
if(NS_FAILED(nsres))
|
||||
|
|
|
@ -31,7 +31,251 @@
|
|||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
|
||||
|
||||
#define NSSUPPORTS(x) ((nsISupports*) &(x)->lpSupportsVtbl)
|
||||
static HTMLDOMNode *get_node_obj(HTMLDocument*,IUnknown*);
|
||||
|
||||
typedef struct {
|
||||
DispatchEx dispex;
|
||||
const IHTMLDOMChildrenCollectionVtbl *lpIHTMLDOMChildrenCollectionVtbl;
|
||||
|
||||
LONG ref;
|
||||
|
||||
/* FIXME: implement weak reference */
|
||||
HTMLDocument *doc;
|
||||
|
||||
nsIDOMNodeList *nslist;
|
||||
} HTMLDOMChildrenCollection;
|
||||
|
||||
#define HTMLCHILDCOL(x) ((IHTMLDOMChildrenCollection*) &(x)->lpIHTMLDOMChildrenCollectionVtbl)
|
||||
|
||||
#define HTMLCHILDCOL_THIS(iface) DEFINE_THIS(HTMLDOMChildrenCollection, IHTMLDOMChildrenCollection, iface)
|
||||
|
||||
static HRESULT WINAPI HTMLDOMChildrenCollection_QueryInterface(IHTMLDOMChildrenCollection *iface, REFIID riid, void **ppv)
|
||||
{
|
||||
HTMLDOMChildrenCollection *This = HTMLCHILDCOL_THIS(iface);
|
||||
|
||||
*ppv = NULL;
|
||||
|
||||
if(IsEqualGUID(&IID_IUnknown, riid)) {
|
||||
TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
|
||||
*ppv = HTMLCHILDCOL(This);
|
||||
}else if(IsEqualGUID(&IID_IHTMLDOMChildrenCollection, riid)) {
|
||||
TRACE("(%p)->(IID_IHTMLDOMChildrenCollection %p)\n", This, ppv);
|
||||
*ppv = HTMLCHILDCOL(This);
|
||||
}else if(dispex_query_interface(&This->dispex, riid, ppv)) {
|
||||
return *ppv ? S_OK : E_NOINTERFACE;
|
||||
}
|
||||
|
||||
if(*ppv) {
|
||||
IUnknown_AddRef((IUnknown*)*ppv);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
static ULONG WINAPI HTMLDOMChildrenCollection_AddRef(IHTMLDOMChildrenCollection *iface)
|
||||
{
|
||||
HTMLDOMChildrenCollection *This = HTMLCHILDCOL_THIS(iface);
|
||||
LONG ref = InterlockedIncrement(&This->ref);
|
||||
|
||||
TRACE("(%p) ref=%d\n", This, ref);
|
||||
|
||||
return ref;
|
||||
}
|
||||
|
||||
static ULONG WINAPI HTMLDOMChildrenCollection_Release(IHTMLDOMChildrenCollection *iface)
|
||||
{
|
||||
HTMLDOMChildrenCollection *This = HTMLCHILDCOL_THIS(iface);
|
||||
LONG ref = InterlockedDecrement(&This->ref);
|
||||
|
||||
TRACE("(%p) ref=%d\n", This, ref);
|
||||
|
||||
if(!ref) {
|
||||
nsIDOMNodeList_Release(This->nslist);
|
||||
heap_free(This);
|
||||
}
|
||||
|
||||
return ref;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDOMChildrenCollection_GetTypeInfoCount(IHTMLDOMChildrenCollection *iface, UINT *pctinfo)
|
||||
{
|
||||
HTMLDOMChildrenCollection *This = HTMLCHILDCOL_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, pctinfo);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDOMChildrenCollection_GetTypeInfo(IHTMLDOMChildrenCollection *iface, UINT iTInfo,
|
||||
LCID lcid, ITypeInfo **ppTInfo)
|
||||
{
|
||||
HTMLDOMChildrenCollection *This = HTMLCHILDCOL_THIS(iface);
|
||||
FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDOMChildrenCollection_GetIDsOfNames(IHTMLDOMChildrenCollection *iface, REFIID riid,
|
||||
LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
|
||||
{
|
||||
HTMLDOMChildrenCollection *This = HTMLCHILDCOL_THIS(iface);
|
||||
FIXME("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
|
||||
lcid, rgDispId);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDOMChildrenCollection_Invoke(IHTMLDOMChildrenCollection *iface, DISPID dispIdMember,
|
||||
REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
|
||||
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
|
||||
{
|
||||
HTMLDOMChildrenCollection *This = HTMLCHILDCOL_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;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDOMChildrenCollection_get_length(IHTMLDOMChildrenCollection *iface, long *p)
|
||||
{
|
||||
HTMLDOMChildrenCollection *This = HTMLCHILDCOL_THIS(iface);
|
||||
PRUint32 length=0;
|
||||
|
||||
TRACE("(%p)->(%p)\n", This, p);
|
||||
|
||||
nsIDOMNodeList_GetLength(This->nslist, &length);
|
||||
*p = length;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDOMChildrenCollection__newEnum(IHTMLDOMChildrenCollection *iface, IUnknown **p)
|
||||
{
|
||||
HTMLDOMChildrenCollection *This = HTMLCHILDCOL_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDOMChildrenCollection_item(IHTMLDOMChildrenCollection *iface, long index, IDispatch **ppItem)
|
||||
{
|
||||
HTMLDOMChildrenCollection *This = HTMLCHILDCOL_THIS(iface);
|
||||
nsIDOMNode *nsnode = NULL;
|
||||
PRUint32 length=0;
|
||||
nsresult nsres;
|
||||
|
||||
TRACE("(%p)->(%ld %p)\n", This, index, ppItem);
|
||||
|
||||
nsIDOMNodeList_GetLength(This->nslist, &length);
|
||||
if(index < 0 || index >= length)
|
||||
return E_INVALIDARG;
|
||||
|
||||
nsres = nsIDOMNodeList_Item(This->nslist, index, &nsnode);
|
||||
if(NS_FAILED(nsres) || !nsnode) {
|
||||
ERR("Item failed: %08x\n", nsres);
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
*ppItem = (IDispatch*)get_node(This->doc, nsnode, TRUE);
|
||||
IDispatch_AddRef(*ppItem);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
#define DISPID_CHILDCOL_0 MSHTML_DISPID_CUSTOM_MIN
|
||||
|
||||
static HRESULT HTMLDOMChildrenCollection_get_dispid(IUnknown *iface, BSTR name, DWORD flags, DISPID *dispid)
|
||||
{
|
||||
HTMLDOMChildrenCollection *This = HTMLCHILDCOL_THIS(iface);
|
||||
WCHAR *ptr;
|
||||
DWORD idx=0;
|
||||
PRUint32 len = 0;
|
||||
|
||||
for(ptr = name; *ptr && isdigitW(*ptr); ptr++)
|
||||
idx = idx*10 + (*ptr-'0');
|
||||
if(*ptr)
|
||||
return DISP_E_UNKNOWNNAME;
|
||||
|
||||
nsIDOMNodeList_GetLength(This->nslist, &len);
|
||||
if(idx >= len)
|
||||
return DISP_E_UNKNOWNNAME;
|
||||
|
||||
*dispid = DISPID_CHILDCOL_0 + idx;
|
||||
TRACE("ret %x\n", *dispid);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT HTMLDOMChildrenCollection_invoke(IUnknown *iface, DISPID id, LCID lcid, WORD flags, DISPPARAMS *params,
|
||||
VARIANT *res, EXCEPINFO *ei, IServiceProvider *caller)
|
||||
{
|
||||
HTMLDOMChildrenCollection *This = HTMLCHILDCOL_THIS(iface);
|
||||
|
||||
TRACE("(%p)->(%x %x %x %p %p %p %p)\n", This, id, lcid, flags, params, res, ei, caller);
|
||||
|
||||
switch(flags) {
|
||||
case INVOKE_PROPERTYGET: {
|
||||
IDispatch *disp = NULL;
|
||||
HRESULT hres;
|
||||
|
||||
hres = IHTMLDOMChildrenCollection_item(HTMLCHILDCOL(This), id - DISPID_CHILDCOL_0, &disp);
|
||||
if(0&&FAILED(hres))
|
||||
return hres;
|
||||
|
||||
V_VT(res) = VT_DISPATCH;
|
||||
V_DISPATCH(res) = disp;
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
FIXME("unimplemented flags %x\n", flags);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
#undef HTMLCHILDCOL_THIS
|
||||
|
||||
static const IHTMLDOMChildrenCollectionVtbl HTMLDOMChildrenCollectionVtbl = {
|
||||
HTMLDOMChildrenCollection_QueryInterface,
|
||||
HTMLDOMChildrenCollection_AddRef,
|
||||
HTMLDOMChildrenCollection_Release,
|
||||
HTMLDOMChildrenCollection_GetTypeInfoCount,
|
||||
HTMLDOMChildrenCollection_GetTypeInfo,
|
||||
HTMLDOMChildrenCollection_GetIDsOfNames,
|
||||
HTMLDOMChildrenCollection_Invoke,
|
||||
HTMLDOMChildrenCollection_get_length,
|
||||
HTMLDOMChildrenCollection__newEnum,
|
||||
HTMLDOMChildrenCollection_item
|
||||
};
|
||||
|
||||
static const tid_t HTMLDOMChildrenCollection_iface_tids[] = {
|
||||
IHTMLDOMChildrenCollection_tid,
|
||||
0
|
||||
};
|
||||
|
||||
static const dispex_static_data_vtbl_t HTMLDOMChildrenCollection_dispex_vtbl = {
|
||||
HTMLDOMChildrenCollection_get_dispid,
|
||||
HTMLDOMChildrenCollection_invoke
|
||||
};
|
||||
|
||||
static dispex_static_data_t HTMLDOMChildrenCollection_dispex = {
|
||||
&HTMLDOMChildrenCollection_dispex_vtbl,
|
||||
DispDOMChildrenCollection_tid,
|
||||
NULL,
|
||||
HTMLDOMChildrenCollection_iface_tids
|
||||
};
|
||||
|
||||
static IHTMLDOMChildrenCollection *create_child_collection(HTMLDocument *doc, nsIDOMNodeList *nslist)
|
||||
{
|
||||
HTMLDOMChildrenCollection *ret;
|
||||
|
||||
ret = heap_alloc_zero(sizeof(*ret));
|
||||
ret->lpIHTMLDOMChildrenCollectionVtbl = &HTMLDOMChildrenCollectionVtbl;
|
||||
ret->ref = 1;
|
||||
|
||||
nsIDOMNodeList_AddRef(nslist);
|
||||
ret->nslist = nslist;
|
||||
ret->doc = doc;
|
||||
|
||||
init_dispex(&ret->dispex, (IUnknown*)HTMLCHILDCOL(ret), &HTMLDOMChildrenCollection_dispex);
|
||||
|
||||
return HTMLCHILDCOL(ret);
|
||||
}
|
||||
|
||||
#define HTMLDOMNODE_THIS(iface) DEFINE_THIS(HTMLDOMNode, HTMLDOMNode, iface)
|
||||
|
||||
|
@ -106,29 +350,98 @@ static HRESULT WINAPI HTMLDOMNode_Invoke(IHTMLDOMNode *iface, DISPID dispIdMembe
|
|||
static HRESULT WINAPI HTMLDOMNode_get_nodeType(IHTMLDOMNode *iface, long *p)
|
||||
{
|
||||
HTMLDOMNode *This = HTMLDOMNODE_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
PRUint16 type = -1;
|
||||
|
||||
TRACE("(%p)->(%p)\n", This, p);
|
||||
|
||||
nsIDOMNode_GetNodeType(This->nsnode, &type);
|
||||
|
||||
switch(type) {
|
||||
case ELEMENT_NODE:
|
||||
*p = 1;
|
||||
break;
|
||||
case TEXT_NODE:
|
||||
*p = 3;
|
||||
break;
|
||||
case COMMENT_NODE:
|
||||
*p = 8;
|
||||
break;
|
||||
case DOCUMENT_NODE:
|
||||
*p = 9;
|
||||
break;
|
||||
default:
|
||||
/*
|
||||
* FIXME:
|
||||
* According to MSDN only ELEMENT_NODE and TEXT_NODE are supported.
|
||||
* It needs more tests.
|
||||
*/
|
||||
FIXME("type %u\n", type);
|
||||
*p = 0;
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDOMNode_get_parentNode(IHTMLDOMNode *iface, IHTMLDOMNode **p)
|
||||
{
|
||||
HTMLDOMNode *This = HTMLDOMNODE_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
HTMLDOMNode *node;
|
||||
nsIDOMNode *nsnode;
|
||||
nsresult nsres;
|
||||
|
||||
TRACE("(%p)->(%p)\n", This, p);
|
||||
|
||||
nsres = nsIDOMNode_GetParentNode(This->nsnode, &nsnode);
|
||||
if(NS_FAILED(nsres)) {
|
||||
ERR("GetParentNode failed: %08x\n", nsres);
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
if(!nsnode) {
|
||||
*p = NULL;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
node = get_node(This->doc, nsnode, TRUE);
|
||||
*p = HTMLDOMNODE(node);
|
||||
IHTMLDOMNode_AddRef(*p);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDOMNode_hasChildNodes(IHTMLDOMNode *iface, VARIANT_BOOL *fChildren)
|
||||
{
|
||||
HTMLDOMNode *This = HTMLDOMNODE_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, fChildren);
|
||||
return E_NOTIMPL;
|
||||
PRBool has_child = FALSE;
|
||||
nsresult nsres;
|
||||
|
||||
TRACE("(%p)->(%p)\n", This, fChildren);
|
||||
|
||||
nsres = nsIDOMNode_HasChildNodes(This->nsnode, &has_child);
|
||||
if(NS_FAILED(nsres))
|
||||
ERR("HasChildNodes failed: %08x\n", nsres);
|
||||
|
||||
*fChildren = has_child ? VARIANT_TRUE : VARIANT_FALSE;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDOMNode_get_childNodes(IHTMLDOMNode *iface, IDispatch **p)
|
||||
{
|
||||
HTMLDOMNode *This = HTMLDOMNODE_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
nsIDOMNodeList *nslist;
|
||||
nsresult nsres;
|
||||
|
||||
TRACE("(%p)->(%p)\n", This, p);
|
||||
|
||||
nsres = nsIDOMNode_GetChildNodes(This->nsnode, &nslist);
|
||||
if(NS_FAILED(nsres)) {
|
||||
ERR("GetChildNodes failed: %08x\n", nsres);
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
*p = (IDispatch*)create_child_collection(This->doc, nslist);
|
||||
nsIDOMNodeList_Release(nslist);
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDOMNode_get_attributes(IHTMLDOMNode *iface, IDispatch **p)
|
||||
|
@ -146,12 +459,30 @@ static HRESULT WINAPI HTMLDOMNode_insertBefore(IHTMLDOMNode *iface, IHTMLDOMNode
|
|||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDOMNode_removeChild(IHTMLDOMNode *iface, IHTMLDOMNode *newChild,
|
||||
static HRESULT WINAPI HTMLDOMNode_removeChild(IHTMLDOMNode *iface, IHTMLDOMNode *oldChild,
|
||||
IHTMLDOMNode **node)
|
||||
{
|
||||
HTMLDOMNode *This = HTMLDOMNODE_THIS(iface);
|
||||
FIXME("(%p)->(%p %p)\n", This, newChild, node);
|
||||
return E_NOTIMPL;
|
||||
HTMLDOMNode *node_obj;
|
||||
nsIDOMNode *nsnode;
|
||||
nsresult nsres;
|
||||
|
||||
TRACE("(%p)->(%p %p)\n", This, oldChild, node);
|
||||
|
||||
node_obj = get_node_obj(This->doc, (IUnknown*)oldChild);
|
||||
if(!node_obj)
|
||||
return E_FAIL;
|
||||
|
||||
nsres = nsIDOMNode_RemoveChild(This->nsnode, node_obj->nsnode, &nsnode);
|
||||
if(NS_FAILED(nsres)) {
|
||||
ERR("RemoveChild failed: %08x\n", nsres);
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
/* FIXME: Make sure that node != newChild */
|
||||
*node = HTMLDOMNODE(get_node(This->doc, nsnode, TRUE));
|
||||
IHTMLDOMNode_AddRef(*node);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDOMNode_replaceChild(IHTMLDOMNode *iface, IHTMLDOMNode *newChild,
|
||||
|
@ -198,8 +529,26 @@ static HRESULT WINAPI HTMLDOMNode_appendChild(IHTMLDOMNode *iface, IHTMLDOMNode
|
|||
IHTMLDOMNode **node)
|
||||
{
|
||||
HTMLDOMNode *This = HTMLDOMNODE_THIS(iface);
|
||||
FIXME("(%p)->(%p %p)\n", This, newChild, node);
|
||||
return E_NOTIMPL;
|
||||
HTMLDOMNode *node_obj;
|
||||
nsIDOMNode *nsnode;
|
||||
nsresult nsres;
|
||||
|
||||
TRACE("(%p)->(%p %p)\n", This, newChild, node);
|
||||
|
||||
node_obj = get_node_obj(This->doc, (IUnknown*)newChild);
|
||||
if(!node_obj)
|
||||
return E_FAIL;
|
||||
|
||||
nsres = nsIDOMNode_AppendChild(This->nsnode, node_obj->nsnode, &nsnode);
|
||||
if(NS_FAILED(nsres)) {
|
||||
ERR("AppendChild failed: %08x\n", nsres);
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
/* FIXME: Make sure that node != newChild */
|
||||
*node = HTMLDOMNODE(get_node(This->doc, nsnode, TRUE));
|
||||
IHTMLDOMNode_AddRef(*node);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDOMNode_get_nodeName(IHTMLDOMNode *iface, BSTR *p)
|
||||
|
@ -234,29 +583,87 @@ static HRESULT WINAPI HTMLDOMNode_get_nodeName(IHTMLDOMNode *iface, BSTR *p)
|
|||
static HRESULT WINAPI HTMLDOMNode_put_nodeValue(IHTMLDOMNode *iface, VARIANT v)
|
||||
{
|
||||
HTMLDOMNode *This = HTMLDOMNODE_THIS(iface);
|
||||
FIXME("(%p)->()\n", This);
|
||||
|
||||
TRACE("(%p)->()\n", This);
|
||||
|
||||
switch(V_VT(&v)) {
|
||||
case VT_BSTR: {
|
||||
nsAString val_str;
|
||||
|
||||
TRACE("bstr %s\n", debugstr_w(V_BSTR(&v)));
|
||||
|
||||
nsAString_Init(&val_str, V_BSTR(&v));
|
||||
nsIDOMNode_SetNodeValue(This->nsnode, &val_str);
|
||||
nsAString_Finish(&val_str);
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
default:
|
||||
FIXME("unsupported vt %d\n", V_VT(&v));
|
||||
}
|
||||
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDOMNode_get_nodeValue(IHTMLDOMNode *iface, VARIANT *p)
|
||||
{
|
||||
HTMLDOMNode *This = HTMLDOMNODE_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
const PRUnichar *val;
|
||||
nsAString val_str;
|
||||
|
||||
TRACE("(%p)->(%p)\n", This, p);
|
||||
|
||||
nsAString_Init(&val_str, NULL);
|
||||
nsIDOMNode_GetNodeValue(This->nsnode, &val_str);
|
||||
nsAString_GetData(&val_str, &val);
|
||||
|
||||
if(*val) {
|
||||
V_VT(p) = VT_BSTR;
|
||||
V_BSTR(p) = SysAllocString(val);
|
||||
}else {
|
||||
V_VT(p) = VT_NULL;
|
||||
}
|
||||
|
||||
nsAString_Finish(&val_str);
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDOMNode_get_firstChild(IHTMLDOMNode *iface, IHTMLDOMNode **p)
|
||||
{
|
||||
HTMLDOMNode *This = HTMLDOMNODE_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
nsIDOMNode *nschild = NULL;
|
||||
|
||||
TRACE("(%p)->(%p)\n", This, p);
|
||||
|
||||
nsIDOMNode_GetFirstChild(This->nsnode, &nschild);
|
||||
if(nschild) {
|
||||
*p = HTMLDOMNODE(get_node(This->doc, nschild, TRUE));
|
||||
IHTMLDOMNode_AddRef(*p);
|
||||
}else {
|
||||
*p = NULL;
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDOMNode_get_lastChild(IHTMLDOMNode *iface, IHTMLDOMNode **p)
|
||||
{
|
||||
HTMLDOMNode *This = HTMLDOMNODE_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
nsIDOMNode *nschild = NULL;
|
||||
|
||||
TRACE("(%p)->(%p)\n", This, p);
|
||||
|
||||
nsIDOMNode_GetLastChild(This->nsnode, &nschild);
|
||||
if(nschild) {
|
||||
*p = HTMLDOMNODE(get_node(This->doc, nschild, TRUE));
|
||||
IHTMLDOMNode_AddRef(*p);
|
||||
}else {
|
||||
*p = NULL;
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDOMNode_get_previousSibling(IHTMLDOMNode *iface, IHTMLDOMNode **p)
|
||||
|
@ -273,6 +680,8 @@ static HRESULT WINAPI HTMLDOMNode_get_nextSibling(IHTMLDOMNode *iface, IHTMLDOMN
|
|||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
#undef HTMLDOMNODE_THIS
|
||||
|
||||
static const IHTMLDOMNodeVtbl HTMLDOMNodeVtbl = {
|
||||
HTMLDOMNode_QueryInterface,
|
||||
HTMLDOMNode_AddRef,
|
||||
|
@ -303,6 +712,85 @@ static const IHTMLDOMNodeVtbl HTMLDOMNodeVtbl = {
|
|||
HTMLDOMNode_get_nextSibling
|
||||
};
|
||||
|
||||
#define HTMLDOMNODE2_THIS(iface) DEFINE_THIS(HTMLDOMNode, HTMLDOMNode2, iface)
|
||||
|
||||
static HRESULT WINAPI HTMLDOMNode2_QueryInterface(IHTMLDOMNode2 *iface,
|
||||
REFIID riid, void **ppv)
|
||||
{
|
||||
HTMLDOMNode *This = HTMLDOMNODE2_THIS(iface);
|
||||
|
||||
return IHTMLDOMNode_QueryInterface(HTMLDOMNODE(This), riid, ppv);
|
||||
}
|
||||
|
||||
static ULONG WINAPI HTMLDOMNode2_AddRef(IHTMLDOMNode2 *iface)
|
||||
{
|
||||
HTMLDOMNode *This = HTMLDOMNODE2_THIS(iface);
|
||||
|
||||
return IHTMLDOMNode_AddRef(HTMLDOMNODE(This));
|
||||
}
|
||||
|
||||
static ULONG WINAPI HTMLDOMNode2_Release(IHTMLDOMNode2 *iface)
|
||||
{
|
||||
HTMLDOMNode *This = HTMLDOMNODE2_THIS(iface);
|
||||
|
||||
return IHTMLDOMNode_Release(HTMLDOMNODE(This));
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDOMNode2_GetTypeInfoCount(IHTMLDOMNode2 *iface, UINT *pctinfo)
|
||||
{
|
||||
HTMLDOMNode *This = HTMLDOMNODE2_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, pctinfo);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDOMNode2_GetTypeInfo(IHTMLDOMNode2 *iface, UINT iTInfo,
|
||||
LCID lcid, ITypeInfo **ppTInfo)
|
||||
{
|
||||
HTMLDOMNode *This = HTMLDOMNODE2_THIS(iface);
|
||||
FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDOMNode2_GetIDsOfNames(IHTMLDOMNode2 *iface, REFIID riid,
|
||||
LPOLESTR *rgszNames, UINT cNames,
|
||||
LCID lcid, DISPID *rgDispId)
|
||||
{
|
||||
HTMLDOMNode *This = HTMLDOMNODE2_THIS(iface);
|
||||
FIXME("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
|
||||
lcid, rgDispId);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDOMNode2_Invoke(IHTMLDOMNode2 *iface, DISPID dispIdMember,
|
||||
REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
|
||||
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
|
||||
{
|
||||
HTMLDOMNode *This = HTMLDOMNODE2_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;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDOMNode2_get_ownerDocument(IHTMLDOMNode2 *iface, IDispatch **p)
|
||||
{
|
||||
HTMLDOMNode *This = HTMLDOMNODE2_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
#undef HTMLDOMNODE2_THIS
|
||||
|
||||
static const IHTMLDOMNode2Vtbl HTMLDOMNode2Vtbl = {
|
||||
HTMLDOMNode2_QueryInterface,
|
||||
HTMLDOMNode2_AddRef,
|
||||
HTMLDOMNode2_Release,
|
||||
HTMLDOMNode2_GetTypeInfoCount,
|
||||
HTMLDOMNode2_GetTypeInfo,
|
||||
HTMLDOMNode2_GetIDsOfNames,
|
||||
HTMLDOMNode2_Invoke,
|
||||
HTMLDOMNode2_get_ownerDocument
|
||||
};
|
||||
|
||||
HRESULT HTMLDOMNode_QI(HTMLDOMNode *This, REFIID riid, void **ppv)
|
||||
{
|
||||
*ppv = NULL;
|
||||
|
@ -313,9 +801,22 @@ HRESULT HTMLDOMNode_QI(HTMLDOMNode *This, REFIID riid, void **ppv)
|
|||
}else if(IsEqualGUID(&IID_IDispatch, riid)) {
|
||||
TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
|
||||
*ppv = HTMLDOMNODE(This);
|
||||
}else if(IsEqualGUID(&IID_IDispatchEx, riid)) {
|
||||
if(This->dispex.data) {
|
||||
TRACE("(%p)->(IID_IDispatchEx %p)\n", This, ppv);
|
||||
*ppv = DISPATCHEX(&This->dispex);
|
||||
}else {
|
||||
FIXME("(%p)->(IID_IDispatchEx %p)\n", This, ppv);
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
}else if(IsEqualGUID(&IID_IHTMLDOMNode, riid)) {
|
||||
TRACE("(%p)->(IID_IHTMLDOMNode %p)\n", This, ppv);
|
||||
*ppv = HTMLDOMNODE(This);
|
||||
}else if(IsEqualGUID(&IID_IHTMLDOMNode2, riid)) {
|
||||
TRACE("(%p)->(IID_IHTMLDOMNode2 %p)\n", This, ppv);
|
||||
*ppv = HTMLDOMNODE2(This);
|
||||
}else if(dispex_query_interface(&This->dispex, riid, ppv)) {
|
||||
return *ppv ? S_OK : E_NOINTERFACE;
|
||||
}
|
||||
|
||||
if(*ppv) {
|
||||
|
@ -331,6 +832,8 @@ void HTMLDOMNode_destructor(HTMLDOMNode *This)
|
|||
{
|
||||
if(This->nsnode)
|
||||
nsIDOMNode_Release(This->nsnode);
|
||||
if(This->event_target)
|
||||
release_event_target(This->event_target);
|
||||
}
|
||||
|
||||
static const NodeImplVtbl HTMLDOMNodeImplVtbl = {
|
||||
|
@ -338,6 +841,20 @@ static const NodeImplVtbl HTMLDOMNodeImplVtbl = {
|
|||
HTMLDOMNode_destructor
|
||||
};
|
||||
|
||||
void HTMLDOMNode_Init(HTMLDocument *doc, HTMLDOMNode *node, nsIDOMNode *nsnode)
|
||||
{
|
||||
node->lpHTMLDOMNodeVtbl = &HTMLDOMNodeVtbl;
|
||||
node->lpHTMLDOMNode2Vtbl = &HTMLDOMNode2Vtbl;
|
||||
node->ref = 1;
|
||||
node->doc = doc;
|
||||
|
||||
nsIDOMNode_AddRef(nsnode);
|
||||
node->nsnode = nsnode;
|
||||
|
||||
node->next = doc->nodes;
|
||||
doc->nodes = node;
|
||||
}
|
||||
|
||||
static HTMLDOMNode *create_node(HTMLDocument *doc, nsIDOMNode *nsnode)
|
||||
{
|
||||
HTMLDOMNode *ret;
|
||||
|
@ -347,19 +864,21 @@ static HTMLDOMNode *create_node(HTMLDocument *doc, nsIDOMNode *nsnode)
|
|||
|
||||
switch(node_type) {
|
||||
case ELEMENT_NODE:
|
||||
ret = &HTMLElement_Create(nsnode)->node;
|
||||
ret = &HTMLElement_Create(doc, nsnode, FALSE)->node;
|
||||
break;
|
||||
case TEXT_NODE:
|
||||
ret = HTMLDOMTextNode_Create(doc, nsnode);
|
||||
break;
|
||||
case COMMENT_NODE:
|
||||
ret = &HTMLCommentElement_Create(doc, nsnode)->node;
|
||||
break;
|
||||
default:
|
||||
ret = heap_alloc(sizeof(HTMLDOMNode));
|
||||
ret = heap_alloc_zero(sizeof(HTMLDOMNode));
|
||||
ret->vtbl = &HTMLDOMNodeImplVtbl;
|
||||
HTMLDOMNode_Init(doc, ret, nsnode);
|
||||
}
|
||||
|
||||
ret->lpHTMLDOMNodeVtbl = &HTMLDOMNodeVtbl;
|
||||
ret->ref = 1;
|
||||
ret->doc = doc;
|
||||
|
||||
nsIDOMNode_AddRef(nsnode);
|
||||
ret->nsnode = nsnode;
|
||||
TRACE("type %d ret %p\n", node_type, ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -370,9 +889,9 @@ static HTMLDOMNode *create_node(HTMLDocument *doc, nsIDOMNode *nsnode)
|
|||
* (better) find a way to store HTMLDOMelement pointer in nsIDOMNode.
|
||||
*/
|
||||
|
||||
HTMLDOMNode *get_node(HTMLDocument *This, nsIDOMNode *nsnode)
|
||||
HTMLDOMNode *get_node(HTMLDocument *This, nsIDOMNode *nsnode, BOOL create)
|
||||
{
|
||||
HTMLDOMNode *iter = This->nodes, *ret;
|
||||
HTMLDOMNode *iter = This->nodes;
|
||||
|
||||
while(iter) {
|
||||
if(iter->nsnode == nsnode)
|
||||
|
@ -380,15 +899,33 @@ HTMLDOMNode *get_node(HTMLDocument *This, nsIDOMNode *nsnode)
|
|||
iter = iter->next;
|
||||
}
|
||||
|
||||
if(iter)
|
||||
if(iter || !create)
|
||||
return iter;
|
||||
|
||||
ret = create_node(This, nsnode);
|
||||
return create_node(This, nsnode);
|
||||
}
|
||||
|
||||
ret->next = This->nodes;
|
||||
This->nodes = ret;
|
||||
/*
|
||||
* FIXME
|
||||
* We should use better way for getting node object (like private interface)
|
||||
* or avoid it at all.
|
||||
*/
|
||||
static HTMLDOMNode *get_node_obj(HTMLDocument *This, IUnknown *iface)
|
||||
{
|
||||
HTMLDOMNode *iter = This->nodes;
|
||||
IHTMLDOMNode *node;
|
||||
|
||||
return ret;
|
||||
IUnknown_QueryInterface(iface, &IID_IHTMLDOMNode, (void**)&node);
|
||||
IHTMLDOMNode_Release(node);
|
||||
|
||||
while(iter) {
|
||||
if(HTMLDOMNODE(iter) == node)
|
||||
return iter;
|
||||
iter = iter->next;
|
||||
}
|
||||
|
||||
FIXME("Not found %p\n", iface);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void release_nodes(HTMLDocument *This)
|
||||
|
|
|
@ -331,16 +331,32 @@ static const NodeImplVtbl HTMLOptionElementImplVtbl = {
|
|||
HTMLOptionElement_destructor
|
||||
};
|
||||
|
||||
static const tid_t HTMLOptionElement_iface_tids[] = {
|
||||
IHTMLDOMNode_tid,
|
||||
IHTMLDOMNode2_tid,
|
||||
IHTMLElement_tid,
|
||||
IHTMLElement2_tid,
|
||||
IHTMLOptionElement_tid,
|
||||
0
|
||||
};
|
||||
static dispex_static_data_t HTMLOptionElement_dispex = {
|
||||
NULL,
|
||||
DispHTMLOptionElement_tid,
|
||||
NULL,
|
||||
HTMLOptionElement_iface_tids
|
||||
};
|
||||
|
||||
HTMLElement *HTMLOptionElement_Create(nsIDOMHTMLElement *nselem)
|
||||
{
|
||||
HTMLOptionElement *ret = heap_alloc(sizeof(HTMLOptionElement));
|
||||
HTMLOptionElement *ret = heap_alloc_zero(sizeof(HTMLOptionElement));
|
||||
nsresult nsres;
|
||||
|
||||
HTMLElement_Init(&ret->element);
|
||||
|
||||
ret->lpHTMLOptionElementVtbl = &HTMLOptionElementVtbl;
|
||||
ret->element.node.vtbl = &HTMLOptionElementImplVtbl;
|
||||
|
||||
HTMLElement_Init(&ret->element);
|
||||
init_dispex(&ret->element.node.dispex, (IUnknown*)HTMLOPTION(ret), &HTMLOptionElement_dispex);
|
||||
|
||||
nsres = nsIDOMHTMLElement_QueryInterface(nselem, &IID_nsIDOMHTMLOptionElement, (void**)&ret->nsoption);
|
||||
if(NS_FAILED(nsres))
|
||||
ERR("Could not get nsIDOMHTMLOptionElement interface: %08x\n", nsres);
|
||||
|
@ -469,7 +485,7 @@ static HRESULT WINAPI HTMLOptionElementFactory_create(IHTMLOptionElementFactory
|
|||
return E_FAIL;
|
||||
}
|
||||
|
||||
hres = IHTMLDOMNode_QueryInterface(HTMLDOMNODE(get_node(This->doc, (nsIDOMNode*)nselem)),
|
||||
hres = IHTMLDOMNode_QueryInterface(HTMLDOMNODE(get_node(This->doc, (nsIDOMNode*)nselem, TRUE)),
|
||||
&IID_IHTMLOptionElement, (void**)optelem);
|
||||
nsIDOMElement_Release(nselem);
|
||||
|
||||
|
|
|
@ -288,7 +288,7 @@ static const NodeImplVtbl HTMLScriptElementImplVtbl = {
|
|||
|
||||
HTMLElement *HTMLScriptElement_Create(nsIDOMHTMLElement *nselem)
|
||||
{
|
||||
HTMLScriptElement *ret = heap_alloc(sizeof(HTMLScriptElement));
|
||||
HTMLScriptElement *ret = heap_alloc_zero(sizeof(HTMLScriptElement));
|
||||
nsresult nsres;
|
||||
|
||||
HTMLElement_Init(&ret->element);
|
||||
|
|
|
@ -68,16 +68,16 @@ static ULONG WINAPI HTMLSelectElement_Release(IHTMLSelectElement *iface)
|
|||
static HRESULT WINAPI HTMLSelectElement_GetTypeInfoCount(IHTMLSelectElement *iface, UINT *pctinfo)
|
||||
{
|
||||
HTMLSelectElement *This = HTMLSELECT_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, pctinfo);
|
||||
return E_NOTIMPL;
|
||||
|
||||
return IDispatchEx_GetTypeInfoCount(DISPATCHEX(&This->element.node.dispex), pctinfo);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLSelectElement_GetTypeInfo(IHTMLSelectElement *iface, UINT iTInfo,
|
||||
LCID lcid, ITypeInfo **ppTInfo)
|
||||
{
|
||||
HTMLSelectElement *This = HTMLSELECT_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 HTMLSelectElement_GetIDsOfNames(IHTMLSelectElement *iface, REFIID riid,
|
||||
|
@ -85,9 +85,8 @@ static HRESULT WINAPI HTMLSelectElement_GetIDsOfNames(IHTMLSelectElement *iface,
|
|||
LCID lcid, DISPID *rgDispId)
|
||||
{
|
||||
HTMLSelectElement *This = HTMLSELECT_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 HTMLSelectElement_Invoke(IHTMLSelectElement *iface, DISPID dispIdMember,
|
||||
|
@ -95,9 +94,9 @@ static HRESULT WINAPI HTMLSelectElement_Invoke(IHTMLSelectElement *iface, DISPID
|
|||
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
|
||||
{
|
||||
HTMLSelectElement *This = HTMLSELECT_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 HTMLSelectElement_put_size(IHTMLSelectElement *iface, long v)
|
||||
|
@ -177,8 +176,10 @@ static HRESULT WINAPI HTMLSelectElement_get_options(IHTMLSelectElement *iface, I
|
|||
static HRESULT WINAPI HTMLSelectElement_put_onchange(IHTMLSelectElement *iface, VARIANT v)
|
||||
{
|
||||
HTMLSelectElement *This = HTMLSELECT_THIS(iface);
|
||||
FIXME("(%p)->()\n", This);
|
||||
return E_NOTIMPL;
|
||||
|
||||
TRACE("(%p)->()\n", This);
|
||||
|
||||
return set_node_event(&This->element.node, EVENTID_CHANGE, &v);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLSelectElement_get_onchange(IHTMLSelectElement *iface, VARIANT *p)
|
||||
|
@ -221,15 +222,43 @@ static HRESULT WINAPI HTMLSelectElement_get_selectedIndex(IHTMLSelectElement *if
|
|||
static HRESULT WINAPI HTMLSelectElement_get_type(IHTMLSelectElement *iface, BSTR *p)
|
||||
{
|
||||
HTMLSelectElement *This = HTMLSELECT_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
const PRUnichar *type;
|
||||
nsAString type_str;
|
||||
nsresult nsres;
|
||||
HRESULT hres = S_OK;
|
||||
|
||||
TRACE("(%p)->(%p)\n", This, p);
|
||||
|
||||
nsAString_Init(&type_str, NULL);
|
||||
nsres = nsIDOMHTMLSelectElement_GetType(This->nsselect, &type_str);
|
||||
if(NS_SUCCEEDED(nsres)) {
|
||||
nsAString_GetData(&type_str, &type);
|
||||
*p = *type ? SysAllocString(type) : NULL;
|
||||
}else {
|
||||
ERR("GetType failed: %08x\n", nsres);
|
||||
hres = E_FAIL;
|
||||
}
|
||||
|
||||
nsAString_Finish(&type_str);
|
||||
|
||||
return hres;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLSelectElement_put_value(IHTMLSelectElement *iface, BSTR v)
|
||||
{
|
||||
HTMLSelectElement *This = HTMLSELECT_THIS(iface);
|
||||
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
|
||||
return E_NOTIMPL;
|
||||
nsAString value_str;
|
||||
nsresult nsres;
|
||||
|
||||
TRACE("(%p)->(%s)\n", This, debugstr_w(v));
|
||||
|
||||
nsAString_Init(&value_str, v);
|
||||
nsres = nsIDOMHTMLSelectElement_SetValue(This->nsselect, &value_str);
|
||||
nsAString_Finish(&value_str);
|
||||
if(NS_FAILED(nsres))
|
||||
ERR("SetValue failed: %08x\n", nsres);
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLSelectElement_get_value(IHTMLSelectElement *iface, BSTR *p)
|
||||
|
@ -246,7 +275,7 @@ static HRESULT WINAPI HTMLSelectElement_get_value(IHTMLSelectElement *iface, BST
|
|||
nsres = nsIDOMHTMLSelectElement_GetValue(This->nsselect, &value_str);
|
||||
if(NS_SUCCEEDED(nsres)) {
|
||||
nsAString_GetData(&value_str, &value);
|
||||
*p = SysAllocString(value);
|
||||
*p = *value ? SysAllocString(value) : NULL;
|
||||
}else {
|
||||
ERR("GetValue failed: %08x\n", nsres);
|
||||
}
|
||||
|
@ -420,16 +449,33 @@ static const NodeImplVtbl HTMLSelectElementImplVtbl = {
|
|||
HTMLSelectElement_destructor
|
||||
};
|
||||
|
||||
static const tid_t HTMLSelectElement_tids[] = {
|
||||
IHTMLDOMNode_tid,
|
||||
IHTMLDOMNode2_tid,
|
||||
IHTMLElement_tid,
|
||||
IHTMLElement2_tid,
|
||||
IHTMLSelectElement_tid,
|
||||
0
|
||||
};
|
||||
|
||||
static dispex_static_data_t HTMLSelectElement_dispex = {
|
||||
NULL,
|
||||
DispHTMLSelectElement_tid,
|
||||
NULL,
|
||||
HTMLSelectElement_tids
|
||||
};
|
||||
|
||||
HTMLElement *HTMLSelectElement_Create(nsIDOMHTMLElement *nselem)
|
||||
{
|
||||
HTMLSelectElement *ret = heap_alloc(sizeof(HTMLSelectElement));
|
||||
HTMLSelectElement *ret = heap_alloc_zero(sizeof(HTMLSelectElement));
|
||||
nsresult nsres;
|
||||
|
||||
HTMLElement_Init(&ret->element);
|
||||
|
||||
ret->lpHTMLSelectElementVtbl = &HTMLSelectElementVtbl;
|
||||
ret->element.node.vtbl = &HTMLSelectElementImplVtbl;
|
||||
|
||||
|
||||
init_dispex(&ret->element.node.dispex, (IUnknown*)HTMLSELECT(ret), &HTMLSelectElement_dispex);
|
||||
HTMLElement_Init(&ret->element);
|
||||
|
||||
nsres = nsIDOMHTMLElement_QueryInterface(nselem, &IID_nsIDOMHTMLSelectElement,
|
||||
(void**)&ret->nsselect);
|
||||
if(NS_FAILED(nsres))
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
|
||||
|
||||
typedef struct {
|
||||
DispatchEx dispex;
|
||||
const IHTMLStyleVtbl *lpHTMLStyleVtbl;
|
||||
|
||||
LONG ref;
|
||||
|
@ -40,10 +41,14 @@ typedef struct {
|
|||
nsIDOMCSSStyleDeclaration *nsstyle;
|
||||
} HTMLStyle;
|
||||
|
||||
#define HTMLSTYLE(x) ((IHTMLStyle*) &(x)->lpHTMLStyleVtbl);
|
||||
#define HTMLSTYLE(x) ((IHTMLStyle*) &(x)->lpHTMLStyleVtbl)
|
||||
|
||||
static const WCHAR attrBackground[] =
|
||||
{'b','a','c','k','g','r','o','u','n','d',0};
|
||||
static const WCHAR attrBackgroundColor[] =
|
||||
{'b','a','c','k','g','r','o','u','n','d','-','c','o','l','o','r',0};
|
||||
static const WCHAR attrBackgroundImage[] =
|
||||
{'b','a','c','k','g','r','o','u','n','d','-','i','m','a','g','e',0};
|
||||
static const WCHAR attrBorderLeft[] =
|
||||
{'b','o','r','d','e','r','-','l','e','f','t',0};
|
||||
static const WCHAR attrColor[] =
|
||||
|
@ -68,6 +73,8 @@ static const WCHAR attrTextDecoration[] =
|
|||
{'t','e','x','t','-','d','e','c','o','r','a','t','i','o','n',0};
|
||||
static const WCHAR attrVisibility[] =
|
||||
{'v','i','s','i','b','i','l','i','t','y',0};
|
||||
static const WCHAR attrWidth[] =
|
||||
{'w','i','d','t','h',0};
|
||||
|
||||
static const WCHAR valLineThrough[] =
|
||||
{'l','i','n','e','-','t','h','r','o','u','g','h',0};
|
||||
|
@ -113,7 +120,27 @@ static LPWSTR fix_px_value(LPCWSTR val)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static LPWSTR fix_url_value(LPCWSTR val)
|
||||
{
|
||||
WCHAR *ret, *ptr;
|
||||
|
||||
static const WCHAR urlW[] = {'u','r','l','('};
|
||||
|
||||
if(strncmpW(val, urlW, sizeof(urlW)/sizeof(WCHAR)) || !strchrW(val, '\\'))
|
||||
return NULL;
|
||||
|
||||
ret = heap_strdupW(val);
|
||||
|
||||
for(ptr = ret; *ptr; ptr++) {
|
||||
if(*ptr == '\\')
|
||||
*ptr = '/';
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#define ATTR_FIX_PX 1
|
||||
#define ATTR_FIX_URL 2
|
||||
|
||||
static HRESULT set_style_attr(HTMLStyle *This, LPCWSTR name, LPCWSTR value, DWORD flags)
|
||||
{
|
||||
|
@ -127,6 +154,8 @@ static HRESULT set_style_attr(HTMLStyle *This, LPCWSTR name, LPCWSTR value, DWOR
|
|||
|
||||
if(flags & ATTR_FIX_PX)
|
||||
val = fix_px_value(value);
|
||||
if(flags & ATTR_FIX_URL)
|
||||
val = fix_url_value(value);
|
||||
|
||||
nsAString_Init(&str_name, name);
|
||||
nsAString_Init(&str_value, val ? val : value);
|
||||
|
@ -208,12 +237,11 @@ static HRESULT WINAPI HTMLStyle_QueryInterface(IHTMLStyle *iface, REFIID riid, v
|
|||
if(IsEqualGUID(&IID_IUnknown, riid)) {
|
||||
TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
|
||||
*ppv = HTMLSTYLE(This);
|
||||
}else if(IsEqualGUID(&IID_IDispatch, riid)) {
|
||||
TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
|
||||
*ppv = HTMLSTYLE(This);
|
||||
}else if(IsEqualGUID(&IID_IHTMLStyle, riid)) {
|
||||
TRACE("(%p)->(IID_IHTMLStyle %p)\n", This, ppv);
|
||||
*ppv = HTMLSTYLE(This);
|
||||
}else if(dispex_query_interface(&This->dispex, riid, ppv)) {
|
||||
return *ppv ? S_OK : E_NOINTERFACE;
|
||||
}
|
||||
|
||||
if(*ppv) {
|
||||
|
@ -390,7 +418,18 @@ static HRESULT WINAPI HTMLStyle_get_font(IHTMLStyle *iface, BSTR *p)
|
|||
static HRESULT WINAPI HTMLStyle_put_color(IHTMLStyle *iface, VARIANT v)
|
||||
{
|
||||
HTMLStyle *This = HTMLSTYLE_THIS(iface);
|
||||
FIXME("(%p)->(v%d)\n", This, V_VT(&v));
|
||||
|
||||
TRACE("(%p)->(v%d)\n", This, V_VT(&v));
|
||||
|
||||
switch(V_VT(&v)) {
|
||||
case VT_BSTR:
|
||||
TRACE("%s\n", debugstr_w(V_BSTR(&v)));
|
||||
return set_style_attr(This, attrColor, V_BSTR(&v), 0);
|
||||
|
||||
default:
|
||||
FIXME("unsupported vt=%d\n", V_VT(&v));
|
||||
}
|
||||
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
|
@ -407,8 +446,10 @@ static HRESULT WINAPI HTMLStyle_get_color(IHTMLStyle *iface, VARIANT *p)
|
|||
static HRESULT WINAPI HTMLStyle_put_background(IHTMLStyle *iface, BSTR v)
|
||||
{
|
||||
HTMLStyle *This = HTMLSTYLE_THIS(iface);
|
||||
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
|
||||
return E_NOTIMPL;
|
||||
|
||||
TRACE("(%p)->(%s)\n", This, debugstr_w(v));
|
||||
|
||||
return set_style_attr(This, attrBackground, v, 0);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLStyle_get_background(IHTMLStyle *iface, BSTR *p)
|
||||
|
@ -451,8 +492,10 @@ static HRESULT WINAPI HTMLStyle_get_backgroundColor(IHTMLStyle *iface, VARIANT *
|
|||
static HRESULT WINAPI HTMLStyle_put_backgroundImage(IHTMLStyle *iface, BSTR v)
|
||||
{
|
||||
HTMLStyle *This = HTMLSTYLE_THIS(iface);
|
||||
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
|
||||
return E_NOTIMPL;
|
||||
|
||||
TRACE("(%p)->(%s)\n", This, debugstr_w(v));
|
||||
|
||||
return set_style_attr(This, attrBackgroundImage, v, ATTR_FIX_URL);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLStyle_get_backgroundImage(IHTMLStyle *iface, BSTR *p)
|
||||
|
@ -1196,15 +1239,28 @@ static HRESULT WINAPI HTMLStyle_get_borderLeftStyle(IHTMLStyle *iface, BSTR *p)
|
|||
static HRESULT WINAPI HTMLStyle_put_width(IHTMLStyle *iface, VARIANT v)
|
||||
{
|
||||
HTMLStyle *This = HTMLSTYLE_THIS(iface);
|
||||
FIXME("(%p)->(v%d)\n", This, V_VT(&v));
|
||||
|
||||
TRACE("(%p)->(v%d)\n", This, V_VT(&v));
|
||||
|
||||
switch(V_VT(&v)) {
|
||||
case VT_BSTR:
|
||||
TRACE("%s\n", debugstr_w(V_BSTR(&v)));
|
||||
return set_style_attr(This, attrWidth, V_BSTR(&v), 0);
|
||||
default:
|
||||
FIXME("unsupported vt %d\n", V_VT(&v));
|
||||
}
|
||||
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLStyle_get_width(IHTMLStyle *iface, VARIANT *p)
|
||||
{
|
||||
HTMLStyle *This = HTMLSTYLE_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
|
||||
TRACE("(%p)->(%p)\n", This, p);
|
||||
|
||||
V_VT(p) = VT_BSTR;
|
||||
return get_style_attr(This, attrWidth, &V_BSTR(p));
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLStyle_put_height(IHTMLStyle *iface, VARIANT v)
|
||||
|
@ -1837,6 +1893,17 @@ static const IHTMLStyleVtbl HTMLStyleVtbl = {
|
|||
HTMLStyle_toString
|
||||
};
|
||||
|
||||
static const tid_t HTMLStyle_iface_tids[] = {
|
||||
IHTMLStyle_tid,
|
||||
0
|
||||
};
|
||||
static dispex_static_data_t HTMLStyle_dispex = {
|
||||
NULL,
|
||||
DispHTMLStyle_tid,
|
||||
NULL,
|
||||
HTMLStyle_iface_tids
|
||||
};
|
||||
|
||||
IHTMLStyle *HTMLStyle_Create(nsIDOMCSSStyleDeclaration *nsstyle)
|
||||
{
|
||||
HTMLStyle *ret = heap_alloc(sizeof(HTMLStyle));
|
||||
|
@ -1847,5 +1914,7 @@ IHTMLStyle *HTMLStyle_Create(nsIDOMCSSStyleDeclaration *nsstyle)
|
|||
|
||||
nsIDOMCSSStyleDeclaration_AddRef(nsstyle);
|
||||
|
||||
init_dispex(&ret->dispex, (IUnknown*)HTMLSTYLE(ret), &HTMLStyle_dispex);
|
||||
|
||||
return HTMLSTYLE(ret);
|
||||
}
|
||||
|
|
|
@ -546,7 +546,7 @@ static const NodeImplVtbl HTMLTableImplVtbl = {
|
|||
|
||||
HTMLElement *HTMLTable_Create(nsIDOMHTMLElement *nselem)
|
||||
{
|
||||
HTMLTable *ret = heap_alloc(sizeof(HTMLTable));
|
||||
HTMLTable *ret = heap_alloc_zero(sizeof(HTMLTable));
|
||||
|
||||
HTMLElement_Init(&ret->element);
|
||||
|
||||
|
|
|
@ -402,7 +402,7 @@ static const NodeImplVtbl HTMLTextAreaElementImplVtbl = {
|
|||
|
||||
HTMLElement *HTMLTextAreaElement_Create(nsIDOMHTMLElement *nselem)
|
||||
{
|
||||
HTMLTextAreaElement *ret = heap_alloc(sizeof(HTMLTextAreaElement));
|
||||
HTMLTextAreaElement *ret = heap_alloc_zero(sizeof(HTMLTextAreaElement));
|
||||
nsresult nsres;
|
||||
|
||||
HTMLElement_Init(&ret->element);
|
||||
|
|
213
reactos/dll/win32/mshtml/htmltextnode.c
Normal file
213
reactos/dll/win32/mshtml/htmltextnode.c
Normal file
|
@ -0,0 +1,213 @@
|
|||
/*
|
||||
* Copyright 2008 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 <stdarg.h>
|
||||
|
||||
#define COBJMACROS
|
||||
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
#include "winuser.h"
|
||||
#include "ole2.h"
|
||||
|
||||
#include "mshtml_private.h"
|
||||
|
||||
#include "wine/debug.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
|
||||
|
||||
typedef struct {
|
||||
HTMLDOMNode node;
|
||||
const IHTMLDOMTextNodeVtbl *lpIHTMLDOMTextNodeVtbl;
|
||||
} HTMLDOMTextNode;
|
||||
|
||||
#define HTMLTEXT(x) ((IHTMLDOMTextNode*) &(x)->lpIHTMLDOMTextNodeVtbl)
|
||||
|
||||
#define HTMLTEXT_THIS(iface) DEFINE_THIS(HTMLDOMTextNode, IHTMLDOMTextNode, iface)
|
||||
|
||||
#define HTMLTEXT_NODE_THIS(iface) DEFINE_THIS2(HTMLDOMTextNode, node, iface)
|
||||
|
||||
static HRESULT WINAPI HTMLDOMTextNode_QueryInterface(IHTMLDOMTextNode *iface,
|
||||
REFIID riid, void **ppv)
|
||||
{
|
||||
HTMLDOMTextNode *This = HTMLTEXT_THIS(iface);
|
||||
|
||||
return IHTMLDOMNode_QueryInterface(HTMLDOMNODE(&This->node), riid, ppv);
|
||||
}
|
||||
|
||||
static ULONG WINAPI HTMLDOMTextNode_AddRef(IHTMLDOMTextNode *iface)
|
||||
{
|
||||
HTMLDOMTextNode *This = HTMLTEXT_THIS(iface);
|
||||
|
||||
return IHTMLDOMNode_AddRef(HTMLDOMNODE(&This->node));
|
||||
}
|
||||
|
||||
static ULONG WINAPI HTMLDOMTextNode_Release(IHTMLDOMTextNode *iface)
|
||||
{
|
||||
HTMLDOMTextNode *This = HTMLTEXT_THIS(iface);
|
||||
|
||||
return IHTMLDOMNode_Release(HTMLDOMNODE(&This->node));
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDOMTextNode_GetTypeInfoCount(IHTMLDOMTextNode *iface, UINT *pctinfo)
|
||||
{
|
||||
HTMLDOMTextNode *This = HTMLTEXT_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, pctinfo);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDOMTextNode_GetTypeInfo(IHTMLDOMTextNode *iface, UINT iTInfo,
|
||||
LCID lcid, ITypeInfo **ppTInfo)
|
||||
{
|
||||
HTMLDOMTextNode *This = HTMLTEXT_THIS(iface);
|
||||
FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDOMTextNode_GetIDsOfNames(IHTMLDOMTextNode *iface, REFIID riid,
|
||||
LPOLESTR *rgszNames, UINT cNames,
|
||||
LCID lcid, DISPID *rgDispId)
|
||||
{
|
||||
HTMLDOMTextNode *This = HTMLTEXT_THIS(iface);
|
||||
FIXME("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
|
||||
lcid, rgDispId);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDOMTextNode_Invoke(IHTMLDOMTextNode *iface, DISPID dispIdMember,
|
||||
REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
|
||||
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
|
||||
{
|
||||
HTMLDOMTextNode *This = HTMLTEXT_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;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDOMTextNode_put_data(IHTMLDOMTextNode *iface, BSTR v)
|
||||
{
|
||||
HTMLDOMTextNode *This = HTMLTEXT_THIS(iface);
|
||||
FIXME("(%p)->(%s)\n", This, debugstr_w(v));
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDOMTextNode_get_data(IHTMLDOMTextNode *iface, BSTR *p)
|
||||
{
|
||||
HTMLDOMTextNode *This = HTMLTEXT_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDOMTextNode_toString(IHTMLDOMTextNode *iface, BSTR *String)
|
||||
{
|
||||
HTMLDOMTextNode *This = HTMLTEXT_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, String);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDOMTextNode_get_length(IHTMLDOMTextNode *iface, long *p)
|
||||
{
|
||||
HTMLDOMTextNode *This = HTMLTEXT_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLDOMTextNode_splitText(IHTMLDOMTextNode *iface, long offset, IHTMLDOMNode **pRetNode)
|
||||
{
|
||||
HTMLDOMTextNode *This = HTMLTEXT_THIS(iface);
|
||||
FIXME("(%p)->(%ld %p)\n", This, offset, pRetNode);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
#undef HTMLTEXT_THIS
|
||||
|
||||
static const IHTMLDOMTextNodeVtbl HTMLDOMTextNodeVtbl = {
|
||||
HTMLDOMTextNode_QueryInterface,
|
||||
HTMLDOMTextNode_AddRef,
|
||||
HTMLDOMTextNode_Release,
|
||||
HTMLDOMTextNode_GetTypeInfoCount,
|
||||
HTMLDOMTextNode_GetTypeInfo,
|
||||
HTMLDOMTextNode_GetIDsOfNames,
|
||||
HTMLDOMTextNode_Invoke,
|
||||
HTMLDOMTextNode_put_data,
|
||||
HTMLDOMTextNode_get_data,
|
||||
HTMLDOMTextNode_toString,
|
||||
HTMLDOMTextNode_get_length,
|
||||
HTMLDOMTextNode_splitText
|
||||
};
|
||||
|
||||
#define HTMLTEXT_NODE_THIS(iface) DEFINE_THIS2(HTMLDOMTextNode, node, iface)
|
||||
|
||||
HRESULT HTMLDOMTextNode_QI(HTMLDOMNode *iface, REFIID riid, void **ppv)
|
||||
{
|
||||
HTMLDOMTextNode *This = HTMLTEXT_NODE_THIS(iface);
|
||||
|
||||
*ppv = NULL;
|
||||
|
||||
if(IsEqualGUID(&IID_IHTMLDOMTextNode, riid)) {
|
||||
TRACE("(%p)->(IID_IHTMLDOMTextNode %p)\n", This, ppv);
|
||||
*ppv = HTMLTEXT(This);
|
||||
}else {
|
||||
return HTMLDOMNode_QI(&This->node, riid, ppv);
|
||||
}
|
||||
|
||||
IUnknown_AddRef((IUnknown*)*ppv);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
void HTMLDOMTextNode_destructor(HTMLDOMNode *iface)
|
||||
{
|
||||
HTMLDOMTextNode *This = HTMLTEXT_NODE_THIS(iface);
|
||||
|
||||
HTMLDOMNode_destructor(&This->node);
|
||||
}
|
||||
|
||||
#undef HTMLTEXT_NODE_THIS
|
||||
|
||||
static const NodeImplVtbl HTMLDOMTextNodeImplVtbl = {
|
||||
HTMLDOMTextNode_QI,
|
||||
HTMLDOMTextNode_destructor
|
||||
};
|
||||
|
||||
static const tid_t HTMLDOMTextNode_iface_tids[] = {
|
||||
IHTMLDOMNode_tid,
|
||||
IHTMLDOMNode2_tid,
|
||||
IHTMLDOMTextNode_tid,
|
||||
0
|
||||
};
|
||||
static dispex_static_data_t HTMLDOMTextNode_dispex = {
|
||||
NULL,
|
||||
DispHTMLDOMTextNode_tid,
|
||||
0,
|
||||
HTMLDOMTextNode_iface_tids
|
||||
};
|
||||
|
||||
HTMLDOMNode *HTMLDOMTextNode_Create(HTMLDocument *doc, nsIDOMNode *nsnode)
|
||||
{
|
||||
HTMLDOMTextNode *ret ;
|
||||
|
||||
ret = heap_alloc_zero(sizeof(*ret));
|
||||
ret->node.vtbl = &HTMLDOMTextNodeImplVtbl;
|
||||
ret->lpIHTMLDOMTextNodeVtbl = &HTMLDOMTextNodeVtbl;
|
||||
|
||||
init_dispex(&ret->node.dispex, (IUnknown*)HTMLTEXT(ret), &HTMLDOMTextNode_dispex);
|
||||
HTMLDOMNode_Init(doc, &ret->node, nsnode);
|
||||
|
||||
return &ret->node;
|
||||
}
|
|
@ -33,10 +33,10 @@
|
|||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
|
||||
|
||||
#define HTMLWINDOW2_THIS(iface) DEFINE_THIS(HTMLWindow, HTMLWindow2, iface)
|
||||
|
||||
static struct list window_list = LIST_INIT(window_list);
|
||||
|
||||
#define HTMLWINDOW2_THIS(iface) DEFINE_THIS(HTMLWindow, HTMLWindow2, iface)
|
||||
|
||||
static HRESULT WINAPI HTMLWindow2_QueryInterface(IHTMLWindow2 *iface, REFIID riid, void **ppv)
|
||||
{
|
||||
HTMLWindow *This = HTMLWINDOW2_THIS(iface);
|
||||
|
@ -49,12 +49,20 @@ static HRESULT WINAPI HTMLWindow2_QueryInterface(IHTMLWindow2 *iface, REFIID rii
|
|||
}else if(IsEqualGUID(&IID_IDispatch, riid)) {
|
||||
TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
|
||||
*ppv = HTMLWINDOW2(This);
|
||||
}else if(IsEqualGUID(&IID_IDispatchEx, riid)) {
|
||||
TRACE("(%p)->(IID_IDispatchEx %p)\n", This, ppv);
|
||||
*ppv = DISPATCHEX(This);
|
||||
}else if(IsEqualGUID(&IID_IHTMLFramesCollection2, riid)) {
|
||||
TRACE("(%p)->(IID_IHTMLFramesCollection2 %p)\n", This, ppv);
|
||||
*ppv = HTMLWINDOW2(This);
|
||||
}else if(IsEqualGUID(&IID_IHTMLWindow2, riid)) {
|
||||
TRACE("(%p)->(IID_IHTMLWindow2 %p)\n", This, ppv);
|
||||
*ppv = HTMLWINDOW2(This);
|
||||
}else if(IsEqualGUID(&IID_IHTMLWindow3, riid)) {
|
||||
TRACE("(%p)->(IID_IHTMLWindow2 %p)\n", This, ppv);
|
||||
*ppv = HTMLWINDOW3(This);
|
||||
}else if(dispex_query_interface(&This->dispex, riid, ppv)) {
|
||||
return *ppv ? S_OK : E_NOINTERFACE;
|
||||
}
|
||||
|
||||
if(*ppv) {
|
||||
|
@ -95,25 +103,15 @@ static HRESULT WINAPI HTMLWindow2_GetTypeInfoCount(IHTMLWindow2 *iface, UINT *pc
|
|||
{
|
||||
HTMLWindow *This = HTMLWINDOW2_THIS(iface);
|
||||
|
||||
TRACE("(%p)->(%p)\n", This, pctinfo);
|
||||
|
||||
*pctinfo = 1;
|
||||
return S_OK;
|
||||
return IDispatchEx_GetTypeInfoCount(DISPATCHEX(This), pctinfo);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLWindow2_GetTypeInfo(IHTMLWindow2 *iface, UINT iTInfo,
|
||||
LCID lcid, ITypeInfo **ppTInfo)
|
||||
{
|
||||
HTMLWindow *This = HTMLWINDOW2_THIS(iface);
|
||||
HRESULT hres;
|
||||
|
||||
TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
|
||||
|
||||
hres = get_typeinfo(IHTMLWindow2_tid, ppTInfo);
|
||||
if(SUCCEEDED(hres))
|
||||
ITypeInfo_AddRef(*ppTInfo);
|
||||
|
||||
return hres;
|
||||
return IDispatchEx_GetTypeInfo(DISPATCHEX(This), iTInfo, lcid, ppTInfo);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLWindow2_GetIDsOfNames(IHTMLWindow2 *iface, REFIID riid,
|
||||
|
@ -121,17 +119,8 @@ static HRESULT WINAPI HTMLWindow2_GetIDsOfNames(IHTMLWindow2 *iface, REFIID riid
|
|||
LCID lcid, DISPID *rgDispId)
|
||||
{
|
||||
HTMLWindow *This = HTMLWINDOW2_THIS(iface);
|
||||
ITypeInfo *typeinfo;
|
||||
HRESULT hres;
|
||||
|
||||
TRACE("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
|
||||
lcid, rgDispId);
|
||||
|
||||
hres = get_typeinfo(IHTMLWindow2_tid, &typeinfo);
|
||||
if(SUCCEEDED(hres))
|
||||
hres = ITypeInfo_GetIDsOfNames(typeinfo, rgszNames, cNames, rgDispId);
|
||||
|
||||
return hres;
|
||||
return IDispatchEx_GetIDsOfNames(DISPATCHEX(This), riid, rgszNames, cNames, lcid, rgDispId);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLWindow2_Invoke(IHTMLWindow2 *iface, DISPID dispIdMember,
|
||||
|
@ -139,18 +128,9 @@ static HRESULT WINAPI HTMLWindow2_Invoke(IHTMLWindow2 *iface, DISPID dispIdMembe
|
|||
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
|
||||
{
|
||||
HTMLWindow *This = HTMLWINDOW2_THIS(iface);
|
||||
ITypeInfo *typeinfo;
|
||||
HRESULT hres;
|
||||
|
||||
TRACE("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
|
||||
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
|
||||
|
||||
hres = get_typeinfo(IHTMLWindow2_tid, &typeinfo);
|
||||
if(SUCCEEDED(hres))
|
||||
hres = ITypeInfo_Invoke(typeinfo, HTMLWINDOW2(This), dispIdMember, wFlags, pDispParams,
|
||||
pVarResult, pExcepInfo, puArgErr);
|
||||
|
||||
return hres;
|
||||
return IDispatchEx_Invoke(DISPATCHEX(This), dispIdMember, riid, lcid, wFlags, pDispParams,
|
||||
pVarResult, pExcepInfo, puArgErr);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLWindow2_item(IHTMLWindow2 *iface, VARIANT *pvarIndex, VARIANT *pvarResult)
|
||||
|
@ -206,15 +186,23 @@ static HRESULT WINAPI HTMLWindow2_setTimeout(IHTMLWindow2 *iface, BSTR expressio
|
|||
long msec, VARIANT *language, long *timerID)
|
||||
{
|
||||
HTMLWindow *This = HTMLWINDOW2_THIS(iface);
|
||||
FIXME("(%p)->(%s %ld %p %p)\n", This, debugstr_w(expression), msec, language, timerID);
|
||||
return E_NOTIMPL;
|
||||
VARIANT expr_var;
|
||||
|
||||
TRACE("(%p)->(%s %ld %p %p)\n", This, debugstr_w(expression), msec, language, timerID);
|
||||
|
||||
V_VT(&expr_var) = VT_BSTR;
|
||||
V_BSTR(&expr_var) = expression;
|
||||
|
||||
return IHTMLWindow3_setTimeout(HTMLWINDOW3(This), &expr_var, msec, language, timerID);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLWindow2_clearTimeout(IHTMLWindow2 *iface, long timerID)
|
||||
{
|
||||
HTMLWindow *This = HTMLWINDOW2_THIS(iface);
|
||||
FIXME("(%p)->(%ld)\n", This, timerID);
|
||||
return E_NOTIMPL;
|
||||
|
||||
TRACE("(%p)->(%ld)\n", This, timerID);
|
||||
|
||||
return clear_task_timer(This->doc, FALSE, timerID);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLWindow2_alert(IHTMLWindow2 *iface, BSTR message)
|
||||
|
@ -335,8 +323,13 @@ static HRESULT WINAPI HTMLWindow2_open(IHTMLWindow2 *iface, BSTR url, BSTR name,
|
|||
static HRESULT WINAPI HTMLWindow2_get_self(IHTMLWindow2 *iface, IHTMLWindow2 **p)
|
||||
{
|
||||
HTMLWindow *This = HTMLWINDOW2_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
|
||||
TRACE("(%p)->(%p)\n", This, p);
|
||||
|
||||
/* FIXME: We should return kind of proxy window here. */
|
||||
IHTMLWindow2_AddRef(HTMLWINDOW2(This));
|
||||
*p = HTMLWINDOW2(This);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLWindow2_get_top(IHTMLWindow2 *iface, IHTMLWindow2 **p)
|
||||
|
@ -349,8 +342,13 @@ static HRESULT WINAPI HTMLWindow2_get_top(IHTMLWindow2 *iface, IHTMLWindow2 **p)
|
|||
static HRESULT WINAPI HTMLWindow2_get_window(IHTMLWindow2 *iface, IHTMLWindow2 **p)
|
||||
{
|
||||
HTMLWindow *This = HTMLWINDOW2_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
|
||||
TRACE("(%p)->(%p)\n", This, p);
|
||||
|
||||
/* FIXME: We should return kind of proxy window here. */
|
||||
IHTMLWindow2_AddRef(HTMLWINDOW2(This));
|
||||
*p = HTMLWINDOW2(This);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLWindow2_navigate(IHTMLWindow2 *iface, BSTR url)
|
||||
|
@ -489,8 +487,18 @@ static HRESULT WINAPI HTMLWindow2_get_onscroll(IHTMLWindow2 *iface, VARIANT *p)
|
|||
static HRESULT WINAPI HTMLWindow2_get_document(IHTMLWindow2 *iface, IHTMLDocument2 **p)
|
||||
{
|
||||
HTMLWindow *This = HTMLWINDOW2_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
|
||||
TRACE("(%p)->(%p)\n", This, p);
|
||||
|
||||
if(This->doc) {
|
||||
/* FIXME: We should return a wrapper object here */
|
||||
*p = HTMLDOC(This->doc);
|
||||
IHTMLDocument2_AddRef(*p);
|
||||
}else {
|
||||
*p = NULL;
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLWindow2_get_event(IHTMLWindow2 *iface, IHTMLEventObj **p)
|
||||
|
@ -584,15 +592,22 @@ static HRESULT WINAPI HTMLWindow2_setInterval(IHTMLWindow2 *iface, BSTR expressi
|
|||
long msec, VARIANT *language, long *timerID)
|
||||
{
|
||||
HTMLWindow *This = HTMLWINDOW2_THIS(iface);
|
||||
FIXME("(%p)->(%s %ld %p %p)\n", This, debugstr_w(expression), msec, language, timerID);
|
||||
return E_NOTIMPL;
|
||||
VARIANT expr;
|
||||
|
||||
TRACE("(%p)->(%s %ld %p %p)\n", This, debugstr_w(expression), msec, language, timerID);
|
||||
|
||||
V_VT(&expr) = VT_BSTR;
|
||||
V_BSTR(&expr) = expression;
|
||||
return IHTMLWindow3_setInterval(HTMLWINDOW3(This), &expr, msec, language, timerID);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLWindow2_clearInterval(IHTMLWindow2 *iface, long timerID)
|
||||
{
|
||||
HTMLWindow *This = HTMLWINDOW2_THIS(iface);
|
||||
FIXME("(%p)->(%ld)\n", This, timerID);
|
||||
return E_NOTIMPL;
|
||||
|
||||
TRACE("(%p)->(%ld)\n", This, timerID);
|
||||
|
||||
return clear_task_timer(This->doc, TRUE, timerID);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLWindow2_put_offscreenBuffering(IHTMLWindow2 *iface, VARIANT v)
|
||||
|
@ -627,15 +642,29 @@ static HRESULT WINAPI HTMLWindow2_toString(IHTMLWindow2 *iface, BSTR *String)
|
|||
static HRESULT WINAPI HTMLWindow2_scrollBy(IHTMLWindow2 *iface, long x, long y)
|
||||
{
|
||||
HTMLWindow *This = HTMLWINDOW2_THIS(iface);
|
||||
FIXME("(%p)->(%ld %ld)\n", This, x, y);
|
||||
return E_NOTIMPL;
|
||||
nsresult nsres;
|
||||
|
||||
TRACE("(%p)->(%ld %ld)\n", This, x, y);
|
||||
|
||||
nsres = nsIDOMWindow_ScrollBy(This->nswindow, x, y);
|
||||
if(NS_FAILED(nsres))
|
||||
ERR("ScrollBy failed: %08x\n", nsres);
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLWindow2_scrollTo(IHTMLWindow2 *iface, long x, long y)
|
||||
{
|
||||
HTMLWindow *This = HTMLWINDOW2_THIS(iface);
|
||||
FIXME("(%p)->(%ld %ld)\n", This, x, y);
|
||||
return E_NOTIMPL;
|
||||
nsresult nsres;
|
||||
|
||||
TRACE("(%p)->(%ld %ld)\n", This, x, y);
|
||||
|
||||
nsres = nsIDOMWindow_ScrollTo(This->nswindow, x, y);
|
||||
if(NS_FAILED(nsres))
|
||||
ERR("ScrollTo failed: %08x\n", nsres);
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLWindow2_moveTo(IHTMLWindow2 *iface, long x, long y)
|
||||
|
@ -762,6 +791,392 @@ static const IHTMLWindow2Vtbl HTMLWindow2Vtbl = {
|
|||
HTMLWindow2_get_external
|
||||
};
|
||||
|
||||
#define HTMLWINDOW3_THIS(iface) DEFINE_THIS(HTMLWindow, HTMLWindow3, iface)
|
||||
|
||||
static HRESULT WINAPI HTMLWindow3_QueryInterface(IHTMLWindow3 *iface, REFIID riid, void **ppv)
|
||||
{
|
||||
HTMLWindow *This = HTMLWINDOW3_THIS(iface);
|
||||
|
||||
return IHTMLWindow2_QueryInterface(HTMLWINDOW2(This), riid, ppv);
|
||||
}
|
||||
|
||||
static ULONG WINAPI HTMLWindow3_AddRef(IHTMLWindow3 *iface)
|
||||
{
|
||||
HTMLWindow *This = HTMLWINDOW3_THIS(iface);
|
||||
|
||||
return IHTMLWindow2_AddRef(HTMLWINDOW2(This));
|
||||
}
|
||||
|
||||
static ULONG WINAPI HTMLWindow3_Release(IHTMLWindow3 *iface)
|
||||
{
|
||||
HTMLWindow *This = HTMLWINDOW3_THIS(iface);
|
||||
|
||||
return IHTMLWindow2_Release(HTMLWINDOW2(This));
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLWindow3_GetTypeInfoCount(IHTMLWindow3 *iface, UINT *pctinfo)
|
||||
{
|
||||
HTMLWindow *This = HTMLWINDOW3_THIS(iface);
|
||||
|
||||
return IDispatchEx_GetTypeInfoCount(DISPATCHEX(This), pctinfo);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLWindow3_GetTypeInfo(IHTMLWindow3 *iface, UINT iTInfo,
|
||||
LCID lcid, ITypeInfo **ppTInfo)
|
||||
{
|
||||
HTMLWindow *This = HTMLWINDOW3_THIS(iface);
|
||||
|
||||
return IDispatchEx_GetTypeInfo(DISPATCHEX(This), iTInfo, lcid, ppTInfo);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLWindow3_GetIDsOfNames(IHTMLWindow3 *iface, REFIID riid,
|
||||
LPOLESTR *rgszNames, UINT cNames,
|
||||
LCID lcid, DISPID *rgDispId)
|
||||
{
|
||||
HTMLWindow *This = HTMLWINDOW3_THIS(iface);
|
||||
|
||||
return IDispatchEx_GetIDsOfNames(DISPATCHEX(This), riid, rgszNames, cNames, lcid, rgDispId);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLWindow3_Invoke(IHTMLWindow3 *iface, DISPID dispIdMember,
|
||||
REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
|
||||
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
|
||||
{
|
||||
HTMLWindow *This = HTMLWINDOW3_THIS(iface);
|
||||
|
||||
return IDispatchEx_Invoke(DISPATCHEX(This), dispIdMember, riid, lcid, wFlags, pDispParams,
|
||||
pVarResult, pExcepInfo, puArgErr);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLWindow3_get_screenLeft(IHTMLWindow3 *iface, long *p)
|
||||
{
|
||||
HTMLWindow *This = HTMLWINDOW3_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLWindow3_get_screenTop(IHTMLWindow3 *iface, long *p)
|
||||
{
|
||||
HTMLWindow *This = HTMLWINDOW3_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLWindow3_attachEvent(IHTMLWindow3 *iface, BSTR event, IDispatch *pDisp, VARIANT_BOOL *pfResult)
|
||||
{
|
||||
HTMLWindow *This = HTMLWINDOW3_THIS(iface);
|
||||
FIXME("(%p)->(%s %p %p)\n", This, debugstr_w(event), pDisp, pfResult);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLWindow3_detachEvent(IHTMLWindow3 *iface, BSTR event, IDispatch *pDisp)
|
||||
{
|
||||
HTMLWindow *This = HTMLWINDOW3_THIS(iface);
|
||||
FIXME("(%p)->()\n", This);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT window_set_timer(HTMLWindow *This, VARIANT *expr, long msec, VARIANT *language,
|
||||
BOOL interval, long *timer_id)
|
||||
{
|
||||
IDispatch *disp = NULL;
|
||||
|
||||
switch(V_VT(expr)) {
|
||||
case VT_DISPATCH:
|
||||
disp = V_DISPATCH(expr);
|
||||
IDispatch_AddRef(disp);
|
||||
break;
|
||||
|
||||
case VT_BSTR:
|
||||
disp = script_parse_event(This->doc, V_BSTR(expr));
|
||||
break;
|
||||
|
||||
default:
|
||||
FIXME("unimplemented vt=%d\n", V_VT(expr));
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
if(!disp)
|
||||
return E_FAIL;
|
||||
|
||||
*timer_id = set_task_timer(This->doc, msec, interval, disp);
|
||||
IDispatch_Release(disp);
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLWindow3_setTimeout(IHTMLWindow3 *iface, VARIANT *expression, long msec,
|
||||
VARIANT *language, long *timerID)
|
||||
{
|
||||
HTMLWindow *This = HTMLWINDOW3_THIS(iface);
|
||||
|
||||
TRACE("(%p)->(%p(%d) %ld %p %p)\n", This, expression, V_VT(expression), msec, language, timerID);
|
||||
|
||||
return window_set_timer(This, expression, msec, language, FALSE, timerID);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLWindow3_setInterval(IHTMLWindow3 *iface, VARIANT *expression, long msec,
|
||||
VARIANT *language, long *timerID)
|
||||
{
|
||||
HTMLWindow *This = HTMLWINDOW3_THIS(iface);
|
||||
|
||||
TRACE("(%p)->(%p %ld %p %p)\n", This, expression, msec, language, timerID);
|
||||
|
||||
return window_set_timer(This, expression, msec, language, TRUE, timerID);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLWindow3_print(IHTMLWindow3 *iface)
|
||||
{
|
||||
HTMLWindow *This = HTMLWINDOW3_THIS(iface);
|
||||
FIXME("(%p)\n", This);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLWindow3_put_onbeforeprint(IHTMLWindow3 *iface, VARIANT v)
|
||||
{
|
||||
HTMLWindow *This = HTMLWINDOW3_THIS(iface);
|
||||
FIXME("(%p)->()\n", This);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLWindow3_get_onbeforeprint(IHTMLWindow3 *iface, VARIANT *p)
|
||||
{
|
||||
HTMLWindow *This = HTMLWINDOW3_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLWindow3_put_onafterprint(IHTMLWindow3 *iface, VARIANT v)
|
||||
{
|
||||
HTMLWindow *This = HTMLWINDOW3_THIS(iface);
|
||||
FIXME("(%p)->()\n", This);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLWindow3_get_onafterprint(IHTMLWindow3 *iface, VARIANT *p)
|
||||
{
|
||||
HTMLWindow *This = HTMLWINDOW3_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLWindow3_get_clipboardData(IHTMLWindow3 *iface, IHTMLDataTransfer **p)
|
||||
{
|
||||
HTMLWindow *This = HTMLWINDOW3_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, p);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLWindow3_showModelessDialog(IHTMLWindow3 *iface, BSTR url,
|
||||
VARIANT *varArgIn, VARIANT *options, IHTMLWindow2 **pDialog)
|
||||
{
|
||||
HTMLWindow *This = HTMLWINDOW3_THIS(iface);
|
||||
FIXME("(%p)->(%s %p %p %p)\n", This, debugstr_w(url), varArgIn, options, pDialog);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
#undef HTMLWINDOW3_THIS
|
||||
|
||||
static const IHTMLWindow3Vtbl HTMLWindow3Vtbl = {
|
||||
HTMLWindow3_QueryInterface,
|
||||
HTMLWindow3_AddRef,
|
||||
HTMLWindow3_Release,
|
||||
HTMLWindow3_GetTypeInfoCount,
|
||||
HTMLWindow3_GetTypeInfo,
|
||||
HTMLWindow3_GetIDsOfNames,
|
||||
HTMLWindow3_Invoke,
|
||||
HTMLWindow3_get_screenLeft,
|
||||
HTMLWindow3_get_screenTop,
|
||||
HTMLWindow3_attachEvent,
|
||||
HTMLWindow3_detachEvent,
|
||||
HTMLWindow3_setTimeout,
|
||||
HTMLWindow3_setInterval,
|
||||
HTMLWindow3_print,
|
||||
HTMLWindow3_put_onbeforeprint,
|
||||
HTMLWindow3_get_onbeforeprint,
|
||||
HTMLWindow3_put_onafterprint,
|
||||
HTMLWindow3_get_onafterprint,
|
||||
HTMLWindow3_get_clipboardData,
|
||||
HTMLWindow3_showModelessDialog
|
||||
};
|
||||
|
||||
#define DISPEX_THIS(iface) DEFINE_THIS(HTMLWindow, IDispatchEx, iface)
|
||||
|
||||
static HRESULT WINAPI WindowDispEx_QueryInterface(IDispatchEx *iface, REFIID riid, void **ppv)
|
||||
{
|
||||
HTMLWindow *This = DISPEX_THIS(iface);
|
||||
|
||||
return IHTMLWindow2_QueryInterface(HTMLWINDOW2(This), riid, ppv);
|
||||
}
|
||||
|
||||
static ULONG WINAPI WindowDispEx_AddRef(IDispatchEx *iface)
|
||||
{
|
||||
HTMLWindow *This = DISPEX_THIS(iface);
|
||||
|
||||
return IHTMLWindow2_AddRef(HTMLWINDOW2(This));
|
||||
}
|
||||
|
||||
static ULONG WINAPI WindowDispEx_Release(IDispatchEx *iface)
|
||||
{
|
||||
HTMLWindow *This = DISPEX_THIS(iface);
|
||||
|
||||
return IHTMLWindow2_Release(HTMLWINDOW2(This));
|
||||
}
|
||||
|
||||
static HRESULT WINAPI WindowDispEx_GetTypeInfoCount(IDispatchEx *iface, UINT *pctinfo)
|
||||
{
|
||||
HTMLWindow *This = DISPEX_THIS(iface);
|
||||
|
||||
TRACE("(%p)->(%p)\n", This, pctinfo);
|
||||
|
||||
return IDispatchEx_GetTypeInfoCount(DISPATCHEX(&This->dispex), pctinfo);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI WindowDispEx_GetTypeInfo(IDispatchEx *iface, UINT iTInfo,
|
||||
LCID lcid, ITypeInfo **ppTInfo)
|
||||
{
|
||||
HTMLWindow *This = DISPEX_THIS(iface);
|
||||
|
||||
TRACE("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
|
||||
|
||||
return IDispatchEx_GetTypeInfo(DISPATCHEX(&This->dispex), iTInfo, lcid, ppTInfo);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI WindowDispEx_GetIDsOfNames(IDispatchEx *iface, REFIID riid,
|
||||
LPOLESTR *rgszNames, UINT cNames,
|
||||
LCID lcid, DISPID *rgDispId)
|
||||
{
|
||||
HTMLWindow *This = DISPEX_THIS(iface);
|
||||
|
||||
TRACE("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
|
||||
lcid, rgDispId);
|
||||
|
||||
/* FIXME: Use script dispatch */
|
||||
|
||||
return IDispatchEx_GetIDsOfNames(DISPATCHEX(&This->dispex), riid, rgszNames, cNames, lcid, rgDispId);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI WindowDispEx_Invoke(IDispatchEx *iface, DISPID dispIdMember,
|
||||
REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
|
||||
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
|
||||
{
|
||||
HTMLWindow *This = DISPEX_THIS(iface);
|
||||
|
||||
TRACE("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
|
||||
lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
|
||||
|
||||
/* FIXME: Use script dispatch */
|
||||
|
||||
return IDispatchEx_Invoke(DISPATCHEX(&This->dispex), dispIdMember, riid, lcid, wFlags, pDispParams,
|
||||
pVarResult, pExcepInfo, puArgErr);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI WindowDispEx_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD grfdex, DISPID *pid)
|
||||
{
|
||||
HTMLWindow *This = DISPEX_THIS(iface);
|
||||
|
||||
TRACE("(%p)->(%s %x %p)\n", This, debugstr_w(bstrName), grfdex, pid);
|
||||
|
||||
return IDispatchEx_GetDispID(DISPATCHEX(&This->dispex), bstrName, grfdex, pid);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI WindowDispEx_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid, WORD wFlags, DISPPARAMS *pdp,
|
||||
VARIANT *pvarRes, EXCEPINFO *pei, IServiceProvider *pspCaller)
|
||||
{
|
||||
HTMLWindow *This = DISPEX_THIS(iface);
|
||||
|
||||
TRACE("(%p)->(%x %x %x %p %p %p %p)\n", This, id, lcid, wFlags, pdp, pvarRes, pei, pspCaller);
|
||||
|
||||
return IDispatchEx_InvokeEx(DISPATCHEX(&This->dispex), id, lcid, wFlags, pdp, pvarRes, pei, pspCaller);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI WindowDispEx_DeleteMemberByName(IDispatchEx *iface, BSTR bstrName, DWORD grfdex)
|
||||
{
|
||||
HTMLWindow *This = DISPEX_THIS(iface);
|
||||
|
||||
TRACE("(%p)->(%s %x)\n", This, debugstr_w(bstrName), grfdex);
|
||||
|
||||
return IDispatchEx_DeleteMemberByName(DISPATCHEX(&This->dispex), bstrName, grfdex);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI WindowDispEx_DeleteMemberByDispID(IDispatchEx *iface, DISPID id)
|
||||
{
|
||||
HTMLWindow *This = DISPEX_THIS(iface);
|
||||
|
||||
TRACE("(%p)->(%x)\n", This, id);
|
||||
|
||||
return IDispatchEx_DeleteMemberByDispID(DISPATCHEX(&This->dispex), id);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI WindowDispEx_GetMemberProperties(IDispatchEx *iface, DISPID id, DWORD grfdexFetch, DWORD *pgrfdex)
|
||||
{
|
||||
HTMLWindow *This = DISPEX_THIS(iface);
|
||||
|
||||
TRACE("(%p)->(%x %x %p)\n", This, id, grfdexFetch, pgrfdex);
|
||||
|
||||
return IDispatchEx_GetMemberProperties(DISPATCHEX(&This->dispex), id, grfdexFetch, pgrfdex);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI WindowDispEx_GetMemberName(IDispatchEx *iface, DISPID id, BSTR *pbstrName)
|
||||
{
|
||||
HTMLWindow *This = DISPEX_THIS(iface);
|
||||
|
||||
TRACE("(%p)->(%x %p)\n", This, id, pbstrName);
|
||||
|
||||
return IDispatchEx_GetMemberName(DISPATCHEX(&This->dispex), id, pbstrName);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI WindowDispEx_GetNextDispID(IDispatchEx *iface, DWORD grfdex, DISPID id, DISPID *pid)
|
||||
{
|
||||
HTMLWindow *This = DISPEX_THIS(iface);
|
||||
|
||||
TRACE("(%p)->(%x %x %p)\n", This, grfdex, id, pid);
|
||||
|
||||
return IDispatchEx_GetNextDispID(DISPATCHEX(&This->dispex), grfdex, id, pid);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI WindowDispEx_GetNameSpaceParent(IDispatchEx *iface, IUnknown **ppunk)
|
||||
{
|
||||
HTMLWindow *This = DISPEX_THIS(iface);
|
||||
|
||||
TRACE("(%p)->(%p)\n", This, ppunk);
|
||||
|
||||
*ppunk = NULL;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
#undef DISPEX_THIS
|
||||
|
||||
static const IDispatchExVtbl WindowDispExVtbl = {
|
||||
WindowDispEx_QueryInterface,
|
||||
WindowDispEx_AddRef,
|
||||
WindowDispEx_Release,
|
||||
WindowDispEx_GetTypeInfoCount,
|
||||
WindowDispEx_GetTypeInfo,
|
||||
WindowDispEx_GetIDsOfNames,
|
||||
WindowDispEx_Invoke,
|
||||
WindowDispEx_GetDispID,
|
||||
WindowDispEx_InvokeEx,
|
||||
WindowDispEx_DeleteMemberByName,
|
||||
WindowDispEx_DeleteMemberByDispID,
|
||||
WindowDispEx_GetMemberProperties,
|
||||
WindowDispEx_GetMemberName,
|
||||
WindowDispEx_GetNextDispID,
|
||||
WindowDispEx_GetNameSpaceParent
|
||||
};
|
||||
|
||||
static const tid_t HTMLWindow_iface_tids[] = {
|
||||
IHTMLWindow2_tid,
|
||||
IHTMLWindow3_tid,
|
||||
0
|
||||
};
|
||||
static dispex_static_data_t HTMLWindow_dispex = {
|
||||
NULL,
|
||||
DispHTMLWindow2_tid,
|
||||
NULL,
|
||||
HTMLWindow_iface_tids
|
||||
};
|
||||
|
||||
static const char wineConfig_func[] =
|
||||
"window.__defineGetter__(\"external\",function() {\n"
|
||||
" return window.__wineWindow__.external;\n"
|
||||
|
@ -869,10 +1284,13 @@ HTMLWindow *HTMLWindow_Create(HTMLDocument *doc)
|
|||
HTMLWindow *ret = heap_alloc(sizeof(HTMLWindow));
|
||||
|
||||
ret->lpHTMLWindow2Vtbl = &HTMLWindow2Vtbl;
|
||||
ret->lpHTMLWindow3Vtbl = &HTMLWindow3Vtbl;
|
||||
ret->lpIDispatchExVtbl = &WindowDispExVtbl;
|
||||
ret->ref = 1;
|
||||
ret->nswindow = NULL;
|
||||
ret->doc = doc;
|
||||
|
||||
init_dispex(&ret->dispex, (IUnknown*)HTMLWINDOW2(ret), &HTMLWindow_dispex);
|
||||
|
||||
if(doc->nscontainer) {
|
||||
nsresult nsres;
|
||||
|
||||
|
|
|
@ -93,7 +93,7 @@ static void set_registry(LPCSTR install_dir)
|
|||
WCHAR mshtml_key[100];
|
||||
LPWSTR gecko_path;
|
||||
HKEY hkey;
|
||||
DWORD res, len, size;
|
||||
DWORD res, len;
|
||||
|
||||
static const WCHAR wszGeckoPath[] = {'G','e','c','k','o','P','a','t','h',0};
|
||||
static const WCHAR wszWineGecko[] = {'w','i','n','e','_','g','e','c','k','o',0};
|
||||
|
@ -120,7 +120,6 @@ static void set_registry(LPCSTR install_dir)
|
|||
|
||||
memcpy(gecko_path+len, wszWineGecko, sizeof(wszWineGecko));
|
||||
|
||||
size = len*sizeof(WCHAR)+sizeof(wszWineGecko);
|
||||
res = RegSetValueExW(hkey, wszGeckoPath, 0, REG_SZ, (LPVOID)gecko_path,
|
||||
len*sizeof(WCHAR)+sizeof(wszWineGecko));
|
||||
heap_free(gecko_path);
|
||||
|
@ -203,7 +202,7 @@ static BOOL install_from_unix_file(const char *file_name)
|
|||
}
|
||||
|
||||
dos_file_name = wine_get_dos_file_name(file_name);
|
||||
if(!file_name) {
|
||||
if(!dos_file_name) {
|
||||
ERR("Could not get dos file name of %s\n", debugstr_a(file_name));
|
||||
return FALSE;
|
||||
}
|
||||
|
|
|
@ -49,47 +49,6 @@ DWORD mshtml_tls = 0;
|
|||
|
||||
static HINSTANCE shdoclc = NULL;
|
||||
|
||||
static ITypeLib *typelib;
|
||||
static ITypeInfo *typeinfos[LAST_tid];
|
||||
|
||||
static REFIID tid_ids[] = {
|
||||
&IID_IHTMLWindow2
|
||||
};
|
||||
|
||||
HRESULT get_typeinfo(enum tid_t tid, ITypeInfo **typeinfo)
|
||||
{
|
||||
HRESULT hres;
|
||||
|
||||
if(!typelib) {
|
||||
ITypeLib *tl;
|
||||
|
||||
hres = LoadRegTypeLib(&LIBID_MSHTML, 4, 0, LOCALE_SYSTEM_DEFAULT, &tl);
|
||||
if(FAILED(hres)) {
|
||||
ERR("LoadRegTypeLib failed: %08x\n", hres);
|
||||
return hres;
|
||||
}
|
||||
|
||||
if(InterlockedCompareExchangePointer((void**)&typelib, tl, NULL))
|
||||
ITypeLib_Release(tl);
|
||||
}
|
||||
|
||||
if(!typeinfos[tid]) {
|
||||
ITypeInfo *typeinfo;
|
||||
|
||||
hres = ITypeLib_GetTypeInfoOfGuid(typelib, tid_ids[tid], &typeinfo);
|
||||
if(FAILED(hres)) {
|
||||
ERR("GetTypeInfoOfGuid failed: %08x\n", hres);
|
||||
return hres;
|
||||
}
|
||||
|
||||
if(InterlockedCompareExchangePointer((void**)(typeinfos+tid), typeinfo, NULL))
|
||||
ITypeInfo_Release(typeinfo);
|
||||
}
|
||||
|
||||
*typeinfo = typeinfos[tid];
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static void thread_detach(void)
|
||||
{
|
||||
thread_data_t *thread_data;
|
||||
|
@ -107,16 +66,7 @@ static void thread_detach(void)
|
|||
static void process_detach(void)
|
||||
{
|
||||
close_gecko();
|
||||
|
||||
if(typelib) {
|
||||
unsigned i;
|
||||
|
||||
for(i=0; i < sizeof(typeinfos)/sizeof(*typeinfos); i++)
|
||||
if(typeinfos[i])
|
||||
ITypeInfo_Release(typeinfos[i]);
|
||||
|
||||
ITypeLib_Release(typelib);
|
||||
}
|
||||
release_typelib();
|
||||
|
||||
if(shdoclc)
|
||||
FreeLibrary(shdoclc);
|
||||
|
|
|
@ -290,7 +290,7 @@ HKCR,"MIME\Database\Content Type\image/gif","CLSID",,"%CLSID_HTMLDocument%"
|
|||
HKCR,"MIME\Database\Content Type\image/gif","Extension",,".gif"
|
||||
HKCR,"MIME\Database\Content Type\image/gif","Image Filter CLSID",,"%CLSID_IImageDecodeFilter%"
|
||||
HKCR,"MIME\Database\Content Type\image/gif\Bits","0",1,04,00,00,00,FF,FF,FF,FF,47,49,46,38
|
||||
HKCR,".gif",,,"giffile"
|
||||
HKCR,".gif",,2,"giffile"
|
||||
HKCR,".gif","Content Type",,"image/gif"
|
||||
HKCR,"giffile",,,"GIF Image"
|
||||
HKCR,"giffile\CLSID",,,"%CLSID_HTMLDocument%"
|
||||
|
@ -329,7 +329,7 @@ HKCR,"MIME\Database\Content Type\image/x-icon","Image Filter CLSID",,"%CLSID_IIm
|
|||
HKCR,".ico","Content Type",,"image/x-icon"
|
||||
|
||||
;; JPE
|
||||
HKCR,".jpe",,,"jpegfile"
|
||||
HKCR,".jpe",,2,"jpegfile"
|
||||
HKCR,".jpe","Content Type",,"image/jpeg"
|
||||
HKCR,"jpegfile",,,"JPEG Image"
|
||||
HKCR,"jpegfile\CLSID",,,"%CLSID_HTMLDocument%"
|
||||
|
@ -344,7 +344,7 @@ HKCR,"MIME\Database\Content Type\image/jpeg","CLSID",,"%CLSID_HTMLDocument%"
|
|||
HKCR,"MIME\Database\Content Type\image/jpeg","Extension",,".jpg"
|
||||
HKCR,"MIME\Database\Content Type\image/jpeg\Bits","0",1,02,00,00,00,FF,FF,FF,D8
|
||||
HKCR,"MIME\Database\Content Type\image/jpeg","Image Filter CLSID",,"%CLSID_IImageDecodeFilter%"
|
||||
HKCR,".jpeg",,,"jpegfile"
|
||||
HKCR,".jpeg",,2,"jpegfile"
|
||||
HKCR,".jpeg","Content Type",,"image/jpeg"
|
||||
HKCR,"jpegfile",,,"JPEG Image"
|
||||
HKCR,"jpegfile\CLSID",,,"%CLSID_HTMLDocument%"
|
||||
|
@ -355,7 +355,7 @@ HKCR,"jpegfile\shell\open\ddeexec\Topic",,,"WWW_OpenURL"
|
|||
;; HKCR,"jpegfile\DefaultIcon",,,"%IEXPLORE%,8"
|
||||
|
||||
;; JPG
|
||||
HKCR,".jpg",,,"jpegfile"
|
||||
HKCR,".jpg",,2,"jpegfile"
|
||||
HKCR,".jpg","Content Type",,"image/jpeg"
|
||||
HKCR,"jpegfile",,,"JPEG Image"
|
||||
HKCR,"jpegfile\CLSID",,,"%CLSID_HTMLDocument%"
|
||||
|
@ -367,9 +367,9 @@ HKCR,"jpegfile\shell\open\ddeexec\Topic",,,"WWW_OpenURL"
|
|||
|
||||
;; MHTML
|
||||
HKCR,"MIME\Database\Content Type\message/rfc822","CLSID",,"%CLSID_MHTMLDocument%"
|
||||
HKCR,".mhtml",,,"mhtmlfile"
|
||||
HKCR,".mhtml",,2,"mhtmlfile"
|
||||
HKCR,".mhtml","Content Type",,"message/rfc822"
|
||||
HKCR,".mht",,,"mhtmlfile"
|
||||
HKCR,".mht",,2,"mhtmlfile"
|
||||
HKCR,".mht","Content Type",,"message/rfc822"
|
||||
HKCR,"mhtmlfile",,,"MHTML Document"
|
||||
HKCR,"mhtmlfile\BrowseInPlace",,,""
|
||||
|
@ -380,7 +380,7 @@ HKCR,"MIME\Database\Content Type\image/pjpeg","CLSID",,"%CLSID_HTMLDocument%"
|
|||
HKCR,"MIME\Database\Content Type\image/pjpeg","Extension",,".jpg"
|
||||
HKCR,"MIME\Database\Content Type\image/pjpeg\Bits","0",1,02,00,00,00,FF,FF,FF,D8
|
||||
HKCR,"MIME\Database\Content Type\image/pjpeg","Image Filter CLSID",,"%CLSID_IImageDecodeFilter%"
|
||||
HKCR,".jfif",,,"pjpegfile"
|
||||
HKCR,".jfif",,2,"pjpegfile"
|
||||
HKCR,".jfif","Content Type",,"image/jpeg"
|
||||
HKCR,"pjpegfile",,,"JPEG Image"
|
||||
HKCR,"pjpegfile\CLSID",,,"%CLSID_HTMLDocument%"
|
||||
|
@ -393,7 +393,7 @@ HKCR,"pjpegfile\shell\open\ddeexec\Topic",,,"WWW_OpenURL"
|
|||
;; PNG
|
||||
HKCR,"MIME\Database\Content Type\image/png","Extension",,".png"
|
||||
HKCR,"MIME\Database\Content Type\image/x-png","Extension",,".png"
|
||||
HKCR,".png",,,"pngfile"
|
||||
HKCR,".png",,2,"pngfile"
|
||||
HKCR,".png","Content Type",,"image/png"
|
||||
HKCR,"pngfile",,,"PNG Image"
|
||||
HKCR,"pngfile\CLSID",,,"%CLSID_HTMLDocument%"
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd">
|
||||
<group>
|
||||
<module name="mshtml" type="win32dll" baseaddress="${BASEADDRESS_MSHTML}" installbase="system32" installname="mshtml.dll" allowwarnings="true">
|
||||
<!--autoregister infsection="OleControlDlls" type="Both" /-->
|
||||
<autoregister infsection="OleControlDlls" type="Both" />
|
||||
<importlibrary definition="mshtml.spec.def" />
|
||||
<include base="mshtml">.</include>
|
||||
<include base="ReactOS">include/reactos/wine</include>
|
||||
|
@ -10,15 +10,20 @@
|
|||
<define name="WINVER">0x600</define>
|
||||
<define name="_WIN32_WINNT">0x600</define>
|
||||
<file>conpoint.c</file>
|
||||
<file>dispex.c</file>
|
||||
<file>editor.c</file>
|
||||
<file>hlink.c</file>
|
||||
<file>htmlanchor.c</file>
|
||||
<file>htmlbody.c</file>
|
||||
<file>htmlcomment.c</file>
|
||||
<file>htmldoc.c</file>
|
||||
<file>htmldoc3.c</file>
|
||||
<file>htmldoc5.c</file>
|
||||
<file>htmlelem.c</file>
|
||||
<file>htmlelem2.c</file>
|
||||
<file>htmlevent.c</file>
|
||||
<file>htmlgeneric.c</file>
|
||||
<file>htmlimg.c</file>
|
||||
<file>htmlinput.c</file>
|
||||
<file>htmllocation.c</file>
|
||||
<file>htmlnode.c</file>
|
||||
|
@ -28,8 +33,9 @@
|
|||
<file>htmlstyle.c</file>
|
||||
<file>htmlstylesheet.c</file>
|
||||
<file>htmltable.c</file>
|
||||
<file>htmltextcont.c</file>
|
||||
<file>htmltextarea.c</file>
|
||||
<file>htmltextcont.c</file>
|
||||
<file>htmltextnode.c</file>
|
||||
<file>htmlwindow.c</file>
|
||||
<file>install.c</file>
|
||||
<file>loadopts.c</file>
|
||||
|
@ -52,10 +58,11 @@
|
|||
<file>txtrange.c</file>
|
||||
<file>view.c</file>
|
||||
<file>rsrc.rc</file>
|
||||
<file>nsiface.idl</file>
|
||||
<include base="mshtml" root="intermediate">.</include>
|
||||
<file>mshtml.spec</file>
|
||||
<library>wine</library>
|
||||
<library>strmiids</library>
|
||||
<library>uuid</library>
|
||||
<library>urlmon</library>
|
||||
<library>shlwapi</library>
|
||||
<library>ole32</library>
|
||||
|
@ -64,7 +71,10 @@
|
|||
<library>gdi32</library>
|
||||
<library>advapi32</library>
|
||||
<library>kernel32</library>
|
||||
<library>uuid</library>
|
||||
<library>ntdll</library>
|
||||
<dependency>mshtml_nsiface_header</dependency>
|
||||
</module>
|
||||
<module name="mshtml_nsiface_header" type="idlheader" allowwarnings="true">
|
||||
<file>nsiface.idl</file>
|
||||
</module>
|
||||
</group>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2005-2006 Jacek Caban for CodeWeavers
|
||||
* Copyright 2005-2008 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
|
||||
|
@ -21,6 +21,7 @@
|
|||
#include "mshtml.h"
|
||||
#include "mshtmhst.h"
|
||||
#include "hlink.h"
|
||||
#include "dispex.h"
|
||||
|
||||
#include "wine/list.h"
|
||||
#include "wine/unicode.h"
|
||||
|
@ -55,15 +56,99 @@ typedef struct HTMLDOMNode HTMLDOMNode;
|
|||
typedef struct ConnectionPoint ConnectionPoint;
|
||||
typedef struct BSCallback BSCallback;
|
||||
typedef struct nsChannelBSC nsChannelBSC;
|
||||
typedef struct event_target_t event_target_t;
|
||||
|
||||
/* NOTE: make sure to keep in sync with dispex.c */
|
||||
typedef enum {
|
||||
NULL_tid,
|
||||
DispDOMChildrenCollection_tid,
|
||||
DispHTMLCommentElement_tid,
|
||||
DispHTMLDocument_tid,
|
||||
DispHTMLDOMTextNode_tid,
|
||||
DispHTMLElementCollection_tid,
|
||||
DispHTMLGenericElement_tid,
|
||||
DispHTMLImg_tid,
|
||||
DispHTMLInputElement_tid,
|
||||
DispHTMLOptionElement_tid,
|
||||
DispHTMLSelectElement_tid,
|
||||
DispHTMLStyle_tid,
|
||||
DispHTMLUnknownElement_tid,
|
||||
DispHTMLWindow2_tid,
|
||||
IHTMLCommentElement_tid,
|
||||
IHTMLDocument2_tid,
|
||||
IHTMLDocument3_tid,
|
||||
IHTMLDocument4_tid,
|
||||
IHTMLDocument5_tid,
|
||||
IHTMLDOMChildrenCollection_tid,
|
||||
IHTMLDOMNode_tid,
|
||||
IHTMLDOMNode2_tid,
|
||||
IHTMLDOMTextNode_tid,
|
||||
IHTMLElement_tid,
|
||||
IHTMLElement2_tid,
|
||||
IHTMLElementCollection_tid,
|
||||
IHTMLGenericElement_tid,
|
||||
IHTMLImgElement_tid,
|
||||
IHTMLInputElement_tid,
|
||||
IHTMLOptionElement_tid,
|
||||
IHTMLSelectElement_tid,
|
||||
IHTMLStyle_tid,
|
||||
IHTMLWindow2_tid,
|
||||
IHTMLWindow3_tid,
|
||||
IOmNavigator_tid,
|
||||
LAST_tid
|
||||
} tid_t;
|
||||
|
||||
typedef enum {
|
||||
EVENTID_CHANGE,
|
||||
EVENTID_CLICK,
|
||||
EVENTID_KEYUP,
|
||||
EVENTID_LOAD,
|
||||
EVENTID_LAST
|
||||
} eventid_t;
|
||||
|
||||
typedef struct dispex_data_t dispex_data_t;
|
||||
typedef struct dispex_dynamic_data_t dispex_dynamic_data_t;
|
||||
|
||||
#define MSHTML_DISPID_CUSTOM_MIN 0x60000000
|
||||
#define MSHTML_DISPID_CUSTOM_MAX 0x6fffffff
|
||||
|
||||
typedef struct {
|
||||
HRESULT (*get_dispid)(IUnknown*,BSTR,DWORD,DISPID*);
|
||||
HRESULT (*invoke)(IUnknown*,DISPID,LCID,WORD,DISPPARAMS*,VARIANT*,EXCEPINFO*,IServiceProvider*);
|
||||
} dispex_static_data_vtbl_t;
|
||||
|
||||
typedef struct {
|
||||
const dispex_static_data_vtbl_t *vtbl;
|
||||
const tid_t disp_tid;
|
||||
dispex_data_t *data;
|
||||
const tid_t* const iface_tids;
|
||||
} dispex_static_data_t;
|
||||
|
||||
typedef struct {
|
||||
const IDispatchExVtbl *lpIDispatchExVtbl;
|
||||
|
||||
IUnknown *outer;
|
||||
|
||||
dispex_static_data_t *data;
|
||||
dispex_dynamic_data_t *dynamic_data;
|
||||
} DispatchEx;
|
||||
|
||||
void init_dispex(DispatchEx*,IUnknown*,dispex_static_data_t*);
|
||||
BOOL dispex_query_interface(DispatchEx*,REFIID,void**);
|
||||
|
||||
typedef struct {
|
||||
DispatchEx dispex;
|
||||
const IHTMLWindow2Vtbl *lpHTMLWindow2Vtbl;
|
||||
const IHTMLWindow3Vtbl *lpHTMLWindow3Vtbl;
|
||||
const IDispatchExVtbl *lpIDispatchExVtbl;
|
||||
|
||||
LONG ref;
|
||||
|
||||
HTMLDocument *doc;
|
||||
nsIDOMWindow *nswindow;
|
||||
|
||||
IHTMLEventObj *event;
|
||||
|
||||
struct list entry;
|
||||
} HTMLWindow;
|
||||
|
||||
|
@ -114,6 +199,7 @@ typedef struct {
|
|||
} HTMLOptionElementFactory;
|
||||
|
||||
struct HTMLDocument {
|
||||
DispatchEx dispex;
|
||||
const IHTMLDocument2Vtbl *lpHTMLDocument2Vtbl;
|
||||
const IHTMLDocument3Vtbl *lpHTMLDocument3Vtbl;
|
||||
const IHTMLDocument4Vtbl *lpHTMLDocument4Vtbl;
|
||||
|
@ -133,6 +219,7 @@ struct HTMLDocument {
|
|||
const IHlinkTargetVtbl *lpHlinkTargetVtbl;
|
||||
const IPersistStreamInitVtbl *lpPersistStreamInitVtbl;
|
||||
const ICustomDocVtbl *lpCustomDocVtbl;
|
||||
const IDispatchExVtbl *lpIDispatchExVtbl;
|
||||
|
||||
LONG ref;
|
||||
|
||||
|
@ -205,6 +292,7 @@ struct NSContainer {
|
|||
nsEventListener keypress_listener;
|
||||
nsEventListener load_listener;
|
||||
nsEventListener node_insert_listener;
|
||||
nsEventListener htmlevent_listener;
|
||||
|
||||
nsIWebBrowser *webbrowser;
|
||||
nsIWebNavigation *navigation;
|
||||
|
@ -225,6 +313,8 @@ struct NSContainer {
|
|||
|
||||
nsChannelBSC *bscallback; /* hack */
|
||||
HWND reset_focus; /* hack */
|
||||
|
||||
BOOL event_vector[EVENTID_LAST];
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
|
@ -251,13 +341,16 @@ typedef struct {
|
|||
} NodeImplVtbl;
|
||||
|
||||
struct HTMLDOMNode {
|
||||
const IHTMLDOMNodeVtbl *lpHTMLDOMNodeVtbl;
|
||||
DispatchEx dispex;
|
||||
const IHTMLDOMNodeVtbl *lpHTMLDOMNodeVtbl;
|
||||
const IHTMLDOMNode2Vtbl *lpHTMLDOMNode2Vtbl;
|
||||
const NodeImplVtbl *vtbl;
|
||||
|
||||
LONG ref;
|
||||
|
||||
nsIDOMNode *nsnode;
|
||||
HTMLDocument *doc;
|
||||
event_target_t *event_target;
|
||||
|
||||
HTMLDOMNode *next;
|
||||
};
|
||||
|
@ -281,6 +374,7 @@ typedef struct {
|
|||
} HTMLTextContainer;
|
||||
|
||||
#define HTMLWINDOW2(x) ((IHTMLWindow2*) &(x)->lpHTMLWindow2Vtbl)
|
||||
#define HTMLWINDOW3(x) ((IHTMLWindow3*) &(x)->lpHTMLWindow3Vtbl)
|
||||
|
||||
#define HTMLDOC(x) ((IHTMLDocument2*) &(x)->lpHTMLDocument2Vtbl)
|
||||
#define HTMLDOC3(x) ((IHTMLDocument3*) &(x)->lpHTMLDocument3Vtbl)
|
||||
|
@ -328,12 +422,15 @@ typedef struct {
|
|||
#define HTMLELEM(x) ((IHTMLElement*) &(x)->lpHTMLElementVtbl)
|
||||
#define HTMLELEM2(x) ((IHTMLElement2*) &(x)->lpHTMLElement2Vtbl)
|
||||
#define HTMLDOMNODE(x) ((IHTMLDOMNode*) &(x)->lpHTMLDOMNodeVtbl)
|
||||
#define HTMLDOMNODE2(x) ((IHTMLDOMNode2*) &(x)->lpHTMLDOMNode2Vtbl)
|
||||
|
||||
#define HTMLTEXTCONT(x) ((IHTMLTextContainer*) &(x)->lpHTMLTextContainerVtbl)
|
||||
|
||||
#define HTMLOPTFACTORY(x) ((IHTMLOptionElementFactory*) &(x)->lpHTMLOptionElementFactoryVtbl)
|
||||
#define HTMLLOCATION(x) ((IHTMLLocation*) &(x)->lpHTMLLocationVtbl)
|
||||
|
||||
#define DISPATCHEX(x) ((IDispatchEx*) &(x)->lpIDispatchExVtbl)
|
||||
|
||||
#define DEFINE_THIS2(cls,ifc,iface) ((cls*)((BYTE*)(iface)-offsetof(cls,ifc)))
|
||||
#define DEFINE_THIS(cls,ifc,iface) DEFINE_THIS2(cls,lp ## ifc ## Vtbl,iface)
|
||||
|
||||
|
@ -405,13 +502,20 @@ nsIWritableVariant *create_nsvariant(void);
|
|||
void nsnode_to_nsstring(nsIDOMNode*,nsAString*);
|
||||
void get_editor_controller(NSContainer*);
|
||||
void init_nsevents(NSContainer*);
|
||||
void add_nsevent_listener(NSContainer*,LPCWSTR);
|
||||
nsresult get_nsinterface(nsISupports*,REFIID,void**);
|
||||
|
||||
void check_event_attr(HTMLDocument*,nsIDOMElement*);
|
||||
void release_event_target(event_target_t*);
|
||||
void fire_event(HTMLDocument*,eventid_t,nsIDOMNode*);
|
||||
HRESULT set_node_event(HTMLDOMNode*,eventid_t,VARIANT*);
|
||||
eventid_t str_to_eid(LPCWSTR);
|
||||
|
||||
void set_document_bscallback(HTMLDocument*,nsChannelBSC*);
|
||||
void set_current_mon(HTMLDocument*,IMoniker*);
|
||||
HRESULT start_binding(HTMLDocument*,BSCallback*,IBindCtx*);
|
||||
|
||||
HRESULT bind_mon_to_buffer(HTMLDocument*,IMoniker*,void**);
|
||||
HRESULT bind_mon_to_buffer(HTMLDocument*,IMoniker*,void**,DWORD*);
|
||||
|
||||
nsChannelBSC *create_channelbsc(IMoniker*);
|
||||
HRESULT channelbsc_load_stream(nsChannelBSC*,IStream*);
|
||||
|
@ -427,16 +531,22 @@ IHTMLStyleSheetsCollection *HTMLStyleSheetsCollection_Create(nsIDOMStyleSheetLis
|
|||
void detach_selection(HTMLDocument*);
|
||||
void detach_ranges(HTMLDocument*);
|
||||
|
||||
HTMLElement *HTMLElement_Create(nsIDOMNode*);
|
||||
HTMLDOMNode *HTMLDOMTextNode_Create(HTMLDocument*,nsIDOMNode*);
|
||||
|
||||
HTMLElement *HTMLElement_Create(HTMLDocument*,nsIDOMNode*,BOOL);
|
||||
HTMLElement *HTMLCommentElement_Create(HTMLDocument*,nsIDOMNode*);
|
||||
HTMLElement *HTMLAnchorElement_Create(nsIDOMHTMLElement*);
|
||||
HTMLElement *HTMLBodyElement_Create(nsIDOMHTMLElement*);
|
||||
HTMLElement *HTMLImgElement_Create(nsIDOMHTMLElement*);
|
||||
HTMLElement *HTMLInputElement_Create(nsIDOMHTMLElement*);
|
||||
HTMLElement *HTMLOptionElement_Create(nsIDOMHTMLElement*);
|
||||
HTMLElement *HTMLScriptElement_Create(nsIDOMHTMLElement*);
|
||||
HTMLElement *HTMLSelectElement_Create(nsIDOMHTMLElement*);
|
||||
HTMLElement *HTMLTable_Create(nsIDOMHTMLElement*);
|
||||
HTMLElement *HTMLTextAreaElement_Create(nsIDOMHTMLElement*);
|
||||
HTMLElement *HTMLGenericElement_Create(nsIDOMHTMLElement*);
|
||||
|
||||
void HTMLDOMNode_Init(HTMLDocument*,HTMLDOMNode*,nsIDOMNode*);
|
||||
void HTMLElement_Init(HTMLElement*);
|
||||
void HTMLElement2_Init(HTMLElement*);
|
||||
void HTMLTextContainer_Init(HTMLTextContainer*);
|
||||
|
@ -447,12 +557,13 @@ void HTMLDOMNode_destructor(HTMLDOMNode*);
|
|||
HRESULT HTMLElement_QI(HTMLDOMNode*,REFIID,void**);
|
||||
void HTMLElement_destructor(HTMLDOMNode*);
|
||||
|
||||
HTMLDOMNode *get_node(HTMLDocument*,nsIDOMNode*);
|
||||
HTMLDOMNode *get_node(HTMLDocument*,nsIDOMNode*,BOOL);
|
||||
void release_nodes(HTMLDocument*);
|
||||
|
||||
void release_script_hosts(HTMLDocument*);
|
||||
void connect_scripts(HTMLDocument*);
|
||||
void doc_insert_script(HTMLDocument*,nsIDOMHTMLScriptElement*);
|
||||
IDispatch *script_parse_event(HTMLDocument*,LPCWSTR);
|
||||
|
||||
IHTMLElementCollection *create_all_collection(HTMLDOMNode*);
|
||||
|
||||
|
@ -506,20 +617,19 @@ typedef struct {
|
|||
HWND thread_hwnd;
|
||||
task_t *task_queue_head;
|
||||
task_t *task_queue_tail;
|
||||
struct list timer_list;
|
||||
} thread_data_t;
|
||||
|
||||
thread_data_t *get_thread_data(BOOL);
|
||||
HWND get_thread_hwnd(void);
|
||||
void push_task(task_t*);
|
||||
void remove_doc_tasks(const HTMLDocument*);
|
||||
DWORD set_task_timer(HTMLDocument*,DWORD,BOOL,IDispatch*);
|
||||
HRESULT clear_task_timer(HTMLDocument*,BOOL,DWORD);
|
||||
|
||||
/* typelibs */
|
||||
enum tid_t {
|
||||
IHTMLWindow2_tid,
|
||||
LAST_tid
|
||||
};
|
||||
|
||||
HRESULT get_typeinfo(enum tid_t, ITypeInfo**);
|
||||
HRESULT get_typeinfo(tid_t,ITypeInfo**);
|
||||
void release_typelib(void);
|
||||
void call_disp_func(HTMLDocument*,IDispatch*);
|
||||
|
||||
DEFINE_GUID(CLSID_AboutProtocol, 0x3050F406, 0x98B5, 0x11CF, 0xBB,0x82, 0x00,0xAA,0x00,0xBD,0xCE,0x0B);
|
||||
DEFINE_GUID(CLSID_JSProtocol, 0x3050F3B2, 0x98B5, 0x11CF, 0xBB,0x82, 0x00,0xAA,0x00,0xBD,0xCE,0x0B);
|
||||
|
|
|
@ -807,7 +807,7 @@ static BufferBSC *create_bufferbsc(IMoniker *mon)
|
|||
return ret;
|
||||
}
|
||||
|
||||
HRESULT bind_mon_to_buffer(HTMLDocument *doc, IMoniker *mon, void **buf)
|
||||
HRESULT bind_mon_to_buffer(HTMLDocument *doc, IMoniker *mon, void **buf, DWORD *size)
|
||||
{
|
||||
BufferBSC *bsc = create_bufferbsc(mon);
|
||||
HRESULT hres;
|
||||
|
@ -820,6 +820,7 @@ HRESULT bind_mon_to_buffer(HTMLDocument *doc, IMoniker *mon, void **buf)
|
|||
if(SUCCEEDED(hres)) {
|
||||
*buf = bsc->buf;
|
||||
bsc->buf = NULL;
|
||||
*size = bsc->bsc.readed;
|
||||
bsc->size = 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -301,6 +301,65 @@ static void set_lang(nsIPrefBranch *pref)
|
|||
ERR("SetCharPref failed: %08x\n", nsres);
|
||||
}
|
||||
|
||||
static void set_proxy(nsIPrefBranch *pref)
|
||||
{
|
||||
char proxy[512];
|
||||
char * proxy_port;
|
||||
int proxy_port_num;
|
||||
DWORD enabled = 0, res, size, type;
|
||||
HKEY hkey;
|
||||
nsresult nsres;
|
||||
|
||||
static const WCHAR proxy_keyW[] =
|
||||
{'S','o','f','t','w','a','r','e',
|
||||
'\\','M','i','c','r','o','s','o','f','t',
|
||||
'\\','W','i','n','d','o','w','s',
|
||||
'\\','C','u','r','r','e','n','t','V','e','r','s','i','o','n',
|
||||
'\\','I','n','t','e','r','n','e','t',' ','S','e','t','t','i','n','g','s',0};
|
||||
|
||||
res = RegOpenKeyW(HKEY_CURRENT_USER, proxy_keyW, &hkey);
|
||||
if(res != ERROR_SUCCESS)
|
||||
return;
|
||||
|
||||
size = sizeof(enabled);
|
||||
res = RegQueryValueExA(hkey, "ProxyEnable", 0, &type, (LPBYTE)&enabled, &size);
|
||||
if(res != ERROR_SUCCESS || type != REG_DWORD || enabled == 0)
|
||||
{
|
||||
RegCloseKey(hkey);
|
||||
return;
|
||||
}
|
||||
|
||||
size = sizeof(proxy);
|
||||
res = RegQueryValueExA(hkey, "ProxyServer", 0, &type, (LPBYTE)proxy, &size);
|
||||
RegCloseKey(hkey);
|
||||
if(res != ERROR_SUCCESS || type != REG_SZ)
|
||||
return;
|
||||
|
||||
proxy_port = strchr(proxy, ':');
|
||||
if (!proxy_port)
|
||||
return;
|
||||
|
||||
*proxy_port = 0;
|
||||
proxy_port_num = atoi(proxy_port + 1);
|
||||
TRACE("Setting proxy to %s, port %d\n", debugstr_a(proxy), proxy_port_num);
|
||||
|
||||
nsres = nsIPrefBranch_SetIntPref(pref, "network.proxy.type", 1);
|
||||
if(NS_FAILED(nsres))
|
||||
ERR("SetIntPref network.proxy.type failed: %08x\n", nsres);
|
||||
nsres = nsIPrefBranch_SetCharPref(pref, "network.proxy.http", proxy);
|
||||
if(NS_FAILED(nsres))
|
||||
ERR("SetCharPref network.proxy.http failed: %08x\n", nsres);
|
||||
nsres = nsIPrefBranch_SetIntPref(pref, "network.proxy.http_port", proxy_port_num);
|
||||
if(NS_FAILED(nsres))
|
||||
ERR("SetIntPref network.proxy.http_port failed: %08x\n", nsres);
|
||||
nsres = nsIPrefBranch_SetCharPref(pref, "network.proxy.ssl", proxy);
|
||||
if(NS_FAILED(nsres))
|
||||
ERR("SetCharPref network.proxy.ssl failed: %08x\n", nsres);
|
||||
nsres = nsIPrefBranch_SetIntPref(pref, "network.proxy.ssl_port", proxy_port_num);
|
||||
if(NS_FAILED(nsres))
|
||||
ERR("SetIntPref network.proxy.ssl_port failed: %08x\n", nsres);
|
||||
}
|
||||
|
||||
static void set_bool_pref(nsIPrefBranch *pref, const char *pref_name, BOOL val)
|
||||
{
|
||||
nsresult nsres;
|
||||
|
@ -347,6 +406,7 @@ static void set_profile(void)
|
|||
}
|
||||
|
||||
set_lang(pref);
|
||||
set_proxy(pref);
|
||||
set_bool_pref(pref, "security.warn_entering_secure", FALSE);
|
||||
set_bool_pref(pref, "security.warn_submit_insecure", FALSE);
|
||||
|
||||
|
@ -1073,7 +1133,7 @@ static nsresult NSAPI nsContextMenuListener_OnShowContextMenu(nsIContextMenuList
|
|||
FIXME("aContextFlags=%08x\n", aContextFlags);
|
||||
};
|
||||
|
||||
show_context_menu(This->doc, dwID, &pt, (IDispatch*)HTMLDOMNODE(get_node(This->doc, aNode)));
|
||||
show_context_menu(This->doc, dwID, &pt, (IDispatch*)HTMLDOMNODE(get_node(This->doc, aNode, TRUE)));
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -1418,7 +1478,7 @@ static nsrefcnt NSAPI nsTooltipListener_AddRef(nsITooltipListener *iface)
|
|||
static nsrefcnt NSAPI nsTooltipListener_Release(nsITooltipListener *iface)
|
||||
{
|
||||
NSContainer *This = NSTOOLTIP_THIS(iface);
|
||||
return nsIWebBrowserChrome_AddRef(NSWBCHROME(This));
|
||||
return nsIWebBrowserChrome_Release(NSWBCHROME(This));
|
||||
}
|
||||
|
||||
static nsresult NSAPI nsTooltipListener_OnShowTooltip(nsITooltipListener *iface,
|
||||
|
@ -1583,7 +1643,7 @@ NSContainer *NSContainer_Create(HTMLDocument *doc, NSContainer *parent)
|
|||
if(!load_gecko(FALSE))
|
||||
return NULL;
|
||||
|
||||
ret = heap_alloc(sizeof(NSContainer));
|
||||
ret = heap_alloc_zero(sizeof(NSContainer));
|
||||
|
||||
ret->lpWebBrowserChromeVtbl = &nsWebBrowserChromeVtbl;
|
||||
ret->lpContextMenuListenerVtbl = &nsContextMenuListenerVtbl;
|
||||
|
@ -1596,11 +1656,6 @@ NSContainer *NSContainer_Create(HTMLDocument *doc, NSContainer *parent)
|
|||
|
||||
ret->doc = doc;
|
||||
ret->ref = 1;
|
||||
ret->bscallback = NULL;
|
||||
ret->content_listener = NULL;
|
||||
ret->editor_controller = NULL;
|
||||
ret->editor = NULL;
|
||||
ret->reset_focus = NULL;
|
||||
|
||||
nsres = nsIComponentManager_CreateInstanceByContractID(pCompMgr, NS_WEBBROWSER_CONTRACTID,
|
||||
NULL, &IID_nsIWebBrowser, (void**)&ret->webbrowser);
|
||||
|
@ -1693,6 +1748,8 @@ void NSContainer_Release(NSContainer *This)
|
|||
{
|
||||
TRACE("(%p)\n", This);
|
||||
|
||||
This->doc = NULL;
|
||||
|
||||
ShowWindow(This->hwnd, SW_HIDE);
|
||||
SetParent(This->hwnd, NULL);
|
||||
|
||||
|
|
|
@ -129,6 +129,9 @@ static nsresult NSAPI handle_keypress(nsIDOMEventListener *iface,
|
|||
static nsresult NSAPI handle_load(nsIDOMEventListener *iface, nsIDOMEvent *event)
|
||||
{
|
||||
NSContainer *This = NSEVENTLIST_THIS(iface)->This;
|
||||
nsIDOMHTMLDocument *nshtmldoc;
|
||||
nsIDOMHTMLElement *nsbody = NULL;
|
||||
nsIDOMDocument *nsdoc;
|
||||
task_t *task;
|
||||
|
||||
TRACE("(%p)\n", This);
|
||||
|
@ -159,6 +162,19 @@ static nsresult NSAPI handle_load(nsIDOMEventListener *iface, nsIDOMEvent *event
|
|||
*/
|
||||
push_task(task);
|
||||
|
||||
|
||||
nsIWebNavigation_GetDocument(This->navigation, &nsdoc);
|
||||
nsIDOMDocument_QueryInterface(nsdoc, &IID_nsIDOMHTMLDocument, (void**)&nshtmldoc);
|
||||
nsIDOMDocument_Release(nsdoc);
|
||||
|
||||
nsIDOMHTMLDocument_GetBody(nshtmldoc, &nsbody);
|
||||
nsIDOMHTMLDocument_Release(nshtmldoc);
|
||||
|
||||
if(nsbody) {
|
||||
fire_event(This->doc, EVENTID_LOAD, (nsIDOMNode*)nsbody);
|
||||
nsIDOMHTMLElement_Release(nsbody);
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
@ -167,6 +183,7 @@ static nsresult NSAPI handle_node_insert(nsIDOMEventListener *iface, nsIDOMEvent
|
|||
NSContainer *This = NSEVENTLIST_THIS(iface)->This;
|
||||
nsIDOMHTMLScriptElement *script;
|
||||
nsIDOMEventTarget *target;
|
||||
nsIDOMElement *elem;
|
||||
nsresult nsres;
|
||||
|
||||
TRACE("(%p %p)\n", This, event);
|
||||
|
@ -174,16 +191,59 @@ static nsresult NSAPI handle_node_insert(nsIDOMEventListener *iface, nsIDOMEvent
|
|||
nsres = nsIDOMEvent_GetTarget(event, &target);
|
||||
if(NS_FAILED(nsres)) {
|
||||
ERR("GetTarget failed: %08x\n", nsres);
|
||||
return nsres;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsres = nsISupports_QueryInterface(target, &IID_nsIDOMHTMLScriptElement, (void**)&script);
|
||||
nsres = nsIDOMEventTarget_QueryInterface(target, &IID_nsIDOMElement, (void**)&elem);
|
||||
nsIDOMEventTarget_Release(target);
|
||||
if(NS_FAILED(nsres))
|
||||
return NS_OK;
|
||||
|
||||
nsres = nsIDOMElement_QueryInterface(elem, &IID_nsIDOMHTMLScriptElement, (void**)&script);
|
||||
if(SUCCEEDED(nsres)) {
|
||||
doc_insert_script(This->doc, script);
|
||||
nsIDOMHTMLScriptElement_Release(script);
|
||||
}
|
||||
|
||||
nsIDOMEventTarget_Release(target);
|
||||
check_event_attr(This->doc, elem);
|
||||
|
||||
nsIDOMNode_Release(elem);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
static nsresult NSAPI handle_htmlevent(nsIDOMEventListener *iface, nsIDOMEvent *event)
|
||||
{
|
||||
NSContainer *This = NSEVENTLIST_THIS(iface)->This;
|
||||
const PRUnichar *type;
|
||||
nsIDOMEventTarget *event_target;
|
||||
nsIDOMNode *nsnode;
|
||||
nsAString type_str;
|
||||
eventid_t eid;
|
||||
nsresult nsres;
|
||||
|
||||
nsAString_Init(&type_str, NULL);
|
||||
nsIDOMEvent_GetType(event, &type_str);
|
||||
nsAString_GetData(&type_str, &type);
|
||||
eid = str_to_eid(type);
|
||||
nsAString_Finish(&type_str);
|
||||
|
||||
nsres = nsIDOMEvent_GetTarget(event, &event_target);
|
||||
if(NS_FAILED(nsres) || !event_target) {
|
||||
ERR("GetEventTarget failed: %08x\n", nsres);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsres = nsIDOMEventTarget_QueryInterface(event_target, &IID_nsIDOMNode, (void**)&nsnode);
|
||||
nsIDOMEventTarget_Release(event_target);
|
||||
if(NS_FAILED(nsres)) {
|
||||
ERR("Could not get nsIDOMNode: %08x\n", nsres);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
fire_event(This->doc, eid, nsnode);
|
||||
|
||||
nsIDOMNode_Release(nsnode);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
@ -202,6 +262,7 @@ static const nsIDOMEventListenerVtbl focus_vtbl = EVENTLISTENER_VTBL(handle_
|
|||
static const nsIDOMEventListenerVtbl keypress_vtbl = EVENTLISTENER_VTBL(handle_keypress);
|
||||
static const nsIDOMEventListenerVtbl load_vtbl = EVENTLISTENER_VTBL(handle_load);
|
||||
static const nsIDOMEventListenerVtbl node_insert_vtbl = EVENTLISTENER_VTBL(handle_node_insert);
|
||||
static const nsIDOMEventListenerVtbl htmlevent_vtbl = EVENTLISTENER_VTBL(handle_htmlevent);
|
||||
|
||||
static void init_event(nsIDOMEventTarget *target, const PRUnichar *type,
|
||||
nsIDOMEventListener *listener, BOOL capture)
|
||||
|
@ -224,6 +285,29 @@ static void init_listener(nsEventListener *This, NSContainer *container,
|
|||
This->This = container;
|
||||
}
|
||||
|
||||
void add_nsevent_listener(NSContainer *container, LPCWSTR type)
|
||||
{
|
||||
nsIDOMWindow *dom_window;
|
||||
nsIDOMEventTarget *target;
|
||||
nsresult nsres;
|
||||
|
||||
nsres = nsIWebBrowser_GetContentDOMWindow(container->webbrowser, &dom_window);
|
||||
if(NS_FAILED(nsres)) {
|
||||
ERR("GetContentDOMWindow failed: %08x\n", nsres);
|
||||
return;
|
||||
}
|
||||
|
||||
nsres = nsIDOMWindow_QueryInterface(dom_window, &IID_nsIDOMEventTarget, (void**)&target);
|
||||
nsIDOMWindow_Release(dom_window);
|
||||
if(NS_FAILED(nsres)) {
|
||||
ERR("Could not get nsIDOMEventTarget interface: %08x\n", nsres);
|
||||
return;
|
||||
}
|
||||
|
||||
init_event(target, type, NSEVENTLIST(&container->htmlevent_listener), TRUE);
|
||||
nsIDOMEventTarget_Release(target);
|
||||
}
|
||||
|
||||
void init_nsevents(NSContainer *This)
|
||||
{
|
||||
nsIDOMWindow *dom_window;
|
||||
|
@ -242,6 +326,7 @@ void init_nsevents(NSContainer *This)
|
|||
init_listener(&This->keypress_listener, This, &keypress_vtbl);
|
||||
init_listener(&This->load_listener, This, &load_vtbl);
|
||||
init_listener(&This->node_insert_listener, This, &node_insert_vtbl);
|
||||
init_listener(&This->htmlevent_listener, This, &htmlevent_vtbl);
|
||||
|
||||
nsres = nsIWebBrowser_GetContentDOMWindow(This->webbrowser, &dom_window);
|
||||
if(NS_FAILED(nsres)) {
|
||||
|
|
|
@ -18,9 +18,9 @@
|
|||
|
||||
/*
|
||||
* NOTE:
|
||||
* This file is not an usual idl file. Interfaces in this file are XPCOM interfaces
|
||||
* (NOT MSCOM!), but we generate the header file with WIDL compatibile with XPCOM,
|
||||
* useable in C code.
|
||||
* This file is not a typical idl file. Interfaces in this file are XPCOM
|
||||
* interfaces (NOT MSCOM!), but we generate the header file with WIDL
|
||||
* compatible with XPCOM, usable in C code.
|
||||
*/
|
||||
|
||||
cpp_quote("#define GECKO_VERSION \"0.1.0\"")
|
||||
|
@ -1295,6 +1295,39 @@ interface nsIDOMHTMLScriptElement : nsIDOMHTMLElement
|
|||
nsresult SetType(const nsAString *aType);
|
||||
}
|
||||
|
||||
[
|
||||
object,
|
||||
uuid(a6cf90ab-15b3-11d2-932e-00805f8add32),
|
||||
local
|
||||
]
|
||||
interface nsIDOMHTMLImageElement : nsIDOMHTMLElement
|
||||
{
|
||||
nsresult GetName(nsAString *aName);
|
||||
nsresult SetName(const nsAString *aName);
|
||||
nsresult GetAlign(nsAString *aAlign);
|
||||
nsresult SetAlign(const nsAString *aAlign);
|
||||
nsresult GetAlt(nsAString *aAlt);
|
||||
nsresult SetAlt(const nsAString *aAlt);
|
||||
nsresult GetBorder(nsAString *aBorder);
|
||||
nsresult SetBorder(const nsAString *aBorder);
|
||||
nsresult GetHeight(PRInt32 *aHeight);
|
||||
nsresult SetHeight(PRInt32 aHeight);
|
||||
nsresult GetHspace(PRInt32 *aHspace);
|
||||
nsresult SetHspace(PRInt32 aHspace);
|
||||
nsresult GetIsMap(PRBool *aIsMap);
|
||||
nsresult SetIsMap(PRBool aIsMap);
|
||||
nsresult GetLongDesc(nsAString *aLongDesc);
|
||||
nsresult SetLongDesc(const nsAString *aLongDesc);
|
||||
nsresult GetSrc(nsAString *aSrc);
|
||||
nsresult SetSrc(const nsAString *aSrc);
|
||||
nsresult GetUseMap(nsAString *aUseMap);
|
||||
nsresult SetUseMap(const nsAString *aUseMap);
|
||||
nsresult GetVspace(PRInt32 *aVspace);
|
||||
nsresult SetVspace(PRInt32 aVspace);
|
||||
nsresult GetWidth(PRInt32 *aWidth);
|
||||
nsresult SetWidth(PRInt32 aWidth);
|
||||
}
|
||||
|
||||
[
|
||||
object,
|
||||
uuid(94928ab3-8b63-11d3-989d-001083010e9b),
|
||||
|
|
|
@ -2040,7 +2040,6 @@ static nsresult NSAPI nsIOService_NewURI(nsIIOService *iface, const nsACString *
|
|||
const char *aOriginCharset, nsIURI *aBaseURI, nsIURI **_retval)
|
||||
{
|
||||
const char *spec = NULL;
|
||||
nsACString spec_str;
|
||||
NSContainer *nscontainer = NULL;
|
||||
nsIURI *uri = NULL;
|
||||
LPCWSTR base_wine_url = NULL;
|
||||
|
@ -2078,9 +2077,7 @@ static nsresult NSAPI nsIOService_NewURI(nsIIOService *iface, const nsACString *
|
|||
nsACString_Finish(&base_uri_str);
|
||||
}
|
||||
|
||||
nsACString_Init(&spec_str, spec);
|
||||
nsres = nsIIOService_NewURI(nsio, &spec_str, aOriginCharset, aBaseURI, &uri);
|
||||
nsACString_Finish(&spec_str);
|
||||
nsres = nsIIOService_NewURI(nsio, aSpec, aOriginCharset, aBaseURI, &uri);
|
||||
if(NS_FAILED(nsres))
|
||||
TRACE("NewURI failed: %08x\n", nsres);
|
||||
|
||||
|
|
|
@ -61,6 +61,32 @@ static ULONG WINAPI OleObject_Release(IOleObject *iface)
|
|||
return IHTMLDocument2_Release(HTMLDOC(This));
|
||||
}
|
||||
|
||||
static void update_hostinfo(HTMLDocument *This, DOCHOSTUIINFO *hostinfo)
|
||||
{
|
||||
nsIScrollable *scrollable;
|
||||
nsresult nsres;
|
||||
|
||||
if(!This->nscontainer)
|
||||
return;
|
||||
|
||||
nsres = nsIWebBrowser_QueryInterface(This->nscontainer->webbrowser, &IID_nsIScrollable, (void**)&scrollable);
|
||||
if(NS_SUCCEEDED(nsres)) {
|
||||
nsres = nsIScrollable_SetDefaultScrollbarPreferences(scrollable, ScrollOrientation_Y,
|
||||
(hostinfo->dwFlags & DOCHOSTUIFLAG_SCROLL_NO) ? Scrollbar_Never : Scrollbar_Always);
|
||||
if(NS_FAILED(nsres))
|
||||
ERR("Could not set default Y scrollbar prefs: %08x\n", nsres);
|
||||
|
||||
nsres = nsIScrollable_SetDefaultScrollbarPreferences(scrollable, ScrollOrientation_X,
|
||||
hostinfo->dwFlags & DOCHOSTUIFLAG_SCROLL_NO ? Scrollbar_Never : Scrollbar_Auto);
|
||||
if(NS_FAILED(nsres))
|
||||
ERR("Could not set default X scrollbar prefs: %08x\n", nsres);
|
||||
|
||||
nsIScrollable_Release(scrollable);
|
||||
}else {
|
||||
ERR("Could not get nsIScrollable: %08x\n", nsres);
|
||||
}
|
||||
}
|
||||
|
||||
static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, IOleClientSite *pClientSite)
|
||||
{
|
||||
HTMLDocument *This = OLEOBJ_THIS(iface);
|
||||
|
@ -103,6 +129,7 @@ static HRESULT WINAPI OleObject_SetClientSite(IOleObject *iface, IOleClientSite
|
|||
TRACE("hostinfo = {%u %08x %08x %s %s}\n",
|
||||
hostinfo.cbSize, hostinfo.dwFlags, hostinfo.dwDoubleClick,
|
||||
debugstr_w(hostinfo.pchHostCss), debugstr_w(hostinfo.pchHostNS));
|
||||
update_hostinfo(This, &hostinfo);
|
||||
This->hostinfo = hostinfo;
|
||||
}
|
||||
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
|
||||
|
||||
typedef struct {
|
||||
DispatchEx dispex;
|
||||
const IOmNavigatorVtbl *lpIOmNavigatorVtbl;
|
||||
|
||||
LONG ref;
|
||||
|
@ -50,12 +51,11 @@ static HRESULT WINAPI OmNavigator_QueryInterface(IOmNavigator *iface, REFIID rii
|
|||
if(IsEqualGUID(&IID_IUnknown, riid)) {
|
||||
TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
|
||||
*ppv = OMNAVIGATOR(This);
|
||||
}else if(IsEqualGUID(&IID_IDispatch, riid)) {
|
||||
TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
|
||||
*ppv = OMNAVIGATOR(This);
|
||||
}else if(IsEqualGUID(&IID_IOmNavigator, riid)) {
|
||||
TRACE("(%p)->(IID_IOmNavigator %p)\n", This, ppv);
|
||||
*ppv = OMNAVIGATOR(This);
|
||||
}else if(dispex_query_interface(&This->dispex, riid, ppv)) {
|
||||
return *ppv ? S_OK : E_NOINTERFACE;
|
||||
}
|
||||
|
||||
if(*ppv) {
|
||||
|
@ -101,8 +101,8 @@ static HRESULT WINAPI OmNavigator_GetTypeInfo(IOmNavigator *iface, UINT iTInfo,
|
|||
LCID lcid, ITypeInfo **ppTInfo)
|
||||
{
|
||||
OmNavigator *This = OMNAVIGATOR_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 OmNavigator_GetIDsOfNames(IOmNavigator *iface, REFIID riid,
|
||||
|
@ -110,9 +110,8 @@ static HRESULT WINAPI OmNavigator_GetIDsOfNames(IOmNavigator *iface, REFIID riid
|
|||
LCID lcid, DISPID *rgDispId)
|
||||
{
|
||||
OmNavigator *This = OMNAVIGATOR_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 OmNavigator_Invoke(IOmNavigator *iface, DISPID dispIdMember,
|
||||
|
@ -120,9 +119,9 @@ static HRESULT WINAPI OmNavigator_Invoke(IOmNavigator *iface, DISPID dispIdMembe
|
|||
VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
|
||||
{
|
||||
OmNavigator *This = OMNAVIGATOR_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 OmNavigator_get_appCodeName(IOmNavigator *iface, BSTR *p)
|
||||
|
@ -297,13 +296,26 @@ static const IOmNavigatorVtbl OmNavigatorVtbl = {
|
|||
OmNavigator_get_userProfile
|
||||
};
|
||||
|
||||
static const tid_t OmNavigator_iface_tids[] = {
|
||||
IOmNavigator_tid,
|
||||
0
|
||||
};
|
||||
static dispex_static_data_t OmNavigator_dispex = {
|
||||
NULL,
|
||||
IOmNavigator_tid,
|
||||
NULL,
|
||||
OmNavigator_iface_tids
|
||||
};
|
||||
|
||||
IOmNavigator *OmNavigator_Create(void)
|
||||
{
|
||||
OmNavigator *ret;
|
||||
|
||||
ret = heap_alloc(sizeof(*ret));
|
||||
ret = heap_alloc_zero(sizeof(*ret));
|
||||
ret->lpIOmNavigatorVtbl = &OmNavigatorVtbl;
|
||||
ret->ref = 1;
|
||||
|
||||
init_dispex(&ret->dispex, (IUnknown*)OMNAVIGATOR(ret), &OmNavigator_dispex);
|
||||
|
||||
return OMNAVIGATOR(ret);
|
||||
}
|
||||
|
|
|
@ -483,6 +483,9 @@ static HRESULT WINAPI AboutProtocolInfo_QueryInfo(IInternetProtocolInfo *iface,
|
|||
case QUERY_IS_SAFE:
|
||||
FIXME("Unsupported option QUERY_IS_SAFE\n");
|
||||
return E_NOTIMPL;
|
||||
case QUERY_USES_HISTORYFOLDER:
|
||||
FIXME("Unsupported option QUERY_USES_HISTORYFOLDER\n");
|
||||
return E_FAIL;
|
||||
default:
|
||||
return E_FAIL;
|
||||
}
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
#include "wine/wine_common_ver.rc"
|
||||
|
||||
#include "Bg.rc"
|
||||
#include "Da.rc"
|
||||
#include "De.rc"
|
||||
#include "En.rc"
|
||||
#include "Es.rc"
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
#include "winuser.h"
|
||||
#include "ole2.h"
|
||||
#include "activscp.h"
|
||||
#include "activdbg.h"
|
||||
#include "objsafe.h"
|
||||
|
||||
#include "wine/debug.h"
|
||||
|
@ -36,6 +37,7 @@
|
|||
WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
|
||||
|
||||
static const WCHAR windowW[] = {'w','i','n','d','o','w',0};
|
||||
static const WCHAR emptyW[] = {0};
|
||||
|
||||
static const CLSID CLSID_JScript =
|
||||
{0xf414c260,0x6ac0,0x11cf,{0xb6,0xd1,0x00,0xaa,0x00,0xbb,0xbb,0x58}};
|
||||
|
@ -44,11 +46,13 @@ typedef struct {
|
|||
const IActiveScriptSiteVtbl *lpIActiveScriptSiteVtbl;
|
||||
const IActiveScriptSiteInterruptPollVtbl *lpIActiveScriptSiteInterruptPollVtbl;
|
||||
const IActiveScriptSiteWindowVtbl *lpIActiveScriptSiteWindowVtbl;
|
||||
const IActiveScriptSiteDebug32Vtbl *lpIActiveScriptSiteDebug32Vtbl;
|
||||
|
||||
LONG ref;
|
||||
|
||||
IActiveScript *script;
|
||||
IActiveScriptParse *parse;
|
||||
IActiveScriptParseProcedure *parse_proc;
|
||||
|
||||
SCRIPTSTATE script_state;
|
||||
|
||||
|
@ -61,6 +65,7 @@ typedef struct {
|
|||
#define ACTSCPSITE(x) ((IActiveScriptSite*) &(x)->lpIActiveScriptSiteVtbl)
|
||||
#define ACTSCPPOLL(x) ((IActiveScriptSiteInterruptPoll*) &(x)->lpIActiveScriptSiteInterruptPollVtbl)
|
||||
#define ACTSCPWIN(x) ((IActiveScriptSiteWindow*) &(x)->lpIActiveScriptSiteWindowVtbl)
|
||||
#define ACTSCPDBG32(x) ((IActiveScriptSiteDebug32*) &(x)->lpIActiveScriptSiteDebug32Vtbl)
|
||||
|
||||
static BOOL init_script_engine(ScriptHost *script_host)
|
||||
{
|
||||
|
@ -144,7 +149,12 @@ static BOOL init_script_engine(ScriptHost *script_host)
|
|||
if(FAILED(hres))
|
||||
WARN("AddNamedItem failed: %08x\n", hres);
|
||||
|
||||
/* FIXME: QI for IActiveScriptParseProcedure2 and IActiveScriptParseProcedure */
|
||||
hres = IActiveScript_QueryInterface(script_host->script, &IID_IActiveScriptParseProcedure2,
|
||||
(void**)&script_host->parse_proc);
|
||||
if(FAILED(hres)) {
|
||||
/* FIXME: QI for IActiveScriptParseProcedure */
|
||||
WARN("Could not get IActiveScriptParseProcedure iface: %08x\n", hres);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -164,6 +174,11 @@ static void release_script_engine(ScriptHost *This)
|
|||
IActiveScript_Close(This->script);
|
||||
|
||||
default:
|
||||
if(This->parse_proc) {
|
||||
IActiveScriptParseProcedure_Release(This->parse_proc);
|
||||
This->parse_proc = NULL;
|
||||
}
|
||||
|
||||
if(This->parse) {
|
||||
IActiveScriptParse_Release(This->parse);
|
||||
This->parse = NULL;
|
||||
|
@ -205,6 +220,9 @@ static HRESULT WINAPI ActiveScriptSite_QueryInterface(IActiveScriptSite *iface,
|
|||
}else if(IsEqualGUID(&IID_IActiveScriptSiteWindow, riid)) {
|
||||
TRACE("(%p)->(IID_IActiveScriptSiteWindow %p)\n", This, ppv);
|
||||
*ppv = ACTSCPWIN(This);
|
||||
}else if(IsEqualGUID(&IID_IActiveScriptSiteDebug32, riid)) {
|
||||
TRACE("(%p)->(IID_IActiveScriptSiteDebug32 %p)\n", This, ppv);
|
||||
*ppv = ACTSCPDBG32(This);
|
||||
}else {
|
||||
FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
|
||||
return E_NOINTERFACE;
|
||||
|
@ -368,8 +386,10 @@ static ULONG WINAPI ActiveScriptSiteInterruptPoll_Release(IActiveScriptSiteInter
|
|||
static HRESULT WINAPI ActiveScriptSiteInterruptPoll_QueryContinue(IActiveScriptSiteInterruptPoll *iface)
|
||||
{
|
||||
ScriptHost *This = ACTSCPPOLL_THIS(iface);
|
||||
FIXME("(%p)\n", This);
|
||||
return E_NOTIMPL;
|
||||
|
||||
TRACE("(%p)\n", This);
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
#undef ACTSCPPOLL_THIS
|
||||
|
@ -426,7 +446,71 @@ static const IActiveScriptSiteWindowVtbl ActiveScriptSiteWindowVtbl = {
|
|||
ActiveScriptSiteWindow_EnableModeless
|
||||
};
|
||||
|
||||
static ScriptHost *create_script_host(HTMLDocument *doc, GUID *guid)
|
||||
#define ACTSCPDBG32_THIS(iface) DEFINE_THIS(ScriptHost, IActiveScriptSiteDebug32, iface)
|
||||
|
||||
static HRESULT WINAPI ActiveScriptSiteDebug32_QueryInterface(IActiveScriptSiteDebug32 *iface,
|
||||
REFIID riid, void **ppv)
|
||||
{
|
||||
ScriptHost *This = ACTSCPDBG32_THIS(iface);
|
||||
return IActiveScriptSite_QueryInterface(ACTSCPSITE(This), riid, ppv);
|
||||
}
|
||||
|
||||
static ULONG WINAPI ActiveScriptSiteDebug32_AddRef(IActiveScriptSiteDebug32 *iface)
|
||||
{
|
||||
ScriptHost *This = ACTSCPDBG32_THIS(iface);
|
||||
return IActiveScriptSite_AddRef(ACTSCPSITE(This));
|
||||
}
|
||||
|
||||
static ULONG WINAPI ActiveScriptSiteDebug32_Release(IActiveScriptSiteDebug32 *iface)
|
||||
{
|
||||
ScriptHost *This = ACTSCPDBG32_THIS(iface);
|
||||
return IActiveScriptSite_Release(ACTSCPSITE(This));
|
||||
}
|
||||
|
||||
static HRESULT WINAPI ActiveScriptSiteDebug32_GetDocumentContextFromPosition(IActiveScriptSiteDebug32 *iface,
|
||||
DWORD dwSourceContext, ULONG uCharacterOffset, ULONG uNumChars, IDebugDocumentContext **ppsc)
|
||||
{
|
||||
ScriptHost *This = ACTSCPDBG32_THIS(iface);
|
||||
FIXME("(%p)->(%x %u %u %p)\n", This, dwSourceContext, uCharacterOffset, uNumChars, ppsc);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI ActiveScriptSiteDebug32_GetApplication(IActiveScriptSiteDebug32 *iface, IDebugApplication32 **ppda)
|
||||
{
|
||||
ScriptHost *This = ACTSCPDBG32_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, ppda);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI ActiveScriptSiteDebug32_GetRootApplicationNode(IActiveScriptSiteDebug32 *iface,
|
||||
IDebugApplicationNode **ppdanRoot)
|
||||
{
|
||||
ScriptHost *This = ACTSCPDBG32_THIS(iface);
|
||||
FIXME("(%p)->(%p)\n", This, ppdanRoot);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI ActiveScriptSiteDebug32_OnScriptErrorDebug(IActiveScriptSiteDebug32 *iface,
|
||||
IActiveScriptErrorDebug *pErrorDebug, BOOL *pfEnterDebugger, BOOL *pfCallOnScriptErrorWhenContinuing)
|
||||
{
|
||||
ScriptHost *This = ACTSCPDBG32_THIS(iface);
|
||||
FIXME("(%p)->(%p %p %p)\n", This, pErrorDebug, pfEnterDebugger, pfCallOnScriptErrorWhenContinuing);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
#undef ACTSCPDBG32_THIS
|
||||
|
||||
static const IActiveScriptSiteDebug32Vtbl ActiveScriptSiteDebug32Vtbl = {
|
||||
ActiveScriptSiteDebug32_QueryInterface,
|
||||
ActiveScriptSiteDebug32_AddRef,
|
||||
ActiveScriptSiteDebug32_Release,
|
||||
ActiveScriptSiteDebug32_GetDocumentContextFromPosition,
|
||||
ActiveScriptSiteDebug32_GetApplication,
|
||||
ActiveScriptSiteDebug32_GetRootApplicationNode,
|
||||
ActiveScriptSiteDebug32_OnScriptErrorDebug
|
||||
};
|
||||
|
||||
static ScriptHost *create_script_host(HTMLDocument *doc, const GUID *guid)
|
||||
{
|
||||
ScriptHost *ret;
|
||||
HRESULT hres;
|
||||
|
@ -435,6 +519,7 @@ static ScriptHost *create_script_host(HTMLDocument *doc, GUID *guid)
|
|||
ret->lpIActiveScriptSiteVtbl = &ActiveScriptSiteVtbl;
|
||||
ret->lpIActiveScriptSiteInterruptPollVtbl = &ActiveScriptSiteInterruptPollVtbl;
|
||||
ret->lpIActiveScriptSiteWindowVtbl = &ActiveScriptSiteWindowVtbl;
|
||||
ret->lpIActiveScriptSiteDebug32Vtbl = &ActiveScriptSiteDebug32Vtbl;
|
||||
ret->ref = 1;
|
||||
ret->doc = doc;
|
||||
ret->script_state = SCRIPTSTATE_UNINITIALIZED;
|
||||
|
@ -477,6 +562,7 @@ static void parse_extern_script(ScriptHost *script_host, LPCWSTR src)
|
|||
IMoniker *mon;
|
||||
char *buf;
|
||||
WCHAR *text;
|
||||
DWORD len, size=0;
|
||||
HRESULT hres;
|
||||
|
||||
static const WCHAR wine_schemaW[] = {'w','i','n','e',':'};
|
||||
|
@ -488,13 +574,16 @@ static void parse_extern_script(ScriptHost *script_host, LPCWSTR src)
|
|||
if(FAILED(hres))
|
||||
return;
|
||||
|
||||
hres = bind_mon_to_buffer(script_host->doc, mon, (void**)&buf);
|
||||
hres = bind_mon_to_buffer(script_host->doc, mon, (void**)&buf, &size);
|
||||
IMoniker_Release(mon);
|
||||
if(FAILED(hres))
|
||||
return;
|
||||
|
||||
text = heap_strdupAtoW(buf);
|
||||
len = MultiByteToWideChar(CP_ACP, 0, buf, size, NULL, 0);
|
||||
text = heap_alloc((len+1)*sizeof(WCHAR));
|
||||
MultiByteToWideChar(CP_ACP, 0, buf, size, text, len);
|
||||
heap_free(buf);
|
||||
text[len] = 0;
|
||||
|
||||
parse_text(script_host, text);
|
||||
|
||||
|
@ -619,34 +708,34 @@ static BOOL get_script_guid(nsIDOMHTMLScriptElement *nsscript, GUID *guid)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static ScriptHost *get_script_host(HTMLDocument *doc, nsIDOMHTMLScriptElement *nsscript)
|
||||
static ScriptHost *get_script_host(HTMLDocument *doc, const GUID *guid)
|
||||
{
|
||||
ScriptHost *iter;
|
||||
GUID guid;
|
||||
|
||||
if(!get_script_guid(nsscript, &guid)) {
|
||||
WARN("Could not find script GUID\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if(IsEqualGUID(&CLSID_JScript, &guid)) {
|
||||
if(IsEqualGUID(&CLSID_JScript, guid)) {
|
||||
FIXME("Ignoring JScript\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
LIST_FOR_EACH_ENTRY(iter, &doc->script_hosts, ScriptHost, entry) {
|
||||
if(IsEqualGUID(&guid, &iter->guid))
|
||||
if(IsEqualGUID(guid, &iter->guid))
|
||||
return iter;
|
||||
}
|
||||
|
||||
return create_script_host(doc, &guid);
|
||||
return create_script_host(doc, guid);
|
||||
}
|
||||
|
||||
void doc_insert_script(HTMLDocument *doc, nsIDOMHTMLScriptElement *nsscript)
|
||||
{
|
||||
ScriptHost *script_host;
|
||||
GUID guid;
|
||||
|
||||
script_host = get_script_host(doc, nsscript);
|
||||
if(!get_script_guid(nsscript, &guid)) {
|
||||
WARN("Could not find script GUID\n");
|
||||
return;
|
||||
}
|
||||
|
||||
script_host = get_script_host(doc, &guid);
|
||||
if(!script_host)
|
||||
return;
|
||||
|
||||
|
@ -654,6 +743,55 @@ void doc_insert_script(HTMLDocument *doc, nsIDOMHTMLScriptElement *nsscript)
|
|||
parse_script_elem(script_host, nsscript);
|
||||
}
|
||||
|
||||
IDispatch *script_parse_event(HTMLDocument *doc, LPCWSTR text)
|
||||
{
|
||||
ScriptHost *script_host;
|
||||
GUID guid = CLSID_JScript;
|
||||
const WCHAR *ptr;
|
||||
IDispatch *disp;
|
||||
HRESULT hres;
|
||||
|
||||
static const WCHAR delimiterW[] = {'\"',0};
|
||||
|
||||
for(ptr = text; isalnumW(*ptr); ptr++);
|
||||
if(*ptr == ':') {
|
||||
LPWSTR language;
|
||||
BOOL b;
|
||||
|
||||
language = heap_alloc((ptr-text+1)*sizeof(WCHAR));
|
||||
memcpy(language, text, (ptr-text)*sizeof(WCHAR));
|
||||
language[ptr-text] = 0;
|
||||
|
||||
b = get_guid_from_language(language, &guid);
|
||||
|
||||
heap_free(language);
|
||||
|
||||
if(!b) {
|
||||
WARN("Could not find language\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ptr++;
|
||||
}else {
|
||||
ptr = text;
|
||||
}
|
||||
|
||||
script_host = get_script_host(doc, &guid);
|
||||
if(!script_host || !script_host->parse_proc)
|
||||
return NULL;
|
||||
|
||||
hres = IActiveScriptParseProcedure_ParseProcedureText(script_host->parse_proc, ptr, NULL, emptyW,
|
||||
NULL, NULL, delimiterW, 0 /* FIXME */, 0,
|
||||
SCRIPTPROC_HOSTMANAGESSOURCE|SCRIPTPROC_IMPLICIT_THIS|SCRIPTPROC_IMPLICIT_PARENTS, &disp);
|
||||
if(FAILED(hres)) {
|
||||
WARN("ParseProcedureText failed: %08x\n", hres);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
TRACE("ret %p\n", disp);
|
||||
return disp;
|
||||
}
|
||||
|
||||
void release_script_hosts(HTMLDocument *doc)
|
||||
{
|
||||
ScriptHost *iter;
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#include "winuser.h"
|
||||
#include "ole2.h"
|
||||
#include "mshtmcid.h"
|
||||
#include "shlguid.h"
|
||||
|
||||
#include "wine/debug.h"
|
||||
|
||||
|
@ -36,6 +37,17 @@
|
|||
WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
|
||||
|
||||
#define WM_PROCESSTASK 0x8008
|
||||
#define TIMER_ID 0x3000
|
||||
|
||||
typedef struct {
|
||||
HTMLDocument *doc;
|
||||
DWORD id;
|
||||
DWORD time;
|
||||
DWORD interval;
|
||||
IDispatch *disp;
|
||||
|
||||
struct list entry;
|
||||
} task_timer_t;
|
||||
|
||||
void push_task(task_t *task)
|
||||
{
|
||||
|
@ -66,11 +78,33 @@ static task_t *pop_task(void)
|
|||
return task;
|
||||
}
|
||||
|
||||
static void release_task_timer(HWND thread_hwnd, task_timer_t *timer)
|
||||
{
|
||||
list_remove(&timer->entry);
|
||||
|
||||
IDispatch_Release(timer->disp);
|
||||
|
||||
heap_free(timer);
|
||||
}
|
||||
|
||||
void remove_doc_tasks(const HTMLDocument *doc)
|
||||
{
|
||||
thread_data_t *thread_data = get_thread_data(FALSE);
|
||||
struct list *liter, *ltmp;
|
||||
task_timer_t *timer;
|
||||
task_t *iter, *tmp;
|
||||
|
||||
LIST_FOR_EACH_SAFE(liter, ltmp, &thread_data->timer_list) {
|
||||
timer = LIST_ENTRY(liter, task_timer_t, entry);
|
||||
if(timer->doc == doc)
|
||||
release_task_timer(thread_data->thread_hwnd, timer);
|
||||
}
|
||||
|
||||
if(!list_empty(&thread_data->timer_list)) {
|
||||
timer = LIST_ENTRY(list_head(&thread_data->timer_list), task_timer_t, entry);
|
||||
SetTimer(thread_data->thread_hwnd, TIMER_ID, timer->time - GetTickCount(), NULL);
|
||||
}
|
||||
|
||||
if(!thread_data)
|
||||
return;
|
||||
|
||||
|
@ -90,6 +124,70 @@ void remove_doc_tasks(const HTMLDocument *doc)
|
|||
}
|
||||
}
|
||||
|
||||
static BOOL queue_timer(thread_data_t *thread_data, task_timer_t *timer)
|
||||
{
|
||||
task_timer_t *iter;
|
||||
|
||||
if(list_empty(&thread_data->timer_list)
|
||||
|| LIST_ENTRY(list_head(&thread_data->timer_list), task_timer_t, entry)->time > timer->time) {
|
||||
|
||||
list_add_head(&thread_data->timer_list, &timer->entry);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
LIST_FOR_EACH_ENTRY(iter, &thread_data->timer_list, task_timer_t, entry) {
|
||||
if(iter->time > timer->time) {
|
||||
list_add_tail(&iter->entry, &timer->entry);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
list_add_tail(&thread_data->timer_list, &timer->entry);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
DWORD set_task_timer(HTMLDocument *doc, DWORD msec, BOOL interval, IDispatch *disp)
|
||||
{
|
||||
thread_data_t *thread_data = get_thread_data(TRUE);
|
||||
task_timer_t *timer;
|
||||
DWORD tc = GetTickCount();
|
||||
|
||||
static DWORD id_cnt = 0x20000000;
|
||||
|
||||
timer = heap_alloc(sizeof(task_timer_t));
|
||||
timer->id = id_cnt++;
|
||||
timer->doc = doc;
|
||||
timer->time = tc + msec;
|
||||
timer->interval = interval ? msec : 0;
|
||||
|
||||
IDispatch_AddRef(disp);
|
||||
timer->disp = disp;
|
||||
|
||||
if(queue_timer(thread_data, timer))
|
||||
SetTimer(thread_data->thread_hwnd, TIMER_ID, msec, NULL);
|
||||
|
||||
return timer->id;
|
||||
}
|
||||
|
||||
HRESULT clear_task_timer(HTMLDocument *doc, BOOL interval, DWORD id)
|
||||
{
|
||||
thread_data_t *thread_data = get_thread_data(FALSE);
|
||||
task_timer_t *iter;
|
||||
|
||||
if(!thread_data)
|
||||
return S_OK;
|
||||
|
||||
LIST_FOR_EACH_ENTRY(iter, &thread_data->timer_list, task_timer_t, entry) {
|
||||
if(iter->id == id && iter->doc == doc && (iter->interval == 0) == !interval) {
|
||||
release_task_timer(thread_data->thread_hwnd, iter);
|
||||
return S_OK;
|
||||
}
|
||||
}
|
||||
|
||||
WARN("timet not found\n");
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static void set_downloading(HTMLDocument *doc)
|
||||
{
|
||||
IOleCommandTarget *olecmd;
|
||||
|
@ -126,6 +224,27 @@ static void set_downloading(HTMLDocument *doc)
|
|||
}
|
||||
}
|
||||
|
||||
/* Calls undocumented 69 cmd of CGID_Explorer */
|
||||
static void call_explorer_69(HTMLDocument *doc)
|
||||
{
|
||||
IOleCommandTarget *olecmd;
|
||||
VARIANT var;
|
||||
HRESULT hres;
|
||||
|
||||
if(!doc->client)
|
||||
return;
|
||||
|
||||
hres = IOleClientSite_QueryInterface(doc->client, &IID_IOleCommandTarget, (void**)&olecmd);
|
||||
if(FAILED(hres))
|
||||
return;
|
||||
|
||||
VariantInit(&var);
|
||||
hres = IOleCommandTarget_Exec(olecmd, &CGID_Explorer, 69, 0, NULL, &var);
|
||||
IOleCommandTarget_Release(olecmd);
|
||||
if(SUCCEEDED(hres) && V_VT(&var) != VT_NULL)
|
||||
FIXME("handle result\n");
|
||||
}
|
||||
|
||||
static void set_parsecomplete(HTMLDocument *doc)
|
||||
{
|
||||
IOleCommandTarget *olecmd = NULL;
|
||||
|
@ -135,7 +254,9 @@ static void set_parsecomplete(HTMLDocument *doc)
|
|||
if(doc->usermode == EDITMODE)
|
||||
init_editor(doc);
|
||||
|
||||
call_explorer_69(doc);
|
||||
call_property_onchanged(&doc->cp_propnotif, 1005);
|
||||
call_explorer_69(doc);
|
||||
|
||||
doc->readystate = READYSTATE_INTERACTIVE;
|
||||
call_property_onchanged(&doc->cp_propnotif, DISPID_READYSTATE);
|
||||
|
@ -156,6 +277,7 @@ static void set_parsecomplete(HTMLDocument *doc)
|
|||
IOleCommandTarget_Exec(olecmd, NULL, OLECMDID_SETDOWNLOADSTATE, OLECMDEXECOPT_DONTPROMPTUSER,
|
||||
&state, NULL);
|
||||
|
||||
IOleCommandTarget_Exec(olecmd, &CGID_ShellDocView, 103, 0, NULL, NULL);
|
||||
IOleCommandTarget_Exec(olecmd, &CGID_MSHTML, IDM_PARSECOMPLETE, 0, NULL, NULL);
|
||||
IOleCommandTarget_Exec(olecmd, NULL, OLECMDID_HTTPEQUIV_DONE, 0, NULL, NULL);
|
||||
|
||||
|
@ -238,6 +360,40 @@ static void process_task(task_t *task)
|
|||
}
|
||||
}
|
||||
|
||||
static LRESULT process_timer(void)
|
||||
{
|
||||
thread_data_t *thread_data = get_thread_data(TRUE);
|
||||
DWORD tc;
|
||||
task_timer_t *timer;
|
||||
|
||||
TRACE("\n");
|
||||
|
||||
while(!list_empty(&thread_data->timer_list)) {
|
||||
timer = LIST_ENTRY(list_head(&thread_data->timer_list), task_timer_t, entry);
|
||||
|
||||
tc = GetTickCount();
|
||||
if(timer->time > tc) {
|
||||
SetTimer(thread_data->thread_hwnd, TIMER_ID, timer->time-tc, NULL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
list_remove(&timer->entry);
|
||||
list_init(&timer->entry);
|
||||
|
||||
call_disp_func(timer->doc, timer->disp);
|
||||
|
||||
if(timer->interval) {
|
||||
timer->time += timer->interval;
|
||||
queue_timer(thread_data, timer);
|
||||
}else {
|
||||
release_task_timer(thread_data->thread_hwnd, timer);
|
||||
}
|
||||
}
|
||||
|
||||
KillTimer(thread_data->thread_hwnd, TIMER_ID);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static LRESULT WINAPI hidden_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch(msg) {
|
||||
|
@ -252,6 +408,8 @@ static LRESULT WINAPI hidden_proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPa
|
|||
}
|
||||
|
||||
return 0;
|
||||
case WM_TIMER:
|
||||
return process_timer();
|
||||
}
|
||||
|
||||
if(msg > WM_USER)
|
||||
|
@ -307,6 +465,7 @@ thread_data_t *get_thread_data(BOOL create)
|
|||
if(!thread_data && create) {
|
||||
thread_data = heap_alloc_zero(sizeof(thread_data_t));
|
||||
TlsSetValue(mshtml_tls, thread_data);
|
||||
list_init(&thread_data->timer_list);
|
||||
}
|
||||
|
||||
return thread_data;
|
||||
|
|
|
@ -202,11 +202,6 @@ static void wstrbuf_append_len(wstrbuf_t *buf, LPCWSTR str, int len)
|
|||
buf->buf[buf->len] = 0;
|
||||
}
|
||||
|
||||
static inline void wstrbuf_append(wstrbuf_t *buf, LPCWSTR str)
|
||||
{
|
||||
wstrbuf_append_len(buf, str, strlenW(str));
|
||||
}
|
||||
|
||||
static void wstrbuf_append_nodetxt(wstrbuf_t *buf, LPCWSTR str, int len)
|
||||
{
|
||||
const WCHAR *s = str;
|
||||
|
@ -616,6 +611,7 @@ static WCHAR next_char(const dompos_t *pos, dompos_t *new_pos)
|
|||
case TEXT_NODE:
|
||||
tmp_pos.node = iter;
|
||||
tmp_pos.type = TEXT_NODE;
|
||||
tmp_pos.off = 0;
|
||||
dompos_addref(&tmp_pos);
|
||||
|
||||
p = tmp_pos.p;
|
||||
|
@ -731,6 +727,7 @@ static WCHAR prev_char(HTMLTxtRange *This, const dompos_t *pos, dompos_t *new_po
|
|||
|
||||
tmp_pos.node = iter;
|
||||
tmp_pos.type = TEXT_NODE;
|
||||
tmp_pos.off = 0;
|
||||
dompos_addref(&tmp_pos);
|
||||
|
||||
p = tmp_pos.p + strlenW(tmp_pos.p)-1;
|
||||
|
@ -1183,7 +1180,7 @@ static HRESULT WINAPI HTMLTxtRange_parentElement(IHTMLTxtRange *iface, IHTMLElem
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
node = get_node(This->doc, nsnode);
|
||||
node = get_node(This->doc, nsnode, TRUE);
|
||||
nsIDOMNode_Release(nsnode);
|
||||
|
||||
return IHTMLDOMNode_QueryInterface(HTMLDOMNODE(node), &IID_IHTMLElement, (void**)parent);
|
||||
|
|
29
reactos/include/psdk/activaut.idl
Normal file
29
reactos/include/psdk/activaut.idl
Normal file
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
* Copyright 2008 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
|
||||
*/
|
||||
|
||||
#ifndef DO_NO_IMPORTS
|
||||
import "ocidl.idl";
|
||||
import "oleidl.idl";
|
||||
import "oaidl.idl";
|
||||
#endif
|
||||
|
||||
cpp_quote("#ifndef _NO_AUTHOR_GUIDS")
|
||||
|
||||
cpp_quote("DEFINE_GUID(CATID_ActiveScriptAuthor, 0xaee2a92,0xbcbb,0x11d0,0x8c,0x72,0x0,0xc0,0x4f,0xc2,0xb0,0x85);")
|
||||
|
||||
cpp_quote("#endif")
|
383
reactos/include/psdk/activdbg.idl
Normal file
383
reactos/include/psdk/activdbg.idl
Normal file
|
@ -0,0 +1,383 @@
|
|||
/*
|
||||
* Copyright 2008 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
|
||||
*/
|
||||
|
||||
import "ocidl.idl";
|
||||
import "activscp.idl";
|
||||
/* import "dbgprop.idl"; */
|
||||
|
||||
interface IDebugDocumentContext;
|
||||
interface IRemoteDebugApplication;
|
||||
|
||||
/* FIXME: */
|
||||
interface IEnumDebugStackFrames;
|
||||
interface IDebugStackFrame;
|
||||
interface IApplicationDebugger;
|
||||
interface IEnumRemoteDebugApplicationThreads;
|
||||
interface IDebugApplicationNode;
|
||||
interface IEnumDebugExpressionContexts;
|
||||
interface IDebugApplicationThread;
|
||||
interface IDebugSyncOperation;
|
||||
interface IDebugAsyncOperation;
|
||||
interface IDebugStackFrameSniffer;
|
||||
interface IDebugThreadCall32;
|
||||
interface IActiveScriptErrorDebug;
|
||||
interface IProvideExpressionContexts;
|
||||
|
||||
typedef enum tagBREAKPOINT_STATE {
|
||||
BREAKPOINT_DELETED,
|
||||
BREAKPOINT_DISABLED,
|
||||
BREAKPOINT_ENABLED
|
||||
} BREAKPOINT_STATE;
|
||||
|
||||
typedef DWORD APPBREAKFLAGS;
|
||||
|
||||
typedef enum tagBREAKREASON {
|
||||
BREAKREASON_STEP,
|
||||
BREAKREASON_BREAKPOINT,
|
||||
BREAKREASON_DEBUGGER_BLOCK,
|
||||
BREAKREASON_HOST_INITIATED,
|
||||
BREAKREASON_LANGUAGE_INITIATED,
|
||||
BREAKREASON_DEBUGGER_HALT,
|
||||
BREAKREASON_ERROR,
|
||||
BREAKREASON_JIT
|
||||
} BREAKREASON;
|
||||
|
||||
typedef enum tagBREAKRESUME_ACTION {
|
||||
BREAKRESUMEACTION_ABORT,
|
||||
BREAKRESUMEACTION_CONTINUE,
|
||||
BREAKRESUMEACTION_STEP_INTO,
|
||||
BREAKRESUMEACTION_STEP_OVER,
|
||||
BREAKRESUMEACTION_STEP_OUT,
|
||||
BREAKRESUMEACTION_IGNORE
|
||||
} BREAKRESUMEACTION;
|
||||
|
||||
typedef enum tagDOCUMENTNAMETYPE {
|
||||
DOCUMENTNAMETYPE_APPNODE,
|
||||
DOCUMENTNAMETYPE_TITLE,
|
||||
DOCUMENTNAMETYPE_FILE_TAIL,
|
||||
DOCUMENTNAMETYPE_URL
|
||||
} DOCUMENTNAMETYPE;
|
||||
|
||||
typedef enum tagERRORRESUMEACTION {
|
||||
ERRORRESUMEACTION_ReexecuteErrorStatement,
|
||||
ERRORRESUMEACTION_AbortCallAndReturnErrorToCaller,
|
||||
ERRORRESUMEACTION_SkipErrorStatement,
|
||||
} ERRORRESUMEACTION;
|
||||
|
||||
/************************************************************
|
||||
* interface IDebugDocumentInfo
|
||||
*/
|
||||
[
|
||||
object,
|
||||
uuid(51973c1f-cb0c-11d0-b5c9-00a0244a0e7a),
|
||||
pointer_default(unique)
|
||||
]
|
||||
interface IDebugDocumentInfo : IUnknown
|
||||
{
|
||||
HRESULT GetName(
|
||||
[in] DOCUMENTNAMETYPE dnt,
|
||||
[out] BSTR *pbstrName);
|
||||
|
||||
HRESULT GetDocumentClassId(
|
||||
[out] CLSID *pclsidDocument);
|
||||
}
|
||||
|
||||
/************************************************************
|
||||
* interface IDebugDocument
|
||||
*/
|
||||
[
|
||||
object,
|
||||
uuid(51973c21-cb0c-11d0-b5c9-00a0244a0e7a),
|
||||
pointer_default(unique)
|
||||
]
|
||||
interface IDebugDocument : IDebugDocumentInfo
|
||||
{
|
||||
}
|
||||
|
||||
/************************************************************
|
||||
* interface IDebugCodeContext
|
||||
*/
|
||||
[
|
||||
object,
|
||||
uuid(51973c13-cb0c-11d0-b5c9-00a0244a0e7a),
|
||||
pointer_default(unique)
|
||||
]
|
||||
interface IDebugCodeContext : IUnknown
|
||||
{
|
||||
HRESULT GetDocumentContext(
|
||||
[out] IDebugDocumentContext **ppsc);
|
||||
|
||||
HRESULT SetBreakPoint(
|
||||
[in] BREAKPOINT_STATE bps);
|
||||
}
|
||||
|
||||
/************************************************************
|
||||
* interface IEnumDebugCodeContexts
|
||||
*/
|
||||
[
|
||||
object,
|
||||
uuid(51973c1d-cb0c-11d0-b5c9-00a0244a0e7a),
|
||||
pointer_default(unique)
|
||||
]
|
||||
interface IEnumDebugCodeContexts : IUnknown
|
||||
{
|
||||
HRESULT Next(
|
||||
[in] ULONG celt,
|
||||
[out] IDebugCodeContext **pscc,
|
||||
[out] ULONG *pceltFetched);
|
||||
|
||||
HRESULT Skip(
|
||||
[in] ULONG celt);
|
||||
|
||||
HRESULT Reset();
|
||||
|
||||
HRESULT Clone(
|
||||
[out] IEnumDebugCodeContexts **ppescc);
|
||||
}
|
||||
|
||||
/************************************************************
|
||||
* interface IDebugDocumentContext
|
||||
*/
|
||||
[
|
||||
object,
|
||||
uuid(51973c28-cb0c-11d0-b5c9-00a0244a0e7a),
|
||||
pointer_default(unique)
|
||||
]
|
||||
interface IDebugDocumentContext : IUnknown
|
||||
{
|
||||
HRESULT GetDocument(
|
||||
[out] IDebugDocument **ppsd);
|
||||
|
||||
HRESULT EnumCodeContexts(
|
||||
[out] IEnumDebugCodeContexts **ppescc);
|
||||
}
|
||||
|
||||
/************************************************************
|
||||
* interface IRemoteDebugApplicationThread
|
||||
*/
|
||||
[
|
||||
object,
|
||||
uuid(51973c37-cb0c-11d0-b5c9-00a0244a0e7a),
|
||||
pointer_default(unique)
|
||||
]
|
||||
interface IRemoteDebugApplicationThread : IUnknown
|
||||
{
|
||||
HRESULT GetSystemThreadId(
|
||||
[out] DWORD *dwThreadId);
|
||||
|
||||
HRESULT GetApplication(
|
||||
[out] IRemoteDebugApplication **pprda);
|
||||
|
||||
HRESULT EnumStackFrames(
|
||||
[out] IEnumDebugStackFrames **ppedsf);
|
||||
|
||||
HRESULT GetDescription(
|
||||
[out] BSTR *pbstrDescription,
|
||||
[out] BSTR *pbstrState);
|
||||
|
||||
HRESULT SetNextStatement(
|
||||
[in] IDebugStackFrame *pStackFrame,
|
||||
[in] IDebugCodeContext *pCodeContext);
|
||||
|
||||
HRESULT GetState(
|
||||
[out] DWORD *pState);
|
||||
|
||||
HRESULT Suspend(
|
||||
[out] DWORD *pdwCount);
|
||||
|
||||
HRESULT Resume(
|
||||
[out] DWORD *pdwCount);
|
||||
|
||||
HRESULT GetSuspendCount(
|
||||
[out] DWORD *pdwCount);
|
||||
}
|
||||
|
||||
/************************************************************
|
||||
* interface IRemoteDebugApplication
|
||||
*/
|
||||
[
|
||||
object,
|
||||
uuid(51973c30-cb0c-11d0-b5c9-00a0244Aae7a),
|
||||
pointer_default(unique)
|
||||
]
|
||||
interface IRemoteDebugApplication : IUnknown
|
||||
{
|
||||
HRESULT ResumeFromBreakPoint(
|
||||
[in] IRemoteDebugApplicationThread *prptFocus,
|
||||
[in] BREAKRESUMEACTION bra,
|
||||
[in] ERRORRESUMEACTION era);
|
||||
|
||||
HRESULT CauseBreak();
|
||||
|
||||
HRESULT ConnectDebugger(
|
||||
[in] IApplicationDebugger *pad);
|
||||
|
||||
HRESULT DisconnectDebugger();
|
||||
|
||||
HRESULT GetDebugger(
|
||||
[out] IApplicationDebugger **pad);
|
||||
|
||||
HRESULT CreateInstanceAtApplication(
|
||||
[in] REFCLSID rclsid,
|
||||
[in] IUnknown *pUnkOuter,
|
||||
[in] DWORD dwClsContext,
|
||||
[in] REFIID riid,
|
||||
[out, iid_is(riid)] IUnknown **ppvObject);
|
||||
|
||||
HRESULT QueryAlive();
|
||||
|
||||
HRESULT EnumThreads(
|
||||
[out] IEnumRemoteDebugApplicationThreads **pperdat);
|
||||
|
||||
HRESULT GetName(
|
||||
[out] BSTR *pbstrName);
|
||||
|
||||
HRESULT GetRootNode(
|
||||
[out] IDebugApplicationNode **ppdanRoot);
|
||||
|
||||
HRESULT EnumGlobalExpressionContexts(
|
||||
[out] IEnumDebugExpressionContexts **ppedec);
|
||||
}
|
||||
|
||||
/************************************************************
|
||||
* interface IDebugApplication32
|
||||
*/
|
||||
[
|
||||
object,
|
||||
uuid(51973c32-cb0c-11d0-b5c9-00a0244a0e7a),
|
||||
pointer_default(unique),
|
||||
local
|
||||
]
|
||||
interface IDebugApplication32 : IRemoteDebugApplication
|
||||
{
|
||||
HRESULT SetName(
|
||||
[in] LPCOLESTR pstrName);
|
||||
|
||||
HRESULT StepOutComplete();
|
||||
|
||||
HRESULT DebugOutput(
|
||||
[in] LPCOLESTR pstr);
|
||||
|
||||
HRESULT StartDebugSession();
|
||||
|
||||
HRESULT HandleBreakPoint(
|
||||
[in] BREAKREASON br,
|
||||
[out] BREAKRESUMEACTION *pbra);
|
||||
|
||||
HRESULT Close();
|
||||
|
||||
HRESULT GetBreakFlags(
|
||||
[out] APPBREAKFLAGS *pabf,
|
||||
[out] IRemoteDebugApplicationThread **pprdatSteppingThread);
|
||||
|
||||
HRESULT GetCurrentThread(
|
||||
[out] IDebugApplicationThread **pat);
|
||||
|
||||
HRESULT CreateAsyncDebugOperation(
|
||||
[in] IDebugSyncOperation *psdo,
|
||||
[out] IDebugAsyncOperation **ppado);
|
||||
|
||||
HRESULT AddStackFrameSniffer(
|
||||
[in] IDebugStackFrameSniffer *pdsfs,
|
||||
[out] DWORD *pdwCookie);
|
||||
|
||||
HRESULT RemoveStackFrameSniffer(
|
||||
[in] DWORD dwCookie);
|
||||
|
||||
HRESULT QueryCurrentThreadIsDebuggerThread();
|
||||
|
||||
HRESULT SynchronousCallInDebuggerThread(
|
||||
[in] IDebugThreadCall32 *pptc,
|
||||
[in] DWORD dwParam1,
|
||||
[in] DWORD dwParam2,
|
||||
[in] DWORD dwParam3);
|
||||
|
||||
HRESULT CreateApplicationNode(
|
||||
[out] IDebugApplicationNode **ppdanNew);
|
||||
|
||||
HRESULT FireDebuggerEvent(
|
||||
[in] REFGUID riid,
|
||||
[in] IUnknown *punk);
|
||||
|
||||
HRESULT HandleRuntimeError(
|
||||
[in] IActiveScriptErrorDebug *pErrorDebug,
|
||||
[in] IActiveScriptSite *pScriptSite,
|
||||
[out] BREAKRESUMEACTION *pbra,
|
||||
[out] ERRORRESUMEACTION *perra,
|
||||
[out] BOOL *pfCallOnScriptError);
|
||||
|
||||
BOOL FCanJitDebug();
|
||||
|
||||
BOOL FIsAutoJitDebugEnabled();
|
||||
|
||||
HRESULT AddGlobalExpressionContextProvider(
|
||||
[in] IProvideExpressionContexts *pdsfs,
|
||||
[out] DWORD *pdwCookie);
|
||||
|
||||
HRESULT RemoveGlobalExpressionContextProvider(
|
||||
[in] DWORD dwCookie);
|
||||
}
|
||||
|
||||
/************************************************************
|
||||
* interface IActiveScriptSiteDebug32
|
||||
*/
|
||||
[
|
||||
object,
|
||||
uuid(51973c11-cb0c-11d0-b5c9-00a0244a0e7a),
|
||||
pointer_default(unique),
|
||||
local
|
||||
]
|
||||
interface IActiveScriptSiteDebug32 : IUnknown
|
||||
{
|
||||
HRESULT GetDocumentContextFromPosition(
|
||||
[in] DWORD dwSourceContext,
|
||||
[in] ULONG uCharacterOffset,
|
||||
[in] ULONG uNumChars,
|
||||
[out] IDebugDocumentContext **ppsc);
|
||||
|
||||
HRESULT GetApplication(
|
||||
[out] IDebugApplication32 **ppda);
|
||||
|
||||
HRESULT GetRootApplicationNode(
|
||||
[out] IDebugApplicationNode **ppdanRoot);
|
||||
|
||||
HRESULT OnScriptErrorDebug(
|
||||
[in] IActiveScriptErrorDebug *pErrorDebug,
|
||||
[out] BOOL *pfEnterDebugger,
|
||||
[out] BOOL *pfCallOnScriptErrorWhenContinuing);
|
||||
}
|
||||
|
||||
cpp_quote("#ifndef DISABLE_ACTIVDBG_INTERFACE_WRAPPERS")
|
||||
cpp_quote("#ifdef _WIN64")
|
||||
|
||||
cpp_quote("#define IActiveScriptSiteDebug IActiveScriptSiteDebug64")
|
||||
cpp_quote("#define IID_IActiveScriptSiteDebug IID_IActiveScriptSiteDebug64")
|
||||
|
||||
cpp_quote("#define IDebugApplication IDebugApplication64")
|
||||
cpp_quote("#define IID_IDebugApplication IID_IDebugApplication64")
|
||||
|
||||
cpp_quote("#else")
|
||||
|
||||
cpp_quote("#define IActiveScriptSiteDebug IActiveScriptSiteDebug32")
|
||||
cpp_quote("#define IID_IActiveScriptSiteDebug IID_IActiveScriptSiteDebug32")
|
||||
|
||||
cpp_quote("#define IDebugApplication IDebugApplication32")
|
||||
cpp_quote("#define IID_IDebugApplication IID_IDebugApplication32")
|
||||
|
||||
cpp_quote("#endif")
|
||||
cpp_quote("#endif")
|
|
@ -21,6 +21,7 @@
|
|||
|
||||
#define DISPID_NORMAL_FIRST 1000
|
||||
#define DISPID_OMDOCUMENT DISPID_NORMAL_FIRST
|
||||
#define DISPID_DATATRANSFER DISPID_NORMAL_FIRST
|
||||
#define DISPID_ANCHOR DISPID_NORMAL_FIRST
|
||||
#define DISPID_BLOCK DISPID_NORMAL_FIRST
|
||||
#define DISPID_BR DISPID_NORMAL_FIRST
|
||||
|
@ -90,6 +91,8 @@
|
|||
#define DISPID_OMDOCUMENT DISPID_NORMAL_FIRST
|
||||
#define DISPID_SCREEN DISPID_NORMAL_FIRST
|
||||
#define DISPID_DOMATTRIBUTE DISPID_NORMAL_FIRST
|
||||
#define DISPID_DOMTEXTNODE DISPID_NORMAL_FIRST
|
||||
#define DISPID_GENERIC DISPID_NORMAL_FIRST
|
||||
#define DISPID_DOMIMPLEMENTATION DISPID_NORMAL_FIRST
|
||||
|
||||
#define DISPID_COLLECTION (DISPID_NORMAL_FIRST+500)
|
||||
|
@ -984,6 +987,17 @@
|
|||
#define DISPID_IHTMLELEMENTCOLLECTION__NEWENUM DISPID_NEWENUM
|
||||
#define DISPID_IHTMLELEMENTCOLLECTION_ITEM DISPID_VALUE
|
||||
|
||||
/* IHTMLElementCollection2 */
|
||||
#define DISPID_IHTMLELEMENTCOLLECTION2_URNS DISPID_COLLECTION+5
|
||||
|
||||
/* IHTMLElementCollection3 */
|
||||
#define DISPID_IHTMLELEMENTCOLLECTION3_NAMEDITEM DISPID_COLLECTION+6
|
||||
|
||||
/* IHTMLDOMChildrenCollection */
|
||||
#define DISPID_IHTMLDOMCHILDRENCOLLECTION_LENGTH DISPID_COLLECTION
|
||||
#define DISPID_IHTMLDOMCHILDRENCOLLECTION__NEWENUM DISPID_NEWENUM
|
||||
#define DISPID_IHTMLDOMCHILDRENCOLLECTION_ITEM DISPID_VALUE
|
||||
|
||||
/* HTMLElementEvents */
|
||||
#define DISPID_HTMLELEMENTEVENTS_ONHELP DISPID_EVMETH_ONHELP
|
||||
#define DISPID_HTMLELEMENTEVENTS_ONCLICK DISPID_EVMETH_ONCLICK
|
||||
|
@ -1107,7 +1121,7 @@
|
|||
#define DISPID_IHTMLELEMENT_ONDATASETCOMPLETE DISPID_EVPROP_ONDATASETCOMPLETE
|
||||
#define DISPID_IHTMLELEMENT_ONFILTERCHANGE DISPID_EVPROP_ONFILTER
|
||||
|
||||
/* IHTMLelement2 */
|
||||
/* IHTMLElement2 */
|
||||
#define DISPID_IHTMLELEMENT2_SCOPENAME DISPID_ELEMENT+39
|
||||
#define DISPID_IHTMLELEMENT2_SETCAPTURE DISPID_ELEMENT+40
|
||||
#define DISPID_IHTMLELEMENT2_RELEASECAPTURE DISPID_ELEMENT+41
|
||||
|
@ -1177,6 +1191,57 @@
|
|||
#define DISPID_IHTMLELEMENT2_READYSTATEVALUE DISPID_ELEMENT+84
|
||||
#define DISPID_IHTMLELEMENT2_GETELEMENTSBYTAGNAME DISPID_ELEMENT+85
|
||||
|
||||
/* IHTMLElement3 */
|
||||
#define DISPID_IHTMLELEMENT3_MERGEATTRIBUTES DISPID_ELEMENT+96
|
||||
#define DISPID_IHTMLELEMENT3_ISMULTILINE DISPID_ELEMENT+97
|
||||
#define DISPID_IHTMLELEMENT3_CANHAVEHTML DISPID_ELEMENT+98
|
||||
#define DISPID_IHTMLELEMENT3_ONLAYOUTCOMPLETE DISPID_EVPROP_ONLAYOUTCOMPLETE
|
||||
#define DISPID_IHTMLELEMENT3_ONPAGE DISPID_EVPROP_ONPAGE
|
||||
#define DISPID_IHTMLELEMENT3_INFLATEBLOCK DISPID_ELEMENT+100
|
||||
#define DISPID_IHTMLELEMENT3_ONBEFOREDEACTIVATE DISPID_EVPROP_ONBEFOREDEACTIVATE
|
||||
#define DISPID_IHTMLELEMENT3_SETACTIVE DISPID_ELEMENT+101
|
||||
#define DISPID_IHTMLELEMENT3_CONTENTEDITABLE DISPID_A_EDITABLE
|
||||
#define DISPID_IHTMLELEMENT3_ISCONTENTEDITABLE DISPID_ELEMENT+102
|
||||
#define DISPID_IHTMLELEMENT3_HIDEFOCUS DISPID_A_HIDEFOCUS
|
||||
#define DISPID_IHTMLELEMENT3_DISABLED STDPROPID_XOBJ_DISABLED
|
||||
#define DISPID_IHTMLELEMENT3_ISDISABLED DISPID_ELEMENT+105
|
||||
#define DISPID_IHTMLELEMENT3_ONMOVE DISPID_EVPROP_ONMOVE
|
||||
#define DISPID_IHTMLELEMENT3_ONCONTROLSELECT DISPID_EVPROP_ONCONTROLSELECT
|
||||
#define DISPID_IHTMLELEMENT3_FIREEVENT DISPID_ELEMENT+106
|
||||
#define DISPID_IHTMLELEMENT3_ONRESIZESTART DISPID_EVPROP_ONRESIZESTART
|
||||
#define DISPID_IHTMLELEMENT3_ONRESIZEEND DISPID_EVPROP_ONRESIZEEND
|
||||
#define DISPID_IHTMLELEMENT3_ONMOVESTART DISPID_EVPROP_ONMOVESTART
|
||||
#define DISPID_IHTMLELEMENT3_ONMOVEEND DISPID_EVPROP_ONMOVEEND
|
||||
#define DISPID_IHTMLELEMENT3_ONMOUSEENTER DISPID_EVPROP_ONMOUSEENTER
|
||||
#define DISPID_IHTMLELEMENT3_ONMOUSELEAVE DISPID_EVPROP_ONMOUSELEAVE
|
||||
#define DISPID_IHTMLELEMENT3_ONACTIVATE DISPID_EVPROP_ONACTIVATE
|
||||
#define DISPID_IHTMLELEMENT3_ONDEACTIVATE DISPID_EVPROP_ONDEACTIVATE
|
||||
#define DISPID_IHTMLELEMENT3_DRAGDROP DISPID_ELEMENT+107
|
||||
#define DISPID_IHTMLELEMENT3_GLYPHMODE DISPID_ELEMENT+108
|
||||
|
||||
/* IHTMLElement4 */
|
||||
#define DISPID_IHTMLELEMENT4_ONMOUSEWHEEL DISPID_EVPROP_ONMOUSEWHEEL
|
||||
#define DISPID_IHTMLELEMENT4_NORMALIZE DISPID_ELEMENT+112
|
||||
#define DISPID_IHTMLELEMENT4_GETATTRIBUTENODE DISPID_ELEMENT+109
|
||||
#define DISPID_IHTMLELEMENT4_SETATTRIBUTENODE DISPID_ELEMENT+110
|
||||
#define DISPID_IHTMLELEMENT4_REMOVEATTRIBUTENODE DISPID_ELEMENT+111
|
||||
#define DISPID_IHTMLELEMENT4_ONBEFOREACTIVATE DISPID_EVPROP_ONBEFOREACTIVATE
|
||||
#define DISPID_IHTMLELEMENT4_ONFOCUSIN DISPID_EVPROP_ONFOCUSIN
|
||||
#define DISPID_IHTMLELEMENT4_ONFOCUSOUT DISPID_EVPROP_ONFOCUSOUT
|
||||
|
||||
/* IHTMLGenericElement */
|
||||
#define DISPID_IHTMLGENERICELEMENT_RECORDSET DISPID_GENERIC+1
|
||||
#define DISPID_IHTMLGENERICELEMENT_NAMEDRECORDSET DISPID_GENERIC+2
|
||||
|
||||
/* IHTMLUniqueName */
|
||||
#define DISPID_IHTMLUNIQUENAME_UNIQUENUMBER DISPID_ELEMENT+54
|
||||
#define DISPID_IHTMLUNIQUENAME_UNIQUEID DISPID_ELEMENT+55
|
||||
|
||||
/* IHTMLDatabinding */
|
||||
#define DISPID_IHTMLDATABINDING_DATAFLD DISPID_ELEMENT+21
|
||||
#define DISPID_IHTMLDATABINDING_DATASRC DISPID_ELEMENT+22
|
||||
#define DISPID_IHTMLDATABINDING_DATAFORMATAS DISPID_ELEMENT+23
|
||||
|
||||
/* IHTMLStyle */
|
||||
#define DISPID_IHTMLSTYLE_PIXELTOP DISPID_STYLE
|
||||
#define DISPID_IHTMLSTYLE_PIXELLEFT (DISPID_STYLE+1)
|
||||
|
@ -1271,6 +1336,62 @@
|
|||
#define DISPID_IHTMLSTYLE_TEXTALIGN STDPROPID_XOBJ_BLOCKALIGN
|
||||
#define DISPID_IHTMLSTYLE_BACKGROUNDCOLOR DISPID_BACKCOLOR
|
||||
|
||||
/* IHTMLStyle2 */
|
||||
#define DISPID_IHTMLSTYLE2_TABLELAYOUT DISPID_A_TABLELAYOUT
|
||||
#define DISPID_IHTMLSTYLE2_BORDERCOLLAPSE DISPID_A_BORDERCOLLAPSE
|
||||
#define DISPID_IHTMLSTYLE2_DIRECTION DISPID_A_DIRECTION
|
||||
#define DISPID_IHTMLSTYLE2_BEHAVIOR DISPID_A_BEHAVIOR
|
||||
#define DISPID_IHTMLSTYLE2_SETEXPRESSION DISPID_HTMLOBJECT+4
|
||||
#define DISPID_IHTMLSTYLE2_GETEXPRESSION DISPID_HTMLOBJECT+5
|
||||
#define DISPID_IHTMLSTYLE2_REMOVEEXPRESSION DISPID_HTMLOBJECT+6
|
||||
#define DISPID_IHTMLSTYLE2_POSITION DISPID_A_POSITION
|
||||
#define DISPID_IHTMLSTYLE2_UNICODEBIDI DISPID_A_UNICODEBIDI
|
||||
#define DISPID_IHTMLSTYLE2_BOTTOM STDPROPID_XOBJ_BOTTOM
|
||||
#define DISPID_IHTMLSTYLE2_RIGHT STDPROPID_XOBJ_RIGHT
|
||||
#define DISPID_IHTMLSTYLE2_PIXELBOTTOM DISPID_STYLE+9
|
||||
#define DISPID_IHTMLSTYLE2_PIXELRIGHT DISPID_STYLE+10
|
||||
#define DISPID_IHTMLSTYLE2_POSBOTTOM DISPID_STYLE+11
|
||||
#define DISPID_IHTMLSTYLE2_POSRIGHT DISPID_STYLE+12
|
||||
#define DISPID_IHTMLSTYLE2_IMEMODE DISPID_A_IMEMODE
|
||||
#define DISPID_IHTMLSTYLE2_RUBYALIGN DISPID_A_RUBYALIGN
|
||||
#define DISPID_IHTMLSTYLE2_RUBYPOSITION DISPID_A_RUBYPOSITION
|
||||
#define DISPID_IHTMLSTYLE2_RUBYOVERHANG DISPID_A_RUBYOVERHANG
|
||||
#define DISPID_IHTMLSTYLE2_LAYOUTGRIDCHAR DISPID_A_LAYOUTGRIDCHAR
|
||||
#define DISPID_IHTMLSTYLE2_LAYOUTGRIDLINE DISPID_A_LAYOUTGRIDLINE
|
||||
#define DISPID_IHTMLSTYLE2_LAYOUTGRIDMODE DISPID_A_LAYOUTGRIDMODE
|
||||
#define DISPID_IHTMLSTYLE2_LAYOUTGRIDTYPE DISPID_A_LAYOUTGRIDTYPE
|
||||
#define DISPID_IHTMLSTYLE2_LAYOUTGRID DISPID_A_LAYOUTGRID
|
||||
#define DISPID_IHTMLSTYLE2_WORDBREAK DISPID_A_WORDBREAK
|
||||
#define DISPID_IHTMLSTYLE2_LINEBREAK DISPID_A_LINEBREAK
|
||||
#define DISPID_IHTMLSTYLE2_TEXTJUSTIFY DISPID_A_TEXTJUSTIFY
|
||||
#define DISPID_IHTMLSTYLE2_TEXTJUSTIFYTRIM DISPID_A_TEXTJUSTIFYTRIM
|
||||
#define DISPID_IHTMLSTYLE2_TEXTKASHIDA DISPID_A_TEXTKASHIDA
|
||||
#define DISPID_IHTMLSTYLE2_TEXTAUTOSPACE DISPID_A_TEXTAUTOSPACE
|
||||
#define DISPID_IHTMLSTYLE2_OVERFLOWX DISPID_A_OVERFLOWX
|
||||
#define DISPID_IHTMLSTYLE2_OVERFLOWY DISPID_A_OVERFLOWY
|
||||
#define DISPID_IHTMLSTYLE2_ACCELERATOR DISPID_A_ACCELERATOR
|
||||
|
||||
/* IHTMLStyle3 */
|
||||
#define DISPID_IHTMLSTYLE3_LAYOUTFLOW DISPID_A_LAYOUTFLOW
|
||||
#define DISPID_IHTMLSTYLE3_ZOOM DISPID_A_ZOOM
|
||||
#define DISPID_IHTMLSTYLE3_WORDWRAP DISPID_A_WORDWRAP
|
||||
#define DISPID_IHTMLSTYLE3_TEXTUNDERLINEPOSITION DISPID_A_TEXTUNDERLINEPOSITION
|
||||
#define DISPID_IHTMLSTYLE3_SCROLLBARBASECOLOR DISPID_A_SCROLLBARBASECOLOR
|
||||
#define DISPID_IHTMLSTYLE3_SCROLLBARFACECOLOR DISPID_A_SCROLLBARFACECOLOR
|
||||
#define DISPID_IHTMLSTYLE3_SCROLLBAR3DLIGHTCOLOR DISPID_A_SCROLLBAR3DLIGHTCOLOR
|
||||
#define DISPID_IHTMLSTYLE3_SCROLLBARSHADOWCOLOR DISPID_A_SCROLLBARSHADOWCOLOR
|
||||
#define DISPID_IHTMLSTYLE3_SCROLLBARHIGHLIGHTCOLOR DISPID_A_SCROLLBARHIGHLIGHTCOLOR
|
||||
#define DISPID_IHTMLSTYLE3_SCROLLBARDARKSHADOWCOLOR DISPID_A_SCROLLBARDARKSHADOWCOLOR
|
||||
#define DISPID_IHTMLSTYLE3_SCROLLBARARROWCOLOR DISPID_A_SCROLLBARARROWCOLOR
|
||||
#define DISPID_IHTMLSTYLE3_SCROLLBARTRACKCOLOR DISPID_A_SCROLLBARTRACKCOLOR
|
||||
#define DISPID_IHTMLSTYLE3_WRITINGMODE DISPID_A_WRITINGMODE
|
||||
#define DISPID_IHTMLSTYLE3_TEXTALIGNLAST DISPID_A_TEXTALIGNLAST
|
||||
#define DISPID_IHTMLSTYLE3_TEXTKASHIDASPACE DISPID_A_TEXTKASHIDASPACE
|
||||
|
||||
/* IHTMLStyle4 */
|
||||
#define DISPID_IHTMLSTYLE4_TEXTOVERFLOW DISPID_A_TEXTOVERFLOW
|
||||
#define DISPID_IHTMLSTYLE4_MINHEIGHT DISPID_A_MINHEIGHT
|
||||
|
||||
/* IHTMLFiltersCollection */
|
||||
#define DISPID_IHTMLFILTERSCOLLECTION_LENGTH (DISPID_FILTERS+1)
|
||||
#define DISPID_IHTMLFILTERSCOLLECTION__NEWENUM DISPID_NEWENUM
|
||||
|
@ -1321,7 +1442,7 @@
|
|||
#define DISPID_IHTMLWINDOW2_FRAMES 1100
|
||||
#define DISPID_IHTMLWINDOW2_DEFAULTSTATUS 1101
|
||||
#define DISPID_IHTMLWINDOW2_STATUS 1102
|
||||
#define DISPID_IHTMLWINDOW2_SETTIMEOUT 1103
|
||||
#define DISPID_IHTMLWINDOW2_SETTIMEOUT 1172
|
||||
#define DISPID_IHTMLWINDOW2_CLEARTIMEOUT 1104
|
||||
#define DISPID_IHTMLWINDOW2_ALERT 1105
|
||||
#define DISPID_IHTMLWINDOW2_CONFIRM 1110
|
||||
|
@ -1338,7 +1459,7 @@
|
|||
#define DISPID_IHTMLWINDOW2_BLUR 1159
|
||||
#define DISPID_IHTMLWINDOW2_SCROLL 1160
|
||||
#define DISPID_IHTMLWINDOW2_CLIENTINFORMATION 1161
|
||||
#define DISPID_IHTMLWINDOW2_SETINTERVAL 1162
|
||||
#define DISPID_IHTMLWINDOW2_SETINTERVAL 1173
|
||||
#define DISPID_IHTMLWINDOW2_CLEARINTERVAL 1163
|
||||
#define DISPID_IHTMLWINDOW2_OFFSCREENBUFFERING 1164
|
||||
#define DISPID_IHTMLWINDOW2_EXECSCRIPT 1165
|
||||
|
@ -1356,6 +1477,23 @@
|
|||
#define DISPID_IHTMLWINDOW2_ONRESIZE DISPID_EVPROP_ONRESIZE
|
||||
#define DISPID_IHTMLWINDOW2_ONSCROLL DISPID_EVPROP_ONSCROLL
|
||||
|
||||
/* IHTMLWindow3 */
|
||||
#define DISPID_IHTMLWINDOW3_SCREENLEFT 1170
|
||||
#define DISPID_IHTMLWINDOW3_SCREENTOP 1171
|
||||
#define DISPID_IHTMLWINDOW3_ATTACHEVENT DISPID_HTMLOBJECT+7
|
||||
#define DISPID_IHTMLWINDOW3_DETACHEVENT DISPID_HTMLOBJECT+8
|
||||
#define DISPID_IHTMLWINDOW3_SETTIMEOUT 1103
|
||||
#define DISPID_IHTMLWINDOW3_SETINTERVAL 1162
|
||||
#define DISPID_IHTMLWINDOW3_PRINT 1174
|
||||
#define DISPID_IHTMLWINDOW3_ONBEFOREPRINT DISPID_EVPROP_ONBEFOREPRINT
|
||||
#define DISPID_IHTMLWINDOW3_ONAFTERPRINT DISPID_EVPROP_ONAFTERPRINT
|
||||
#define DISPID_IHTMLWINDOW3_CLIPBOARDDATA 1175
|
||||
#define DISPID_IHTMLWINDOW3_SHOWMODELESSDIALOG 1176
|
||||
|
||||
/* IHTMLWindow4 */
|
||||
#define DISPID_IHTMLWINDOW4_CREATEPOPUP 1180
|
||||
#define DISPID_IHTMLWINDOW4_FRAMEELEMENT 1181
|
||||
|
||||
/* IHTMLImageElementFactory */
|
||||
#define DISPID_IHTMLIMAGEELEMENTFACTORY_CREATE DISPID_VALUE
|
||||
|
||||
|
@ -1390,6 +1528,9 @@
|
|||
#define DISPID_IHTMLIMGELEMENT_HEIGHT STDPROPID_XOBJ_HEIGHT
|
||||
#define DISPID_IHTMLIMGELEMENT_START DISPID_IMGBASE+13
|
||||
|
||||
/* IHTMLImgElement2 */
|
||||
#define DISPID_IHTMLIMGELEMENT2_LONGDESC DISPID_IMG+19
|
||||
|
||||
/* IOmHistory */
|
||||
#define DISPID_IOMHISTORY_LENGTH DISPID_HISTORY
|
||||
#define DISPID_IOMHISTORY_BACK (DISPID_HISTORY+1)
|
||||
|
@ -1436,6 +1577,13 @@
|
|||
#define DISPID_IHTMLOPSPROFILE_DOREADREQUEST 8
|
||||
#define DISPID_IHTMLOPSPROFILE_DOWRITEREQUEST 9
|
||||
|
||||
/* IHTMLDataTransfer */
|
||||
#define DISPID_IHTMLDATATRANSFER_SETDATA DISPID_DATATRANSFER+1
|
||||
#define DISPID_IHTMLDATATRANSFER_GETDATA DISPID_DATATRANSFER+2
|
||||
#define DISPID_IHTMLDATATRANSFER_CLEARDATA DISPID_DATATRANSFER+3
|
||||
#define DISPID_IHTMLDATATRANSFER_DROPEFFECT DISPID_DATATRANSFER+4
|
||||
#define DISPID_IHTMLDATATRANSFER_EFFECTALLOWED DISPID_DATATRANSFER+5
|
||||
|
||||
/* IHTMLEventObj */
|
||||
#define DISPID_IHTMLEVENTOBJ_SRCELEMENT (DISPID_EVENTOBJ+1)
|
||||
#define DISPID_IHTMLEVENTOBJ_ALTKEY (DISPID_EVENTOBJ+2)
|
||||
|
@ -1481,6 +1629,9 @@
|
|||
#define DISPID_IHTMLOPTIONELEMENT_TEXT (DISPID_OPTION+4)
|
||||
#define DISPID_IHTMLOPTIONELEMENT_FORM (DISPID_OPTION+6)
|
||||
|
||||
/* IHTMLOptionElement3 */
|
||||
#define DISPID_IHTMLOPTIONELEMENT3_LABEL DISPID_OPTION+7
|
||||
|
||||
/* IHTMLFormElement */
|
||||
#define DISPID_IHTMLFORMELEMENT_ACTION (DISPID_FORM+1)
|
||||
#define DISPID_IHTMLFORMELEMENT_DIR (DISPID_FORM+2)
|
||||
|
@ -1639,6 +1790,19 @@
|
|||
/* IHTMLDOMNode2 */
|
||||
#define DISPID_IHTMLDOMNODE2_OWNERDOCUMENT DISPID_ELEMENT+113
|
||||
|
||||
/* IHTMLDOMTextNode */
|
||||
#define DISPID_IHTMLDOMTEXTNODE_DATA DISPID_DOMTEXTNODE
|
||||
#define DISPID_IHTMLDOMTEXTNODE_TOSTRING DISPID_DOMTEXTNODE+1
|
||||
#define DISPID_IHTMLDOMTEXTNODE_LENGTH DISPID_DOMTEXTNODE+2
|
||||
#define DISPID_IHTMLDOMTEXTNODE_SPLITTEXT DISPID_DOMTEXTNODE+3
|
||||
|
||||
/* IHTMLDOMTextNode2 */
|
||||
#define DISPID_IHTMLDOMTEXTNODE2_SUBSTRINGDATA DISPID_DOMTEXTNODE+4
|
||||
#define DISPID_IHTMLDOMTEXTNODE2_APPENDDATA DISPID_DOMTEXTNODE+5
|
||||
#define DISPID_IHTMLDOMTEXTNODE2_INSERTDATA DISPID_DOMTEXTNODE+6
|
||||
#define DISPID_IHTMLDOMTEXTNODE2_DELETEDATA DISPID_DOMTEXTNODE+7
|
||||
#define DISPID_IHTMLDOMTEXTNODE2_REPLACEDATA DISPID_DOMTEXTNODE+8
|
||||
|
||||
/* IHTMLRenderStyle */
|
||||
#define DISPID_IHTMLRENDERSTYLE_TEXTLINETHROUGHSTYLE DISPID_A_TEXTLINETHROUGHSTYLE
|
||||
#define DISPID_IHTMLRENDERSTYLE_TEXTUNDERLINESTYLE DISPID_A_TEXTUNDERLINESTYLE
|
||||
|
@ -1792,6 +1956,10 @@
|
|||
#define DISPID_IHTMLINPUTELEMENT_HEIGHT STDPROPID_XOBJ_HEIGHT
|
||||
#define DISPID_IHTMLINPUTELEMENT_START DISPID_INPUT+20
|
||||
|
||||
/* IHTMLInputElement2 */
|
||||
#define DISPID_IHTMLINPUTELEMENT2_ACCEPT DISPID_INPUT+22
|
||||
#define DISPID_IHTMLINPUTELEMENT2_USEMAP DISPID_INPUT+23
|
||||
|
||||
/* IHTMLInputTextElement */
|
||||
#define DISPID_IHTMLINPUTTEXTELEMENT_TYPE DISPID_INPUT
|
||||
#define DISPID_IHTMLINPUTTEXTELEMENT_VALUE DISPID_A_VALUE
|
||||
|
@ -1826,6 +1994,12 @@
|
|||
#define DISPID_IHTMLSELECTELEMENT_ITEM DISPID_VALUE
|
||||
#define DISPID_IHTMLSELECTELEMENT_TAGS DISPID_COLLECTION+2
|
||||
|
||||
/* IHTMLSelectElement2 */
|
||||
#define DISPID_IHTMLSELECTELEMENT2_URNS DISPID_COLLECTION+5
|
||||
|
||||
/* IHTMLSelectElement4 */
|
||||
#define DISPID_IHTMLSELECTELEMENT4_NAMEDITEM DISPID_COLLECTION+6
|
||||
|
||||
/* IHTMLRect */
|
||||
#define DISPID_IHTMLRECT_LEFT DISPID_OMRECT+1
|
||||
#define DISPID_IHTMLRECT_TOP DISPID_OMRECT+2
|
||||
|
@ -1950,6 +2124,19 @@
|
|||
#define DISPID_IHTMLTABLECAPTION_ALIGN STDPROPID_XOBJ_BLOCKALIGN
|
||||
#define DISPID_IHTMLTABLECAPTION_VALIGN DISPID_A_TABLEVALIGN
|
||||
|
||||
/* IHTMLCommentElement */
|
||||
#define DISPID_IHTMLCOMMENTELEMENT_TEXT DISPID_COMMENTPDL+1
|
||||
#define DISPID_IHTMLCOMMENTELEMENT_ATOMIC DISPID_COMMENTPDL+2
|
||||
|
||||
/* IHTMLCommentElement2 */
|
||||
#define DISPID_IHTMLCOMMENTELEMENT2_DATA DISPID_COMMENTPDL+3
|
||||
#define DISPID_IHTMLCOMMENTELEMENT2_LENGTH DISPID_COMMENTPDL+4
|
||||
#define DISPID_IHTMLCOMMENTELEMENT2_SUBSTRINGDATA DISPID_COMMENTPDL+5
|
||||
#define DISPID_IHTMLCOMMENTELEMENT2_APPENDDATA DISPID_COMMENTPDL+6
|
||||
#define DISPID_IHTMLCOMMENTELEMENT2_INSERTDATA DISPID_COMMENTPDL+7
|
||||
#define DISPID_IHTMLCOMMENTELEMENT2_DELETEDATA DISPID_COMMENTPDL+8
|
||||
#define DISPID_IHTMLCOMMENTELEMENT2_REPLACEDATA DISPID_COMMENTPDL+9
|
||||
|
||||
/* IHTMLTable */
|
||||
#define DISPID_IHTMLTABLE_COLS DISPID_TABLE+1
|
||||
#define DISPID_IHTMLTABLE_BORDER DISPID_TABLE+2
|
||||
|
@ -2006,6 +2193,17 @@
|
|||
/* IHTMLScriptElement2 */
|
||||
#define DISPID_IHTMLSCRIPTELEMENT2_CHARSET DISPID_SCRIPT+10
|
||||
|
||||
/* IHTMLFrameBase */
|
||||
#define DISPID_IHTMLFRAMEBASE_SRC DISPID_FRAMESITE+0
|
||||
#define DISPID_IHTMLFRAMEBASE_NAME STDPROPID_XOBJ_NAME
|
||||
#define DISPID_IHTMLFRAMEBASE_BORDER DISPID_FRAMESITE+2
|
||||
#define DISPID_IHTMLFRAMEBASE_FRAMEBORDER DISPID_FRAMESITE+3
|
||||
#define DISPID_IHTMLFRAMEBASE_FRAMESPACING DISPID_FRAMESITE+4
|
||||
#define DISPID_IHTMLFRAMEBASE_MARGINWIDTH DISPID_FRAMESITE+5
|
||||
#define DISPID_IHTMLFRAMEBASE_MARGINHEIGHT DISPID_FRAMESITE+6
|
||||
#define DISPID_IHTMLFRAMEBASE_NORESIZE DISPID_FRAMESITE+7
|
||||
#define DISPID_IHTMLFRAMEBASE_SCROLLING DISPID_FRAMESITE+8
|
||||
|
||||
/* IHTMLFrameBase2 */
|
||||
#define DISPID_IHTMLFRAMEBASE2_CONTENTWINDOW DISPID_FRAMESITE+9
|
||||
#define DISPID_IHTMLFRAMEBASE2_ONLOAD DISPID_EVPROP_ONLOAD
|
||||
|
|
|
@ -157,9 +157,9 @@ interface IDocHostUIHandler : IUnknown
|
|||
} DOCHOSTUIINFO;
|
||||
|
||||
HRESULT ShowContextMenu(
|
||||
[in] DWORD dwID,
|
||||
[in] POINT *ppt,
|
||||
[in] IUnknown *pcmdtReserved,
|
||||
[in] DWORD dwID,
|
||||
[in] POINT *ppt,
|
||||
[in] IUnknown *pcmdtReserved,
|
||||
[in] IDispatch *pdispReserved);
|
||||
|
||||
HRESULT GetHostInfo([in, out] DOCHOSTUIINFO *pInfo);
|
||||
|
@ -188,7 +188,7 @@ interface IDocHostUIHandler : IUnknown
|
|||
|
||||
HRESULT TranslateAccelerator(
|
||||
[in] LPMSG lpMsg,
|
||||
[in] const GUID *pguidCmdGroup,
|
||||
[in] const GUID *pguidCmdGroup,
|
||||
[in] DWORD nCmdID);
|
||||
|
||||
HRESULT GetOptionKeyPath(
|
||||
|
@ -196,7 +196,7 @@ interface IDocHostUIHandler : IUnknown
|
|||
[in] DWORD dw);
|
||||
|
||||
HRESULT GetDropTarget(
|
||||
[in] IDropTarget *pDropTarget,
|
||||
[in] IDropTarget *pDropTarget,
|
||||
[out] IDropTarget **ppDropTarget);
|
||||
|
||||
HRESULT GetExternal([out] IDispatch **ppDispatch);
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,6 +1,8 @@
|
|||
<?xml version="1.0"?>
|
||||
<!DOCTYPE module SYSTEM "../../tools/rbuild/project.dtd">
|
||||
<module name="psdk" type="idlheader">
|
||||
<file>activaut.idl</file>
|
||||
<file>activdbg.idl</file>
|
||||
<file>activscp.idl</file>
|
||||
<file>control.idl</file>
|
||||
<file>dimm.idl</file>
|
||||
|
|
|
@ -41,7 +41,7 @@ typedef enum _ADDURL_FLAG
|
|||
interface IEnumSTATURL : IUnknown
|
||||
{
|
||||
typedef [unique] IEnumSTATURL *LPENUMSTATURL;
|
||||
|
||||
|
||||
typedef struct _STATURL
|
||||
{
|
||||
DWORD cbSize;
|
||||
|
@ -78,7 +78,7 @@ interface IEnumSTATURL : IUnknown
|
|||
interface IUrlHistoryStg : IUnknown
|
||||
{
|
||||
typedef [unique] IUrlHistoryStg *LPURLHISTORYSTG;
|
||||
|
||||
|
||||
HRESULT AddUrl(
|
||||
[in] LPCOLESTR pocsUrl,
|
||||
[in, unique] LPCOLESTR pocsTitle,
|
||||
|
@ -92,14 +92,14 @@ interface IUrlHistoryStg : IUnknown
|
|||
[in] LPCOLESTR pocsUrl,
|
||||
[in] DWORD dwFlags,
|
||||
[in, out, unique] LPSTATURL lpSTATURL);
|
||||
|
||||
|
||||
HRESULT BindToObject(
|
||||
[in] LPCOLESTR pocsUrl,
|
||||
[in] REFIID riid,
|
||||
[out, iid_is(riid)] void **ppvOut);
|
||||
|
||||
HRESULT EnumUrls(
|
||||
[out] IEnumSTATURL **ppEnum);
|
||||
[out] IEnumSTATURL **ppEnum);
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
|
|
|
@ -833,7 +833,8 @@ interface IInternetProtocolInfo : IUnknown
|
|||
QUERY_IS_CACHED_OR_MAPPED,
|
||||
QUERY_USES_CACHE,
|
||||
QUERY_IS_SECURE,
|
||||
QUERY_IS_SAFE
|
||||
QUERY_IS_SAFE,
|
||||
QUERY_USES_HISTORYFOLDER
|
||||
} QUERYOPTION;
|
||||
|
||||
HRESULT ParseUrl(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue