summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/reference/gtk/gtk-sections.txt2
-rw-r--r--gtk/gtk.symbols2
-rw-r--r--gtk/gtklabel.c84
-rw-r--r--gtk/gtklabel.h4
4 files changed, 86 insertions, 6 deletions
diff --git a/docs/reference/gtk/gtk-sections.txt b/docs/reference/gtk/gtk-sections.txt
index 331157dfb4..24261f98dd 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 0449189a70..f523840006 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 ea963b1853..4577eec3b1 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 3788108eda..d44b142fad 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