// Purpose: Hyperlink control
// Author: Francesco Montorsi
// Created: 14/2/2007
-// RCS-ID: $Id$
// Copyright: (c) 2007 Francesco Montorsi
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#pragma hdrstop
#endif
-#if wxUSE_HYPERLINKCTRL && defined(__WXGTK210__)
+#if wxUSE_HYPERLINKCTRL && defined(__WXGTK210__) && !defined(__WXUNIVERSAL__)
#include "wx/hyperlink.h"
// local functions
// ----------------------------------------------------------------------------
-inline bool UseNative()
+static inline bool UseNative()
{
// native gtk_link_button widget is only available in GTK+ 2.10 and later
+#ifdef __WXGTK3__
+ return true;
+#else
return !gtk_check_version(2, 10, 0);
+#endif
}
// ============================================================================
// implementation
// ============================================================================
-IMPLEMENT_DYNAMIC_CLASS(wxHyperlinkCtrl, wxGenericHyperlinkCtrl)
-
-
// ----------------------------------------------------------------------------
// "clicked"
// ----------------------------------------------------------------------------
// do validation checks:
CheckParams(label, url, style);
- m_needParent = true;
- m_acceptsFocus = true;
-
if (!PreCreation( parent, pos, size ) ||
!CreateBase( parent, id, pos, size, style, wxDefaultValidator, name ))
{
}
m_widget = gtk_link_button_new("asdfsaf asdfdsaf asdfdsa");
- gtk_widget_show( GTK_WIDGET(m_widget) );
+ g_object_ref(m_widget);
// alignment
float x_alignment = 0.5;
m_parent->DoAddChild( this );
PostCreation(size);
- SetInitialSize(size);
// wxWindowGTK will connect to the enter_notify and leave_notify GTK+ signals
// thus overriding GTK+'s internal signal handlers which set the cursor of
- // the widget - thus we need to manually set it here:
+ // the widget - thus we need to manually set it here:
SetCursor(wxCursor(wxCURSOR_HAND));
}
else
return wxGenericHyperlinkCtrl::DoGetBestSize();
}
+wxSize wxHyperlinkCtrl::DoGetBestClientSize() const
+{
+ if ( UseNative() )
+ return wxControl::DoGetBestClientSize();
+ return wxGenericHyperlinkCtrl::DoGetBestClientSize();
+}
+
void wxHyperlinkCtrl::SetLabel(const wxString &label)
{
if ( UseNative() )
void wxHyperlinkCtrl::SetURL(const wxString &uri)
{
if ( UseNative() )
- gtk_link_button_set_uri(GTK_LINK_BUTTON(m_widget), uri.c_str());
+ gtk_link_button_set_uri(GTK_LINK_BUTTON(m_widget), wxGTK_CONV(uri));
else
wxGenericHyperlinkCtrl::SetURL(uri);
}
if ( UseNative() )
{
const gchar *str = gtk_link_button_get_uri(GTK_LINK_BUTTON(m_widget));
- return wxConvFileName->cMB2WX(str);
+ return wxString::FromUTF8(str);
}
return wxGenericHyperlinkCtrl::GetURL();
wxColour wxHyperlinkCtrl::GetNormalColour() const
{
+ wxColour ret;
if ( UseNative() )
{
GdkColor *link_color = NULL;
- wxColour ret = wxNullColour;
// convert GdkColor in wxColour
gtk_widget_style_get(m_widget, "link-color", &link_color, NULL);
if (link_color)
- ret.Set(link_color->red, link_color->green, link_color->blue);
+ ret = wxColour(*link_color);
gdk_color_free (link_color);
-
- return ret;
}
else
- return wxGenericHyperlinkCtrl::GetNormalColour();
+ ret = wxGenericHyperlinkCtrl::GetNormalColour();
+
+ return ret;
}
void wxHyperlinkCtrl::SetVisitedColour(const wxColour &colour)
wxColour wxHyperlinkCtrl::GetVisitedColour() const
{
+ wxColour ret;
if ( UseNative() )
{
GdkColor *link_color = NULL;
- wxColour ret = wxNullColour;
// convert GdkColor in wxColour
gtk_widget_style_get(m_widget, "visited-link-color", &link_color, NULL);
if (link_color)
- ret.Set(link_color->red, link_color->green, link_color->blue);
+ ret = wxColour(*link_color);
gdk_color_free (link_color);
-
- return ret;
}
else
return wxGenericHyperlinkCtrl::GetVisitedColour();
+
+ return ret;
}
void wxHyperlinkCtrl::SetHoverColour(const wxColour &colour)
GdkWindow *wxHyperlinkCtrl::GTKGetWindow(wxArrayGdkWindows& windows) const
{
- return UseNative() ? GTK_BUTTON(m_widget)->event_window
+ return UseNative() ? gtk_button_get_event_window(GTK_BUTTON(m_widget))
: wxGenericHyperlinkCtrl::GTKGetWindow(windows);
}