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