[gtk+] Make link coloring in labels optional
- From: Matthias Clasen <matthiasc src gnome org>
- To: svn-commits-list gnome org
- Subject: [gtk+] Make link coloring in labels optional
- Date: Thu, 9 Jul 2009 18:00:45 +0000 (UTC)
commit 2bb282027253355e3456ffccc05c8a0800fd574e
Author: Matthias Clasen <mclasen redhat com>
Date: Thu Jul 9 13:59:35 2009 -0400
Make link coloring in labels optional
Turns out that link coloring is expected for actual hypertext-like
use, but when using links just as 'mutant button', then it gets
in the way.
docs/reference/gtk/gtk-sections.txt | 2 +
gtk/gtk.symbols | 2 +
gtk/gtklabel.c | 84 ++++++++++++++++++++++++++++++++---
gtk/gtklabel.h | 4 ++
4 files changed, 86 insertions(+), 6 deletions(-)
---
diff --git a/docs/reference/gtk/gtk-sections.txt b/docs/reference/gtk/gtk-sections.txt
index 331157d..24261f9 100644
--- a/docs/reference/gtk/gtk-sections.txt
+++ b/docs/reference/gtk/gtk-sections.txt
@@ -2306,6 +2306,8 @@ gtk_label_set_use_underline
gtk_label_set_single_line_mode
gtk_label_set_angle
gtk_label_get_current_uri
+gtk_label_set_track_visited_links
+gtk_label_get_track_visited_links
<SUBSECTION Standard>
GTK_LABEL
GTK_IS_LABEL
diff --git a/gtk/gtk.symbols b/gtk/gtk.symbols
index 0449189..f523840 100644
--- a/gtk/gtk.symbols
+++ b/gtk/gtk.symbols
@@ -2215,6 +2215,8 @@ gtk_label_set_use_markup
gtk_label_set_use_underline
gtk_label_set_width_chars
gtk_label_get_current_uri
+gtk_label_set_track_visited_links
+gtk_label_get_track_visited_links
#endif
#endif
diff --git a/gtk/gtklabel.c b/gtk/gtklabel.c
index ea963b1..4577eec 100644
--- a/gtk/gtklabel.c
+++ b/gtk/gtklabel.c
@@ -147,7 +147,8 @@ enum {
PROP_WIDTH_CHARS,
PROP_SINGLE_LINE_MODE,
PROP_ANGLE,
- PROP_MAX_WIDTH_CHARS
+ PROP_MAX_WIDTH_CHARS,
+ PROP_TRACK_VISITED_LINKS
};
static guint signals[LAST_SIGNAL] = { 0 };
@@ -710,6 +711,23 @@ gtk_label_class_init (GtkLabelClass *class)
G_MAXINT,
-1,
GTK_PARAM_READWRITE));
+
+ /**
+ * GtkLabel:track-visited-links:
+ *
+ * Set this property to %TRUE to make the label track which links
+ * have been clicked. It will then apply the ::visited-link-color
+ * color, instead of ::link-color.
+ *
+ * Since: 2.18
+ */
+ g_object_class_install_property (gobject_class,
+ PROP_TRACK_VISITED_LINKS,
+ g_param_spec_boolean ("track-visited-links",
+ P_("Track visited links"),
+ P_("Whether visited links should be tracked"),
+ TRUE,
+ GTK_PARAM_READWRITE));
/*
* Key bindings
*/
@@ -893,6 +911,9 @@ gtk_label_set_property (GObject *object,
case PROP_MAX_WIDTH_CHARS:
gtk_label_set_max_width_chars (label, g_value_get_int (value));
break;
+ case PROP_TRACK_VISITED_LINKS:
+ gtk_label_set_track_visited_links (label, g_value_get_boolean (value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -976,7 +997,9 @@ gtk_label_get_property (GObject *object,
case PROP_MAX_WIDTH_CHARS:
g_value_set_int (value, gtk_label_get_max_width_chars (label));
break;
-
+ case PROP_TRACK_VISITED_LINKS:
+ g_value_set_boolean (value, gtk_label_get_track_visited_links (label));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -1004,7 +1027,8 @@ gtk_label_init (GtkLabel *label)
label->use_underline = FALSE;
label->use_markup = FALSE;
label->pattern_set = FALSE;
-
+ label->track_links = TRUE;
+
label->mnemonic_keyval = GDK_VoidSymbol;
label->layout = NULL;
label->text = NULL;
@@ -1012,7 +1036,7 @@ gtk_label_init (GtkLabel *label)
label->mnemonic_widget = NULL;
label->mnemonic_window = NULL;
-
+
gtk_label_set_text (label, "");
}
@@ -1987,7 +2011,8 @@ start_element_handler (GMarkupParseContext *context,
return;
}
- if (pdata->label->select_info)
+ visited = FALSE;
+ if (pdata->label->track_links && pdata->label->select_info)
{
GList *l;
for (l = pdata->label->select_info->links; l; l = l->next)
@@ -5651,7 +5676,7 @@ emit_activate_link (GtkLabel *label,
gboolean handled;
g_signal_emit (label, signals[ACTIVATE_LINK], 0, link->uri, &handled);
- if (handled && !link->visited)
+ if (handled && label->track_links && !link->visited)
{
link->visited = TRUE;
/* FIXME: shouldn't have to redo everything here */
@@ -5737,6 +5762,53 @@ gtk_label_get_current_uri (GtkLabel *label)
return NULL;
}
+/**
+ * gtk_label_set_track_visited_links:
+ * @label: a #GtkLabel
+ * @track_links: %TRUE to track visited links
+ *
+ * Sets whether the label should keep track of clicked
+ * links (and use a different color for them).
+ *
+ * Since: 2.18
+ */
+void
+gtk_label_set_track_visited_links (GtkLabel *label,
+ gboolean track_links)
+{
+ g_return_if_fail (GTK_IS_LABEL (label));
+
+ track_links = track_links != FALSE;
+
+ if (label->track_links != track_links)
+ {
+ label->track_links = track_links;
+
+ /* FIXME: shouldn't have to redo everything here */
+ gtk_label_recalculate (label);
+
+ g_object_notify (G_OBJECT (label), "track-visited-links");
+ }
+}
+
+/**
+ * gtk_label_get_track_visited_links:
+ * @label: a #GtkLabel
+ *
+ * Returns whether the label is currently keeping track
+ * of clicked links.
+ *
+ * Returns: %TRUE if clicked links are remembered
+ *
+ * Since: 2.18
+ */
+gboolean
+gtk_label_get_track_visited_links (GtkLabel *label)
+{
+ g_return_val_if_fail (GTK_IS_LABEL (label), FALSE);
+
+ return label->track_links;
+}
static gboolean
gtk_label_query_tooltip (GtkWidget *widget,
diff --git a/gtk/gtklabel.h b/gtk/gtklabel.h
index 3788108..d44b142 100644
--- a/gtk/gtklabel.h
+++ b/gtk/gtklabel.h
@@ -67,6 +67,7 @@ struct _GtkLabel
guint GSEAL (in_click) : 1;
guint GSEAL (wrap_mode) : 3;
guint GSEAL (pattern_set) : 1;
+ guint GSEAL (track_links) : 1;
guint GSEAL (mnemonic_keyval);
@@ -177,6 +178,9 @@ void gtk_label_set_single_line_mode (GtkLabel *label,
gboolean gtk_label_get_single_line_mode (GtkLabel *label);
G_CONST_RETURN gchar *gtk_label_get_current_uri (GtkLabel *label);
+void gtk_label_set_track_visited_links (GtkLabel *label,
+ gboolean track_links);
+gboolean gtk_label_get_track_visited_links (GtkLabel *label);
#ifndef GTK_DISABLE_DEPRECATED
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]