Jacek Caban : mshtml: Start binding asynchronously.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Feb 12 09:23:49 CST 2007
Module: wine
Branch: master
Commit: 124cb44903805f5cb38d1f58d6ed38123262518a
URL: http://source.winehq.org/git/wine.git/?a=commit;h=124cb44903805f5cb38d1f58d6ed38123262518a
Author: Jacek Caban <jacek at codeweavers.com>
Date: Sat Feb 10 17:36:13 2007 +0100
mshtml: Start binding asynchronously.
---
dlls/mshtml/mshtml_private.h | 5 ++++-
dlls/mshtml/nsio.c | 11 +++++++++--
dlls/mshtml/task.c | 8 ++++++++
3 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index d23a967..ca5527b 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -386,9 +386,12 @@ typedef struct task_t {
enum {
TASK_SETDOWNLOADSTATE,
TASK_PARSECOMPLETE,
- TASK_SETPROGRESS
+ TASK_SETPROGRESS,
+ TASK_START_BINDING
} task_id;
+ BSCallback *bscallback;
+
struct task_t *next;
} task_t;
diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c
index 1d1ec90..973adcf 100644
--- a/dlls/mshtml/nsio.c
+++ b/dlls/mshtml/nsio.c
@@ -605,6 +605,7 @@ static nsresult NSAPI nsChannel_AsyncOpe
PRBool is_doc_uri;
LPCWSTR wine_url;
nsresult nsres;
+ task_t *task;
HRESULT hres;
TRACE("(%p)->(%p %p)\n", This, aListener, aContext);
@@ -718,8 +719,14 @@ static nsresult NSAPI nsChannel_AsyncOpe
bscallback->nscontext = aContext;
}
- start_binding(bscallback);
- IBindStatusCallback_Release(STATUSCLB(bscallback));
+ task = mshtml_alloc(sizeof(task_t));
+
+ task->doc = bscallback->doc;
+ task->task_id = TASK_START_BINDING;
+ task->next = NULL;
+ task->bscallback = bscallback;
+
+ push_task(task);
return NS_OK;
}
diff --git a/dlls/mshtml/task.c b/dlls/mshtml/task.c
index 84108d1..f6030f1 100644
--- a/dlls/mshtml/task.c
+++ b/dlls/mshtml/task.c
@@ -217,6 +217,12 @@ static void set_progress(HTMLDocument *d
}
}
+static void task_start_binding(BSCallback *bscallback)
+{
+ start_binding(bscallback);
+ IBindStatusCallback_Release(STATUSCLB(bscallback));
+}
+
static void process_task(task_t *task)
{
switch(task->task_id) {
@@ -226,6 +232,8 @@ static void process_task(task_t *task)
return set_parsecomplete(task->doc);
case TASK_SETPROGRESS:
return set_progress(task->doc);
+ case TASK_START_BINDING:
+ return task_start_binding(task->bscallback);
default:
ERR("Wrong task_id %d\n", task->task_id);
}
More information about the wine-cvs
mailing list