Jacek Caban : mshtml:
Push TASK_PARSECOMPLETE in load event if Gecko is available.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Jun 11 08:46:39 CDT 2007
Module: wine
Branch: master
Commit: d09692d18795c3f2b27d45e3e7b008976072d7ac
URL: http://source.winehq.org/git/wine.git/?a=commit;h=d09692d18795c3f2b27d45e3e7b008976072d7ac
Author: Jacek Caban <jacek at codeweavers.com>
Date: Sun Jun 10 11:42:37 2007 +0200
mshtml: Push TASK_PARSECOMPLETE in load event if Gecko is available.
---
dlls/mshtml/navigate.c | 4 +-
dlls/mshtml/nsembed.c | 54 +++++++++++++++++++++++++++++++++++++++++++----
2 files changed, 51 insertions(+), 7 deletions(-)
diff --git a/dlls/mshtml/navigate.c b/dlls/mshtml/navigate.c
index dd7d78d..2303baf 100644
--- a/dlls/mshtml/navigate.c
+++ b/dlls/mshtml/navigate.c
@@ -404,7 +404,7 @@ static HRESULT WINAPI BindStatusCallback_OnStopBinding(IBindStatusCallback *ifac
}
}
- if(This->doc) {
+ if(This->doc && !This->doc->nscontainer) {
task_t *task = mshtml_alloc(sizeof(task_t));
task->doc = This->doc;
@@ -413,7 +413,7 @@ static HRESULT WINAPI BindStatusCallback_OnStopBinding(IBindStatusCallback *ifac
/*
* This should be done in the worker thread that parses HTML,
- * but we don't have such thread (Gecko parses HTML for us).
+ * but we don't have such thread.
*/
push_task(task);
}
diff --git a/dlls/mshtml/nsembed.c b/dlls/mshtml/nsembed.c
index a5dd2d5..5c4cfd3 100644
--- a/dlls/mshtml/nsembed.c
+++ b/dlls/mshtml/nsembed.c
@@ -628,6 +628,28 @@ void set_ns_editmode(NSContainer *This)
nsIWebBrowser_SetParentURIContentListener(This->webbrowser, NSURICL(This));
}
+static void handle_load_event(NSContainer *This, nsIDOMEvent *event)
+{
+ task_t *task;
+
+ TRACE("(%p)\n", This);
+
+ if(!This->doc)
+ return;
+
+ task = mshtml_alloc(sizeof(task_t));
+
+ task->doc = This->doc;
+ task->task_id = TASK_PARSECOMPLETE;
+ task->next = NULL;
+
+ /*
+ * This should be done in the worker thread that parses HTML,
+ * but we don't have such thread (Gecko parses HTML for us).
+ */
+ push_task(task);
+}
+
void close_gecko(void)
{
TRACE("()\n");
@@ -1283,11 +1305,24 @@ static nsrefcnt NSAPI nsDOMEventListener_Release(nsIDOMEventListener *iface)
static nsresult NSAPI nsDOMEventListener_HandleEvent(nsIDOMEventListener *iface, nsIDOMEvent *event)
{
NSContainer *This = NSEVENTLIST_THIS(iface);
+ nsAString type_str;
+ const PRUnichar *type;
- TRACE("(%p)->(%p)\n", This, event);
+ static const PRUnichar loadW[] = {'l','o','a','d',0};
- if(This->doc->usermode == EDITMODE)
- handle_edit_event(This->doc, event);
+ nsAString_Init(&type_str, NULL);
+ nsIDOMEvent_GetType(event, &type_str);
+ nsAString_GetData(&type_str, &type, NULL);
+
+ TRACE("(%p)->(%p) %s\n", This, event, debugstr_w(type));
+
+ if(!strcmpW(loadW, type)) {
+ handle_load_event(This, event);
+ }else if(This->doc && This->doc->usermode == EDITMODE) {
+ handle_edit_event(This->doc, event);
+ }
+
+ nsAString_Finish(&type_str);
return NS_OK;
}
@@ -1519,14 +1554,23 @@ NSContainer *NSContainer_Create(HTMLDocument *doc, NSContainer *parent)
nsres = nsIDOMWindow_QueryInterface(dom_window, &IID_nsIDOMEventTarget, (void**)&target);
nsIDOMWindow_Release(dom_window);
if(NS_SUCCEEDED(nsres)) {
- nsAString keypress_str;
+ nsAString keypress_str, load_str;
static const PRUnichar wsz_keypress[] = {'k','e','y','p','r','e','s','s',0};
+ static const PRUnichar wsz_load[] = {'l','o','a','d',0};
+
nsAString_Init(&keypress_str, wsz_keypress);
nsres = nsIDOMEventTarget_AddEventListener(target, &keypress_str, NSEVENTLIST(ret), TRUE);
nsAString_Finish(&keypress_str);
- nsIDOMEventTarget_Release(target);
if(NS_FAILED(nsres))
ERR("AddEventTarget failed: %08x\n", nsres);
+
+ nsAString_Init(&load_str, wsz_load);
+ nsres = nsIDOMEventTarget_AddEventListener(target, &load_str, NSEVENTLIST(ret), TRUE);
+ nsAString_Finish(&load_str);
+ if(NS_FAILED(nsres))
+ ERR("AddEventTarget failed: %08x\n", nsres);
+
+ nsIDOMEventTarget_Release(target);
}else {
ERR("Could not get nsIDOMEventTarget interface: %08x\n", nsres);
}
More information about the wine-cvs
mailing list