Module: wine Branch: master Commit: 124cb44903805f5cb38d1f58d6ed38123262518a URL: http://source.winehq.org/git/wine.git/?a=commit;h=124cb44903805f5cb38d1f58d6...
Author: Jacek Caban jacek@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); }