Since version 2.10, GTK+ provides the GtkLinkButton widget as a replacement for the GnomeHRef widget in the libgnomeui library.
Porting an application from GnomeHRef to GtkLinkButton is very simple. GtkLinkButton does not have a default action for “clicked” signal. So instead of simply creating the widget
1 2 3 |
GtkWidget *button; button = gnome_href_new (url, ""); |
you will have to handle the activation of the GtkLinkButton, using the ::clicked signal for instance
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
static void link_button_clicked_cb (GtkWidget *widget, gpointer data) { const gchar *link; link = gtk_link_button_get_uri (GTK_LINK_BUTTON (widget)); open_browser_at_url (link); } /* ... */ GtkWidget *button; button = gtk_link_button_new (url); g_signal_connect (button, "clicked", G_CALLBACK (link_button_clicked_cb), NULL); |
If you have more than one GtkLinkButton instead of connecting a signal to each one, you can use a "hook function" which will be called whenever a user activates a link button
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
static void link_button_hook (GtkLinkButton *button, const gchar *link, gpointer user_data) { open_browser_at_url (link); } /* ... */ GtkWidget *button1 = gtk_link_button_new (uri1); GtkWidget *button2 = gtk_link_button_new (uri2); gtk_link_button_set_uri_hook (link_button_hook, NULL, NULL); |
Starting with GTK+ 2.16, it is no longer necessary to set up a uri hook
manually, since GTK+ now defaults to calling gtk_show_uri()
if no uri
hook has been set.