[PATCH] ieframe: Improve status updates in BindStatusCallback_OnProgress

Detlef Riekenberg wine.dev at web.de
Wed Dec 21 06:51:24 CST 2011


---
 dlls/ieframe/ieframe.rc |    9 +++++++++
 dlls/ieframe/navigate.c |   36 +++++++++++++++++++++++++++++-------
 dlls/ieframe/resource.h |    8 ++++++++
 3 files changed, 46 insertions(+), 7 deletions(-)

diff --git a/dlls/ieframe/ieframe.rc b/dlls/ieframe/ieframe.rc
index aca9ff3..d14a9ea 100644
--- a/dlls/ieframe/ieframe.rc
+++ b/dlls/ieframe/ieframe.rc
@@ -73,6 +73,15 @@ STRINGTABLE
     IDS_ADDRESS             "Address"
 }
 
+STRINGTABLE
+{
+    IDS_FINDINGRESOURCE     "Searching for %s"
+    IDS_BEGINDOWNLOADDATA   "Start downloading %s"
+    IDS_ENDDOWNLOADDATA     "Downloading %s"
+    IDS_SENDINGREQUEST      "Asking for %s"
+}
+
+
 IDD_BROWSE_OPEN DIALOG 10, 10, 200, 70
 STYLE DS_MODALFRAME | WS_CAPTION
 CAPTION "Open URL"
diff --git a/dlls/ieframe/navigate.c b/dlls/ieframe/navigate.c
index 6c0ce41..c58ff7f 100644
--- a/dlls/ieframe/navigate.c
+++ b/dlls/ieframe/navigate.c
@@ -27,6 +27,7 @@
 #include "shlwapi.h"
 #include "wininet.h"
 #include "mshtml.h"
+#include "resource.h"
 
 #include "wine/debug.h"
 
@@ -93,21 +94,36 @@ static void dump_BINDINFO(BINDINFO *bi)
             );
 }
 
-static void set_status_text(BindStatusCallback *This, LPCWSTR str)
+static void set_status_text(BindStatusCallback *This, ULONG statuscode, LPCWSTR str)
 {
     VARIANTARG arg;
     DISPPARAMS dispparams = {&arg, NULL, 1, 0};
+    WCHAR fmt[IDS_STATUSFMT_MAXLEN];
+    WCHAR buffer[IDS_STATUSFMT_MAXLEN + INTERNET_MAX_URL_LENGTH];
 
     if(!This->doc_host)
         return;
 
+    TRACE("(%p, %d, %s)\n", This, statuscode, debugstr_w(str));
+    buffer[0] = 0;
+    if (statuscode && str && *str) {
+        fmt[0] = 0;
+        /* the format string must have one "%s" for the str */
+        LoadStringW(ieframe_instance, IDS_STATUSFMT_FIRST + statuscode, fmt, IDS_STATUSFMT_MAXLEN);
+        snprintfW(buffer, sizeof(buffer)/sizeof(WCHAR), fmt, str);
+    }
+
     V_VT(&arg) = VT_BSTR;
-    V_BSTR(&arg) = str ? SysAllocString(str) : NULL;
+    V_BSTR(&arg) = str ? SysAllocString(buffer) : NULL;
+    TRACE("=> %s\n", debugstr_w(V_BSTR(&arg)));
+
     call_sink(This->doc_host->cps.wbe2, DISPID_STATUSTEXTCHANGE, &dispparams);
-    VariantClear(&arg);
 
     if(This->doc_host->frame)
-        IOleInPlaceFrame_SetStatusText(This->doc_host->frame, str);
+        IOleInPlaceFrame_SetStatusText(This->doc_host->frame, buffer);
+
+    VariantClear(&arg);
+
 }
 
 HRESULT set_dochost_url(DocHost *This, const WCHAR *url)
@@ -251,14 +267,20 @@ static HRESULT WINAPI BindStatusCallback_OnProgress(IBindStatusCallback *iface,
     case BINDSTATUS_REDIRECTING:
         return set_dochost_url(This->doc_host, szStatusText);
     case BINDSTATUS_BEGINDOWNLOADDATA:
-        set_status_text(This, szStatusText); /* FIXME: "Start downloading from site: %s" */
+        set_status_text(This, ulStatusCode, szStatusText);
         status_code = get_http_status_code(This->binding);
         if(status_code != HTTP_STATUS_OK)
             handle_navigation_error(This->doc_host, status_code, This->url, NULL);
         return S_OK;
+
+    case BINDSTATUS_FINDINGRESOURCE:
     case BINDSTATUS_ENDDOWNLOADDATA:
-        set_status_text(This, szStatusText); /* FIXME: "Downloading from site: %s" */
+    case BINDSTATUS_SENDINGREQUEST:
+        set_status_text(This, ulStatusCode, szStatusText);
         return S_OK;
+
+    case BINDSTATUS_CONNECTING:
+    case BINDSTATUS_CACHEFILENAMEAVAILABLE:
     case BINDSTATUS_CLASSIDAVAILABLE:
     case BINDSTATUS_MIMETYPEAVAILABLE:
     case BINDSTATUS_BEGINSYNCOPERATION:
@@ -323,7 +345,7 @@ static HRESULT WINAPI BindStatusCallback_OnStopBinding(IBindStatusCallback *ifac
 
     TRACE("(%p)->(%08x %s)\n", This, hresult, debugstr_w(szError));
 
-    set_status_text(This, emptyW);
+    set_status_text(This, 0, emptyW);
 
     if(!This->doc_host)
         return S_OK;
diff --git a/dlls/ieframe/resource.h b/dlls/ieframe/resource.h
index a7d4ad6..34dc67c 100644
--- a/dlls/ieframe/resource.h
+++ b/dlls/ieframe/resource.h
@@ -57,3 +57,11 @@
 #define IDS_TB_PRINT                   1105
 
 #define IDS_ADDRESS                    1106
+
+/* update status text in BINDSTATUS_* callback */
+#define IDS_STATUSFMT_FIRST            4096
+#define IDS_FINDINGRESOURCE            IDS_STATUSFMT_FIRST + 1
+#define IDS_BEGINDOWNLOADDATA          IDS_STATUSFMT_FIRST + 4
+#define IDS_ENDDOWNLOADDATA            IDS_STATUSFMT_FIRST + 6
+#define IDS_SENDINGREQUEST             IDS_STATUSFMT_FIRST + 11
+#define IDS_STATUSFMT_MAXLEN           256
-- 
1.7.5.4




More information about the wine-patches mailing list