Module: wine Branch: master Commit: c9f6aaa2f72dab8d6053c562233a265ae334ab10 URL: http://source.winehq.org/git/wine.git/?a=commit;h=c9f6aaa2f72dab8d6053c56223...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Sep 16 22:05:24 2009 +0200
mshtml: Moved option_factory to HTMLWindow object.
---
dlls/mshtml/htmldoc.c | 5 ----- dlls/mshtml/htmloption.c | 10 +++++----- dlls/mshtml/htmlwindow.c | 11 ++++++++--- dlls/mshtml/mshtml_private.h | 27 +++++++++++++++------------ 4 files changed, 28 insertions(+), 25 deletions(-)
diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index 8b810fc..1c35b4b 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -196,11 +196,6 @@ static ULONG WINAPI HTMLDocument_Release(IHTMLDocument2 *iface) if(This->hwnd) DestroyWindow(This->hwnd);
- if(This->option_factory) { - This->option_factory->doc = NULL; - IHTMLOptionElementFactory_Release(HTMLOPTFACTORY(This->option_factory)); - } - if(This->location) This->location->doc = NULL;
diff --git a/dlls/mshtml/htmloption.c b/dlls/mshtml/htmloption.c index 49d8deb..0bc9f2c 100644 --- a/dlls/mshtml/htmloption.c +++ b/dlls/mshtml/htmloption.c @@ -459,7 +459,7 @@ static HRESULT WINAPI HTMLOptionElementFactory_create(IHTMLOptionElementFactory TRACE("(%p)->(%s %s %s %s %p)\n", This, debugstr_variant(&text), debugstr_variant(&value), debugstr_variant(&defaultselected), debugstr_variant(&selected), optelem);
- if(!This->doc->nsdoc) { + if(!This->window || !This->window->doc || !This->window->doc->nsdoc) { WARN("NULL nsdoc\n"); return E_UNEXPECTED; } @@ -467,14 +467,14 @@ static HRESULT WINAPI HTMLOptionElementFactory_create(IHTMLOptionElementFactory *optelem = NULL;
nsAString_Init(&option_str, optionW); - nsres = nsIDOMHTMLDocument_CreateElement(This->doc->nsdoc, &option_str, &nselem); + nsres = nsIDOMHTMLDocument_CreateElement(This->window->doc->nsdoc, &option_str, &nselem); nsAString_Finish(&option_str); if(NS_FAILED(nsres)) { ERR("CreateElement failed: %08x\n", nsres); return E_FAIL; }
- hres = IHTMLDOMNode_QueryInterface(HTMLDOMNODE(get_node(This->doc, (nsIDOMNode*)nselem, TRUE)), + hres = IHTMLDOMNode_QueryInterface(HTMLDOMNODE(get_node(This->window->doc, (nsIDOMNode*)nselem, TRUE)), &IID_IHTMLOptionElement, (void**)optelem); nsIDOMElement_Release(nselem);
@@ -509,7 +509,7 @@ static const IHTMLOptionElementFactoryVtbl HTMLOptionElementFactoryVtbl = { HTMLOptionElementFactory_create };
-HTMLOptionElementFactory *HTMLOptionElementFactory_Create(HTMLDocument *doc) +HTMLOptionElementFactory *HTMLOptionElementFactory_Create(HTMLWindow *window) { HTMLOptionElementFactory *ret;
@@ -517,7 +517,7 @@ HTMLOptionElementFactory *HTMLOptionElementFactory_Create(HTMLDocument *doc)
ret->lpHTMLOptionElementFactoryVtbl = &HTMLOptionElementFactoryVtbl; ret->ref = 1; - ret->doc = doc; + ret->window = window;
return ret; } diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c index f268a0a..60a46a1 100644 --- a/dlls/mshtml/htmlwindow.c +++ b/dlls/mshtml/htmlwindow.c @@ -95,6 +95,11 @@ static ULONG WINAPI HTMLWindow2_Release(IHTMLWindow2 *iface) if(!ref) { DWORD i;
+ if(This->option_factory) { + This->option_factory->window = NULL; + IHTMLOptionElementFactory_Release(HTMLOPTFACTORY(This->option_factory)); + } + if(This->event_target) release_event_target(This->event_target); for(i=0; i < This->global_prop_cnt; i++) @@ -672,10 +677,10 @@ static HRESULT WINAPI HTMLWindow2_get_Option(IHTMLWindow2 *iface, IHTMLOptionEle
TRACE("(%p)->(%p)\n", This, p);
- if(!This->doc->option_factory) - This->doc->option_factory = HTMLOptionElementFactory_Create(This->doc); + if(!This->option_factory) + This->option_factory = HTMLOptionElementFactory_Create(This);
- *p = HTMLOPTFACTORY(This->doc->option_factory); + *p = HTMLOPTFACTORY(This->option_factory); IHTMLOptionElementFactory_AddRef(*p);
return S_OK; diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 2aedc98..f5cb291 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -1,5 +1,5 @@ /* - * Copyright 2005-2008 Jacek Caban for CodeWeavers + * Copyright 2005-2009 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 @@ -153,6 +153,8 @@ void release_dispex(DispatchEx*); BOOL dispex_query_interface(DispatchEx*,REFIID,void**); HRESULT dispex_get_dprop_ref(DispatchEx*,const WCHAR*,BOOL,VARIANT**);
+typedef struct HTMLWindow HTMLWindow; + typedef enum { SCRIPTMODE_GECKO, SCRIPTMODE_ACTIVESCRIPT @@ -167,6 +169,14 @@ typedef struct { } global_prop_t;
typedef struct { + const IHTMLOptionElementFactoryVtbl *lpHTMLOptionElementFactoryVtbl; + + LONG ref; + + HTMLWindow *window; +} HTMLOptionElementFactory; + +struct HTMLWindow { DispatchEx dispex; const IHTMLWindow2Vtbl *lpHTMLWindow2Vtbl; const IHTMLWindow3Vtbl *lpHTMLWindow3Vtbl; @@ -183,12 +193,14 @@ typedef struct { SCRIPTMODE scriptmode; struct list script_hosts;
+ HTMLOptionElementFactory *option_factory; + global_prop_t *global_props; DWORD global_prop_cnt; DWORD global_prop_size;
struct list entry; -} HTMLWindow; +};
typedef enum { UNKNOWN_USERMODE, @@ -229,14 +241,6 @@ struct HTMLLocation { HTMLDocument *doc; };
-typedef struct { - const IHTMLOptionElementFactoryVtbl *lpHTMLOptionElementFactoryVtbl; - - LONG ref; - - HTMLDocument *doc; -} HTMLOptionElementFactory; - struct HTMLDocument { DispatchEx dispex; const IHTMLDocument2Vtbl *lpHTMLDocument2Vtbl; @@ -303,7 +307,6 @@ struct HTMLDocument { ConnectionPoint cp_htmldocevents2; ConnectionPoint cp_propnotif;
- HTMLOptionElementFactory *option_factory; HTMLLocation *location;
struct list selection_list; @@ -510,7 +513,7 @@ HRESULT create_doc_from_nsdoc(nsIDOMHTMLDocument*,HTMLDocument**);
HRESULT HTMLWindow_Create(HTMLDocument*,nsIDOMWindow*,HTMLWindow**); HTMLWindow *nswindow_to_window(const nsIDOMWindow*); -HTMLOptionElementFactory *HTMLOptionElementFactory_Create(HTMLDocument*); +HTMLOptionElementFactory *HTMLOptionElementFactory_Create(HTMLWindow*); HTMLLocation *HTMLLocation_Create(HTMLDocument*); IOmNavigator *OmNavigator_Create(void);