Jacek Caban : mshtml: Moved detaching inner window to separated function.
Alexandre Julliard
julliard at winehq.org
Wed Jul 11 17:39:20 CDT 2012
Module: wine
Branch: master
Commit: 2c1fe7f0c8b2bb05741aad36240b8ce888b4ae61
URL: http://source.winehq.org/git/wine.git/?a=commit;h=2c1fe7f0c8b2bb05741aad36240b8ce888b4ae61
Author: Jacek Caban <jacek at codeweavers.com>
Date: Wed Jul 11 13:51:39 2012 +0200
mshtml: Moved detaching inner window to separated function.
---
dlls/mshtml/htmlwindow.c | 50 ++++++++++++++++++++++-----------------------
1 files changed, 24 insertions(+), 26 deletions(-)
diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c
index 340ca44..d448614 100644
--- a/dlls/mshtml/htmlwindow.c
+++ b/dlls/mshtml/htmlwindow.c
@@ -43,8 +43,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
static struct list window_list = LIST_INIT(window_list);
-static HRESULT window_set_docnode(HTMLOuterWindow*,HTMLDocumentNode*);
-
static inline BOOL is_outer_window(HTMLWindow *window)
{
return &window->outer_window->base == window;
@@ -107,6 +105,25 @@ static inline HRESULT get_window_event(HTMLWindow *window, eventid_t eid, VARIAN
return get_event_handler(&window->inner_window->doc->body_event_target, eid, var);
}
+static void detach_inner_window(HTMLOuterWindow *outer_window)
+{
+ HTMLInnerWindow *window = outer_window->base.inner_window;
+
+ if(!window)
+ return;
+
+ if(outer_window->doc_obj && outer_window == outer_window->doc_obj->basedoc.window)
+ window->doc->basedoc.cp_container.forward_container = NULL;
+
+ detach_events(window->doc);
+ abort_window_bindings(window);
+ release_script_hosts(window);
+ window->doc->basedoc.window = NULL;
+ window->base.outer_window = NULL;
+
+ IHTMLWindow2_Release(&window->base.IHTMLWindow2_iface);
+}
+
static inline HTMLWindow *impl_from_IHTMLWindow2(IHTMLWindow2 *iface)
{
return CONTAINING_RECORD(iface, HTMLWindow, IHTMLWindow2_iface);
@@ -183,7 +200,7 @@ static void release_outer_window(HTMLOuterWindow *This)
remove_target_tasks(This->task_magic);
set_window_bscallback(This, NULL);
set_current_mon(This, NULL);
- window_set_docnode(This, NULL);
+ detach_inner_window(This);
release_children(This);
if(This->secmgr)
@@ -2667,32 +2684,13 @@ static HRESULT window_set_docnode(HTMLOuterWindow *window, HTMLDocumentNode *doc
HTMLInnerWindow *inner_window;
HRESULT hres;
- if(window->base.inner_window) {
- if(window->doc_obj && window == window->doc_obj->basedoc.window)
- window->base.inner_window->doc->basedoc.cp_container.forward_container = NULL;
- detach_events(window->base.inner_window->doc);
- abort_window_bindings(window->base.inner_window);
- release_script_hosts(window->base.inner_window);
- }
-
- if(doc_node) {
- hres = create_inner_window(window, doc_node, &inner_window);
- if(FAILED(hres))
- return hres;
- }else {
- inner_window = NULL;
- }
+ hres = create_inner_window(window, doc_node, &inner_window);
+ if(FAILED(hres))
+ return hres;
- if(window->base.inner_window) {
- window->base.inner_window->doc->basedoc.window = NULL;
- window->base.inner_window->base.outer_window = NULL;
- IHTMLWindow2_Release(&window->base.inner_window->base.IHTMLWindow2_iface);
- }
+ detach_inner_window(window);
window->base.inner_window = inner_window;
- if(!doc_node)
- return S_OK;
-
if(window->doc_obj && window->doc_obj->basedoc.window == window) {
if(window->doc_obj->basedoc.doc_node)
htmldoc_release(&window->doc_obj->basedoc.doc_node->basedoc);
More information about the wine-cvs
mailing list