From 40aa02249b9f527994e8d7f624bca28ef3aad93b Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sat, 28 Jan 2006 06:20:30 +0000 Subject: [PATCH] Allow to set a global hook function thats called whenever a link button is 2006-01-28 Matthias Clasen * gtk/gtk.symbols: * gtk/gtklinkbutton.h: * gtk/gtklinkbutton.c: Allow to set a global hook function thats called whenever a link button is clicked. --- ChangeLog | 5 ++++ ChangeLog.pre-2-10 | 5 ++++ docs/reference/ChangeLog | 2 ++ docs/reference/gtk/gtk-sections.txt | 1 + gtk/gtk.symbols | 1 + gtk/gtklinkbutton.c | 40 +++++++++++++++++++++++++++++ gtk/gtklinkbutton.h | 8 ++++++ 7 files changed, 62 insertions(+) diff --git a/ChangeLog b/ChangeLog index 55cab24d3b..d0b21d746f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2006-01-28 Matthias Clasen + * gtk/gtk.symbols: + * gtk/gtklinkbutton.h: + * gtk/gtklinkbutton.c: Allow to set a global hook function + thats called whenever a link button is clicked. + More work on GtkAssistant by Carlos Garnacho: * demos/gtk-demo/Makefile.am: diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 55cab24d3b..d0b21d746f 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,5 +1,10 @@ 2006-01-28 Matthias Clasen + * gtk/gtk.symbols: + * gtk/gtklinkbutton.h: + * gtk/gtklinkbutton.c: Allow to set a global hook function + thats called whenever a link button is clicked. + More work on GtkAssistant by Carlos Garnacho: * demos/gtk-demo/Makefile.am: diff --git a/docs/reference/ChangeLog b/docs/reference/ChangeLog index 3654f95c51..0474f0f78e 100644 --- a/docs/reference/ChangeLog +++ b/docs/reference/ChangeLog @@ -1,5 +1,7 @@ 2006-01-28 Matthias Clasen + * gtk/gtk-sections.txt: Add gtk_link_button_set_uri_hook + * gtk/gtk-docs.sgml: * gtk/migrating-GtkAssistant.sgml: Add a migration guide GnomeDruid --> GtkAssistant. (Carlos Garnacho) diff --git a/docs/reference/gtk/gtk-sections.txt b/docs/reference/gtk/gtk-sections.txt index c5e6d88891..9d95693d47 100644 --- a/docs/reference/gtk/gtk-sections.txt +++ b/docs/reference/gtk/gtk-sections.txt @@ -2077,6 +2077,7 @@ gtk_link_button_new gtk_link_button_new_with_label gtk_link_button_get_uri gtk_link_button_set_uri +gtk_link_button_set_uri_hook GTK_TYPE_LINK_BUTTON diff --git a/gtk/gtk.symbols b/gtk/gtk.symbols index 987dfab75d..764c76c57e 100644 --- a/gtk/gtk.symbols +++ b/gtk/gtk.symbols @@ -2001,6 +2001,7 @@ gtk_link_button_new gtk_link_button_new_with_label gtk_link_button_get_uri gtk_link_button_set_uri +gtk_link_button_set_uri_hook #endif #endif diff --git a/gtk/gtklinkbutton.c b/gtk/gtklinkbutton.c index 8bae769dc1..c0e2ea038c 100644 --- a/gtk/gtklinkbutton.c +++ b/gtk/gtklinkbutton.c @@ -102,6 +102,10 @@ static const GtkTargetEntry link_drop_types[] = { static GdkColor default_link_color = { 0, 0, 0, 0xeeee }; static GdkColor default_visited_link_color = { 0, 0x5555, 0x1a1a, 0x8b8b }; +static GtkLinkButtonUriFunc uri_func = NULL; +static gpointer uri_func_data = NULL; +static GDestroyNotify uri_func_destroy = NULL; + G_DEFINE_TYPE (GtkLinkButton, gtk_link_button, GTK_TYPE_BUTTON); static void @@ -436,6 +440,9 @@ gtk_link_button_clicked (GtkButton *button) { GtkLinkButton *link_button = GTK_LINK_BUTTON (button); + if (uri_func) + (* uri_func) (button, link_button->priv->uri, uri_func_data); + link_button->priv->visited = TRUE; set_link_color (link_button); @@ -615,5 +622,38 @@ gtk_link_button_get_uri (GtkLinkButton *link_button) return link_button->priv->uri; } +/** + * gtk_link_button_set_uri_hook: + * @func: a function called each time a #GtkLinkButton is clicked, or %NULL + * @data: user data to be passed to @func, or %NULL + * @destroy: a #GDestroyNotify that gets called when @data is no longer needed, or %NULL + * + * Sets @func as the function that should be invoked every time a user clicks + * a #GtkLinkButton. This function is called before every callback registered + * for the "clicked" signal. + * + * Return value: the previously set hook function. + * + * Since: 2.10 + */ +GtkLinkButtonUriFunc +gtk_link_button_set_uri_hook (GtkLinkButtonUriFunc func, + gpointer data, + GDestroyNotify destroy) +{ + GtkLinkButtonUriFunc old_uri_func; + + if (uri_func_destroy) + (* uri_func_destroy) (uri_func_data); + + old_uri_func = uri_func; + + uri_func = func; + uri_func_data = data; + uri_func_destroy = destroy; + + return old_uri_func; +} + #define __GTK_LINK_BUTTON_C__ #include "gtkaliasdef.c" diff --git a/gtk/gtklinkbutton.h b/gtk/gtklinkbutton.h index 25affc7e71..92b48512e0 100644 --- a/gtk/gtklinkbutton.h +++ b/gtk/gtklinkbutton.h @@ -41,6 +41,10 @@ typedef struct _GtkLinkButton GtkLinkButton; typedef struct _GtkLinkButtonClass GtkLinkButtonClass; typedef struct _GtkLinkButtonPrivate GtkLinkButtonPrivate; +typedef void (*GtkLinkButtonUriFunc) (GtkLinkButton *button, + const gchar *link, + gpointer user_data); + struct _GtkLinkButton { GtkButton parent_instance; @@ -68,6 +72,10 @@ G_CONST_RETURN gchar *gtk_link_button_get_uri (GtkLinkButton *link_but void gtk_link_button_set_uri (GtkLinkButton *link_button, const gchar *uri); +GtkLinkButtonUriFunc gtk_link_button_set_uri_hook (GtkLinkButtonUriFunc func, + gpointer data, + GDestroyNotify destroy); + G_END_DECLS #endif /* __GTK_LINK_BUTTON_H__ */