Alexander Nicolaysen Sørnes : mshtml: Send more informative messages to OleInPlaceFrame.
Alexandre Julliard
julliard at winehq.org
Wed Aug 4 12:27:23 CDT 2010
Module: wine
Branch: master
Commit: aa733bedd54be8c7ea7ea076ca208a5afbf831e6
URL: http://source.winehq.org/git/wine.git/?a=commit;h=aa733bedd54be8c7ea7ea076ca208a5afbf831e6
Author: Alexander Nicolaysen Sørnes <alex at thehandofagony.com>
Date: Fri Jul 30 21:56:05 2010 +0200
mshtml: Send more informative messages to OleInPlaceFrame.
---
dlls/mshtml/En.rc | 6 +++++
dlls/mshtml/main.c | 49 ++++++++++++++++++++++++++++++++++++++++++
dlls/mshtml/mshtml_private.h | 1 +
dlls/mshtml/nsevents.c | 6 +---
dlls/mshtml/persist.c | 40 ++++++++++++++++++++-------------
dlls/mshtml/resource.h | 4 +++
6 files changed, 86 insertions(+), 20 deletions(-)
diff --git a/dlls/mshtml/En.rc b/dlls/mshtml/En.rc
index e44b373..ba55bf7 100644
--- a/dlls/mshtml/En.rc
+++ b/dlls/mshtml/En.rc
@@ -20,6 +20,12 @@
LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
+ STRINGTABLE
+ {
+ IDS_STATUS_DONE "Done"
+ IDS_STATUS_DOWNLOADINGFROM "Downloading from %s..."
+}
+
STRINGTABLE
{
IDS_HTMLDISABLED "HTML rendering is currently disabled."
diff --git a/dlls/mshtml/main.c b/dlls/mshtml/main.c
index f54c6e3..d61c1f4 100644
--- a/dlls/mshtml/main.c
+++ b/dlls/mshtml/main.c
@@ -40,6 +40,7 @@
#define INIT_GUID
#include "mshtml_private.h"
+#include "resource.h"
WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
@@ -48,6 +49,7 @@ DWORD mshtml_tls = TLS_OUT_OF_INDEXES;
static HINSTANCE shdoclc = NULL;
static HDC display_dc;
+static LPWSTR status_strings[NUM_STATUS_STRINGS];
static void thread_detach(void)
{
@@ -63,6 +65,13 @@ static void thread_detach(void)
heap_free(thread_data);
}
+void free_strings(void)
+{
+ int i;
+ for(i = 0; i < NUM_STATUS_STRINGS; i++)
+ heap_free(status_strings[i]);
+}
+
static void process_detach(void)
{
close_gecko();
@@ -74,6 +83,46 @@ static void process_detach(void)
TlsFree(mshtml_tls);
if(display_dc)
DeleteObject(display_dc);
+
+ free_strings();
+}
+
+void set_statustext(HTMLDocumentObj* doc, INT id, LPCWSTR arg)
+{
+ int index = id - IDS_STATUS_DONE;
+ LPWSTR p = status_strings[index];
+
+ if(!doc->frame)
+ return;
+
+ if(!p)
+ {
+ DWORD len = 255;
+ p = heap_alloc(len * sizeof(WCHAR));
+ len = LoadStringW(hInst, id, p, len);
+ len++;
+ p = heap_realloc(p, len * sizeof(WCHAR));
+ if(InterlockedCompareExchangePointer((void**)&status_strings[index], p, NULL))
+ {
+ heap_free(p);
+ p = status_strings[index];
+ }
+ }
+
+ if(arg)
+ {
+ DWORD len = lstrlenW(p) + lstrlenW(arg) - 1;
+ LPWSTR buf = heap_alloc(len * sizeof(WCHAR));
+
+ snprintfW(buf, len - 1, p, arg);
+
+ p = buf;
+ }
+
+ IOleInPlaceFrame_SetStatusText(doc->frame, p);
+
+ if(arg)
+ heap_free(p);
}
HINSTANCE get_shdoclc(void)
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 2db2410..ee92806 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -1024,5 +1024,6 @@ static inline void windowref_release(windowref_t *ref)
HDC get_display_dc(void);
HINSTANCE get_shdoclc(void);
+void set_statustext(HTMLDocumentObj*,INT,LPCWSTR);
extern HINSTANCE hInst;
diff --git a/dlls/mshtml/nsevents.c b/dlls/mshtml/nsevents.c
index 6da5ded..8dda1e5 100644
--- a/dlls/mshtml/nsevents.c
+++ b/dlls/mshtml/nsevents.c
@@ -34,6 +34,7 @@
#include "mshtml_private.h"
#include "htmlevent.h"
+#include "resource.h"
WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
@@ -239,10 +240,7 @@ static nsresult NSAPI handle_load(nsIDOMEventListener *iface, nsIDOMEvent *event
if(doc_obj->view_sink)
IAdviseSink_OnViewChange(doc_obj->view_sink, DVASPECT_CONTENT, -1);
- if(doc_obj->frame) {
- static const WCHAR wszDone[] = {'D','o','n','e',0};
- IOleInPlaceFrame_SetStatusText(doc_obj->frame, wszDone);
- }
+ set_statustext(doc_obj, IDS_STATUS_DONE, NULL);
update_title(doc_obj);
}
diff --git a/dlls/mshtml/persist.c b/dlls/mshtml/persist.c
index 44ccd0f..76e3773 100644
--- a/dlls/mshtml/persist.c
+++ b/dlls/mshtml/persist.c
@@ -37,6 +37,7 @@
#include "mshtml_private.h"
#include "htmlevent.h"
+#include "resource.h"
WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
@@ -44,6 +45,7 @@ typedef struct {
task_t header;
HTMLDocumentObj *doc;
BOOL set_download;
+ LPOLESTR url;
} download_proc_task_t;
static BOOL use_gecko_script(LPCWSTR url)
@@ -134,8 +136,8 @@ static void set_downloading_proc(task_t *_task)
TRACE("(%p)\n", doc);
- if(doc->frame)
- IOleInPlaceFrame_SetStatusText(doc->frame, NULL /* FIXME */);
+ set_statustext(doc, IDS_STATUS_DOWNLOADINGFROM, task->url);
+ CoTaskMemFree(task->url);
if(!doc->client)
return;
@@ -243,26 +245,31 @@ HRESULT set_moniker(HTMLDocument *This, IMoniker *mon, IBindCtx *pibc, nsChannel
}
hres = create_doc_uri(This->window, url, &nsuri);
- CoTaskMemFree(url);
- if(FAILED(hres))
- return hres;
- if(async_bsc) {
- bscallback = async_bsc;
- }else {
- hres = create_channelbsc(mon, NULL, NULL, 0, &bscallback);
- if(FAILED(hres))
- return hres;
+ if(SUCCEEDED(hres))
+ {
+ if(async_bsc) {
+ bscallback = async_bsc;
+ }else {
+ hres = create_channelbsc(mon, NULL, NULL, 0, &bscallback);
+ }
}
- hres = load_nsuri(This->window, nsuri, bscallback, LOAD_INITIAL_DOCUMENT_URI);
- nsISupports_Release((nsISupports*)nsuri); /* FIXME */
if(SUCCEEDED(hres))
- set_window_bscallback(This->window, bscallback);
- if(bscallback != async_bsc)
- IUnknown_Release((IUnknown*)bscallback);
+ {
+ hres = load_nsuri(This->window, nsuri, bscallback, LOAD_INITIAL_DOCUMENT_URI);
+ nsISupports_Release((nsISupports*)nsuri); /* FIXME */
+ if(SUCCEEDED(hres))
+ set_window_bscallback(This->window, bscallback);
+ if(bscallback != async_bsc)
+ IUnknown_Release((IUnknown*)bscallback);
+ }
+
if(FAILED(hres))
+ {
+ CoTaskMemFree(url);
return hres;
+ }
HTMLDocument_LockContainer(This->doc_obj, TRUE);
@@ -275,6 +282,7 @@ HRESULT set_moniker(HTMLDocument *This, IMoniker *mon, IBindCtx *pibc, nsChannel
download_task = heap_alloc(sizeof(download_proc_task_t));
download_task->doc = This->doc_obj;
download_task->set_download = set_download;
+ download_task->url = url;
push_task(&download_task->header, set_downloading_proc, This->doc_obj->basedoc.task_magic);
return S_OK;
diff --git a/dlls/mshtml/resource.h b/dlls/mshtml/resource.h
index 1e92637..fd69bfd 100644
--- a/dlls/mshtml/resource.h
+++ b/dlls/mshtml/resource.h
@@ -25,6 +25,10 @@
#define IDS_DOWNLOADING 7502
#define IDS_INSTALLING 7503
+#define NUM_STATUS_STRINGS 2
+#define IDS_STATUS_DOWNLOADINGFROM 7550
+#define IDS_STATUS_DONE 7551
+
#define ID_DWL_DIALOG 7600
#define ID_DWL_PROGRESS 7601
#define ID_DWL_INSTALL 7602
More information about the wine-cvs
mailing list