Jacek Caban : ieframe: Disable forward and backward navigation toolbar buttons when they are not usable.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Nov 10 10:36:20 CST 2015


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Nov  9 17:53:00 2015 +0100

ieframe: Disable forward and backward navigation toolbar buttons when they are not usable.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/ieframe/dochost.c    |  8 +++++---
 dlls/ieframe/ieframe.h    |  1 +
 dlls/ieframe/iexplore.c   | 20 ++++++++++++++++++++
 dlls/ieframe/webbrowser.c |  5 +++++
 4 files changed, 31 insertions(+), 3 deletions(-)

diff --git a/dlls/ieframe/dochost.c b/dlls/ieframe/dochost.c
index 0823797..7ebd304 100644
--- a/dlls/ieframe/dochost.c
+++ b/dlls/ieframe/dochost.c
@@ -93,20 +93,22 @@ void on_commandstate_change(DocHost *doc_host, LONG command, VARIANT_BOOL enable
     dispparams.rgvarg = params;
 
     V_VT(params) = VT_BOOL;
-    V_BOOL(params) = enable;
+    V_BOOL(params) = enable ? VARIANT_TRUE : VARIANT_FALSE;
 
     V_VT(params+1) = VT_I4;
     V_I4(params+1) = command;
 
     call_sink(doc_host->cps.wbe2, DISPID_COMMANDSTATECHANGE, &dispparams);
+
+    doc_host->container_vtbl->on_command_state_change(doc_host, command, enable);
 }
 
 void update_navigation_commands(DocHost *dochost)
 {
     unsigned pos = dochost->travellog.loading_pos == -1 ? dochost->travellog.position : dochost->travellog.loading_pos;
 
-    on_commandstate_change(dochost, CSC_NAVIGATEBACK, pos > 0 ? VARIANT_TRUE : VARIANT_FALSE);
-    on_commandstate_change(dochost, CSC_NAVIGATEFORWARD, pos < dochost->travellog.length ? VARIANT_TRUE : VARIANT_FALSE);
+    on_commandstate_change(dochost, CSC_NAVIGATEBACK, pos > 0);
+    on_commandstate_change(dochost, CSC_NAVIGATEFORWARD, pos < dochost->travellog.length);
 }
 
 static void notif_complete(DocHost *This, DISPID dispid)
diff --git a/dlls/ieframe/ieframe.h b/dlls/ieframe/ieframe.h
index f0ca235..4baca9c 100644
--- a/dlls/ieframe/ieframe.h
+++ b/dlls/ieframe/ieframe.h
@@ -105,6 +105,7 @@ typedef struct _IDocHostContainerVtbl
     ULONG (*release)(DocHost*);
     void (WINAPI* GetDocObjRect)(DocHost*,RECT*);
     HRESULT (WINAPI* SetStatusText)(DocHost*,LPCWSTR);
+    void (*on_command_state_change)(DocHost*,LONG,BOOL);
     void (WINAPI* SetURL)(DocHost*,LPCWSTR);
 } IDocHostContainerVtbl;
 
diff --git a/dlls/ieframe/iexplore.c b/dlls/ieframe/iexplore.c
index 18437c9..5793dd8 100644
--- a/dlls/ieframe/iexplore.c
+++ b/dlls/ieframe/iexplore.c
@@ -430,6 +430,11 @@ static void add_tb_button(InternetExplorer *ie, int bmp, int cmd, int strId)
     SendMessageW(ie->toolbar_hwnd, TB_ADDBUTTONSW, 1, (LPARAM)&btn);
 }
 
+static void enable_toolbar_button(InternetExplorer *ie, int command, BOOL enable)
+{
+    SendMessageW(ie->toolbar_hwnd, TB_ENABLEBUTTON, command, enable);
+}
+
 static void create_rebar(InternetExplorer *ie)
 {
     HWND hwndRebar;
@@ -761,6 +766,20 @@ static HRESULT WINAPI DocHostContainer_SetStatusText(DocHost *iface, LPCWSTR tex
     return update_ie_statustext(This, text);
 }
 
+static void DocHostContainer_on_command_state_change(DocHost *iface, LONG command, BOOL enable)
+{
+    InternetExplorer *This = impl_from_DocHost(iface);
+
+    switch(command) {
+    case CSC_NAVIGATEBACK:
+        enable_toolbar_button(This, ID_BROWSE_BACK, enable);
+        break;
+    case CSC_NAVIGATEFORWARD:
+        enable_toolbar_button(This, ID_BROWSE_FORWARD, enable);
+        break;
+    }
+}
+
 static void WINAPI DocHostContainer_SetURL(DocHost* iface, LPCWSTR url)
 {
     InternetExplorer *This = impl_from_DocHost(iface);
@@ -774,6 +793,7 @@ static const IDocHostContainerVtbl DocHostContainerVtbl = {
     IEDocHost_release,
     DocHostContainer_GetDocObjRect,
     DocHostContainer_SetStatusText,
+    DocHostContainer_on_command_state_change,
     DocHostContainer_SetURL
 };
 
diff --git a/dlls/ieframe/webbrowser.c b/dlls/ieframe/webbrowser.c
index 5b4348b..3926cbb 100644
--- a/dlls/ieframe/webbrowser.c
+++ b/dlls/ieframe/webbrowser.c
@@ -1204,6 +1204,10 @@ static HRESULT WINAPI DocHostContainer_SetStatusText(DocHost* This, LPCWSTR text
     return E_NOTIMPL;
 }
 
+static void DocHostContainer_on_command_state_change(DocHost *This, LONG command, BOOL enable)
+{
+}
+
 static void WINAPI DocHostContainer_SetURL(DocHost* This, LPCWSTR url)
 {
 }
@@ -1213,6 +1217,7 @@ static const IDocHostContainerVtbl DocHostContainerVtbl = {
     WebBrowser_release,
     DocHostContainer_GetDocObjRect,
     DocHostContainer_SetStatusText,
+    DocHostContainer_on_command_state_change,
     DocHostContainer_SetURL
 };
 




More information about the wine-cvs mailing list