From a0b56a26750c330f21187801d10177984d24da86 Mon Sep 17 00:00:00 2001 From: Paul Cornett Date: Thu, 3 Sep 2015 09:40:23 -0700 Subject: [PATCH] Implement SetVisited()/GetVisited() and set the visited state when the link is clicked (backport of 2fbd2a7800e48afab84bd4d9fbf97003a9e54333) --- include/wx/gtk/hyperlink.h | 4 ++++ src/gtk/hyperlink.cpp | 28 ++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/include/wx/gtk/hyperlink.h b/include/wx/gtk/hyperlink.h index b1d1fb000d..b2df45c2d0 100644 --- a/include/wx/gtk/hyperlink.h +++ b/include/wx/gtk/hyperlink.h @@ -19,6 +19,7 @@ class WXDLLIMPEXP_ADV wxHyperlinkCtrl : public wxGenericHyperlinkCtrl { + typedef wxGenericHyperlinkCtrl base_type; public: // Default constructor (for two-step construction). wxHyperlinkCtrl() { } @@ -60,6 +61,9 @@ public: virtual wxString GetURL() const; virtual void SetURL(const wxString &url); + virtual void SetVisited(bool visited = true); + virtual bool GetVisited() const; + virtual void SetLabel(const wxString &label); protected: diff --git a/src/gtk/hyperlink.cpp b/src/gtk/hyperlink.cpp index aee599faf5..9d05225288 100644 --- a/src/gtk/hyperlink.cpp +++ b/src/gtk/hyperlink.cpp @@ -58,6 +58,7 @@ static inline bool UseNative() extern "C" { static gboolean activate_link(GtkWidget*, wxHyperlinkCtrl* win) { + win->SetVisited(true); win->SendEvent(); return true; } @@ -72,6 +73,7 @@ static void clicked_hook(GtkLinkButton* button, const char*, void*) wxHyperlinkCtrl* win = static_cast(p->data); if (win->m_widget == (GtkWidget*)button) { + win->SetVisited(true); win->SendEvent(); return; } @@ -250,6 +252,32 @@ wxColour wxHyperlinkCtrl::GetVisitedColour() const return ret; } +void wxHyperlinkCtrl::SetVisited(bool visited) +{ + base_type::SetVisited(visited); +#if GTK_CHECK_VERSION(2,14,0) +#ifndef __WXGTK3__ + if (gtk_check_version(2,14,0) == NULL) +#endif + { + gtk_link_button_set_visited(GTK_LINK_BUTTON(m_widget), visited); + } +#endif +} + +bool wxHyperlinkCtrl::GetVisited() const +{ +#if GTK_CHECK_VERSION(2,14,0) +#ifndef __WXGTK3__ + if (gtk_check_version(2,14,0) == NULL) +#endif + { + return gtk_link_button_get_visited(GTK_LINK_BUTTON(m_widget)) != 0; + } +#endif + return base_type::GetVisited(); +} + void wxHyperlinkCtrl::SetHoverColour(const wxColour &colour) { if ( UseNative() )