Jacek Caban : shdocvw: Do navigation in message handler.

Alexandre Julliard julliard at winehq.org
Mon Jan 21 05:58:53 CST 2008


Module: wine
Branch: master
Commit: b90346fd623a43089dab72c8dd778be7384c66b4
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=b90346fd623a43089dab72c8dd778be7384c66b4

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Jan 18 21:54:16 2008 +0100

shdocvw: Do navigation in message handler.

---

 dlls/shdocvw/navigate.c |   29 ++++++++++++++++++++++-------
 1 files changed, 22 insertions(+), 7 deletions(-)

diff --git a/dlls/shdocvw/navigate.c b/dlls/shdocvw/navigate.c
index 396d978..4439922 100644
--- a/dlls/shdocvw/navigate.c
+++ b/dlls/shdocvw/navigate.c
@@ -638,10 +638,28 @@ static HRESULT navigate_bsc(DocHost *This, BindStatusCallback *bsc, IMoniker *mo
     return hres;
 }
 
+typedef struct {
+    task_header_t header;
+    BindStatusCallback *bsc;
+} task_navigate_bsc_t;
+
+static void navigate_bsc_proc(DocHost *This, task_header_t *t)
+{
+    task_navigate_bsc_t *task = (task_navigate_bsc_t*)t;
+
+    if(!This->hwnd)
+        create_doc_view_hwnd(This);
+
+    navigate_bsc(This, task->bsc, NULL);
+
+    IBindStatusCallback_Release(BINDSC(task->bsc));
+}
+
+
 HRESULT navigate_url(DocHost *This, LPCWSTR url, const VARIANT *Flags,
                      const VARIANT *TargetFrameName, VARIANT *PostData, VARIANT *Headers)
 {
-    BindStatusCallback *bsc;
+    task_navigate_bsc_t *task;
     PBYTE post_data = NULL;
     ULONG post_data_len = 0;
     LPWSTR headers = NULL;
@@ -671,16 +689,13 @@ HRESULT navigate_url(DocHost *This, LPCWSTR url, const VARIANT *Flags,
         TRACE("Headers: %s\n", debugstr_w(headers));
     }
 
-    if(!This->hwnd)
-        create_doc_view_hwnd(This);
+    task = heap_alloc(sizeof(*task));
+    task->bsc = create_callback(This, url, post_data, post_data_len, headers);
 
-    bsc = create_callback(This, url, post_data, post_data_len, headers);
     if(post_data)
         SafeArrayUnaccessData(V_ARRAY(PostData));
 
-    navigate_bsc(This, bsc, NULL);
-
-    IBindStatusCallback_Release(BINDSC(bsc));
+    push_dochost_task(This, &task->header, navigate_bsc_proc, This->url == NULL);
 
     return S_OK;
 }




More information about the wine-cvs mailing list