diff --git a/dlls/mshtml/persist.c b/dlls/mshtml/persist.c
index 49a3835f4f8..540b563ae72 100644
--- a/dlls/mshtml/persist.c
+++ b/dlls/mshtml/persist.c
@@ -171,18 +171,13 @@ static void set_downloading_proc(task_t *_task)
static HRESULT set_moniker(HTMLDocument *This, IMoniker *mon, IBindCtx *pibc, BOOL set_download)
{
- nsChannelBSC *bscallback;
- LPOLESTR url = NULL;
- docobj_task_t *task;
download_proc_task_t *download_task;
+ nsChannelBSC *bscallback;
+ docobj_task_t *task;
nsWineURI *nsuri;
+ LPOLESTR url;
HRESULT hres;
- set_ready_state(This->window, READYSTATE_LOADING);
- update_doc(This, UPDATE_TITLE);
-
- HTMLDocument_LockContainer(This->doc_obj, TRUE);
-
hres = IMoniker_GetDisplayName(mon, pibc, NULL, &url);
if(FAILED(hres)) {
WARN("GetDiaplayName failed: %08x\n", hres);
@@ -191,11 +186,8 @@ static HRESULT set_moniker(HTMLDocument *This, IMoniker *mon, IBindCtx *pibc, BO
TRACE("got url: %s\n", debugstr_w(url));
- set_current_mon(This->window, mon);
-
if(This->doc_obj->client) {
VARIANT silent, offline;
- IOleCommandTarget *cmdtrg = NULL;
hres = get_client_disp_property(This->doc_obj->client, DISPID_AMBIENT_SILENT, &silent);
if(SUCCEEDED(hres)) {
@@ -213,6 +205,19 @@ static HRESULT set_moniker(HTMLDocument *This, IMoniker *mon, IBindCtx *pibc, BO
else if(V_BOOL(&silent))
FIXME("offline == true\n");
}
+ }
+
+ if(This->window->mon) {
+ update_doc(This, UPDATE_TITLE|UPDATE_UI);
+ }else {
+ update_doc(This, UPDATE_TITLE);
+ set_current_mon(This->window, mon);
+ }
+
+ set_ready_state(This->window, READYSTATE_LOADING);
+
+ if(This->doc_obj->client) {
+ IOleCommandTarget *cmdtrg = NULL;
hres = IOleClientSite_QueryInterface(This->doc_obj->client, &IID_IOleCommandTarget,
(void**)&cmdtrg);
@@ -244,6 +249,8 @@ static HRESULT set_moniker(HTMLDocument *This, IMoniker *mon, IBindCtx *pibc, BO
if(FAILED(hres))
return hres;
+ HTMLDocument_LockContainer(This->doc_obj, TRUE);
+
if(This->doc_obj->frame) {
task = heap_alloc(sizeof(docobj_task_t));
task->doc = This->doc_obj;