Jacek Caban : mshtml: Added history update notification support.

Alexandre Julliard julliard at winehq.org
Fri Jan 20 13:09:31 CST 2012


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Jan 20 15:11:06 2012 +0100

mshtml: Added history update notification support.

---

 dlls/mshtml/persist.c       |   35 ++++++++++++++++++++++++++++++++++-
 dlls/mshtml/tests/htmldoc.c |    2 +-
 2 files changed, 35 insertions(+), 2 deletions(-)

diff --git a/dlls/mshtml/persist.c b/dlls/mshtml/persist.c
index e66cbcb..6cb7b72 100644
--- a/dlls/mshtml/persist.c
+++ b/dlls/mshtml/persist.c
@@ -44,6 +44,9 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
 
+/* Undocumented notification, see tests */
+#define CMDID_EXPLORER_UPDATEHISTORY 38
+
 typedef struct {
     task_t header;
     HTMLDocumentObj *doc;
@@ -70,6 +73,35 @@ static BOOL use_gecko_script(HTMLWindow *window)
     return FAILED(hres) || scheme != URL_SCHEME_ABOUT;
 }
 
+static void notify_travellog_update(HTMLDocumentObj *doc)
+{
+    IOleCommandTarget *cmdtrg;
+    HRESULT hres;
+
+    if(!doc->is_webbrowser)
+        return;
+
+    /* Don't notify if we were in about: page */
+    if(doc->basedoc.window->uri) {
+        DWORD scheme;
+
+        hres = IUri_GetScheme(doc->basedoc.window->uri, &scheme);
+        if(SUCCEEDED(hres) && scheme == URL_SCHEME_ABOUT)
+            return;
+    }
+
+    hres = IOleClientSite_QueryInterface(doc->client, &IID_IOleCommandTarget, (void**)&cmdtrg);
+    if(SUCCEEDED(hres)) {
+        VARIANT vin;
+
+        V_VT(&vin) = VT_I4;
+        V_I4(&vin) = 0;
+
+        IOleCommandTarget_Exec(cmdtrg, &CGID_Explorer, CMDID_EXPLORER_UPDATEHISTORY, 0, &vin, NULL);
+        IOleCommandTarget_Release(cmdtrg);
+    }
+}
+
 void set_current_uri(HTMLWindow *window, IUri *uri)
 {
     if(window->uri) {
@@ -96,11 +128,12 @@ void set_current_mon(HTMLWindow *This, IMoniker *mon)
     HRESULT hres;
 
     if(This->mon) {
+        if(This->doc_obj)
+            notify_travellog_update(This->doc_obj);
         IMoniker_Release(This->mon);
         This->mon = NULL;
     }
 
-
     if(!mon)
         return;
 
diff --git a/dlls/mshtml/tests/htmldoc.c b/dlls/mshtml/tests/htmldoc.c
index 83f44f4..3f356e4 100644
--- a/dlls/mshtml/tests/htmldoc.c
+++ b/dlls/mshtml/tests/htmldoc.c
@@ -5113,7 +5113,7 @@ static void test_download(DWORD flags)
         CLEAR_CALLED(Exec_UPDATECOMMANDS);
         CLEAR_CALLED(Exec_SETTITLE);
         if(flags & DWL_EXPECT_HISTUPDATE)
-            todo_wine CHECK_CALLED(Exec_Explorer_38);
+            CHECK_CALLED(Exec_Explorer_38);
         todo_wine CHECK_CALLED_BROKEN(UpdateBackForwardState);
     }
     if(!is_js) {




More information about the wine-cvs mailing list