[gtk+] GtkLabel: Add private api for links
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] GtkLabel: Add private api for links
- Date: Sat, 4 Jan 2014 15:54:32 +0000 (UTC)
commit 0d9efde30333166b57ee03800311064009bdf5e2
Author: Matthias Clasen <mclasen redhat com>
Date: Fri Jan 3 21:00:44 2014 -0500
GtkLabel: Add private api for links
This exposes enough information to implement the AtkHyperText
interface.
More private link api
gtk/gtklabel.c | 153 +++++++++++++++++++++++++++++++++++++++++++++++++
gtk/gtklabelprivate.h | 16 +++++
2 files changed, 169 insertions(+), 0 deletions(-)
---
diff --git a/gtk/gtklabel.c b/gtk/gtklabel.c
index 8d06be7..8f1ef1f 100644
--- a/gtk/gtklabel.c
+++ b/gtk/gtklabel.c
@@ -6581,3 +6581,156 @@ gtk_label_get_lines (GtkLabel *label)
return label->priv->lines;
}
+
+gint
+_gtk_label_get_n_links (GtkLabel *label)
+{
+ GtkLabelPrivate *priv = label->priv;
+
+ if (priv->select_info)
+ return g_list_length (priv->select_info->links);
+
+ return 0;
+}
+
+const gchar *
+_gtk_label_get_link_uri (GtkLabel *label,
+ gint idx)
+{
+ GtkLabelPrivate *priv = label->priv;
+ gint i;
+ GList *l;
+ GtkLabelLink *link;
+
+ if (priv->select_info)
+ for (l = priv->select_info->links, i = 0; l; l = l->next, i++)
+ {
+ if (i == idx)
+ {
+ link = l->data;
+ return link->uri;
+ }
+ }
+
+ return NULL;
+}
+
+void
+_gtk_label_get_link_extent (GtkLabel *label,
+ gint idx,
+ gint *start,
+ gint *end)
+{
+ GtkLabelPrivate *priv = label->priv;
+ gint i;
+ GList *l;
+ GtkLabelLink *link;
+
+ if (priv->select_info)
+ for (l = priv->select_info->links, i = 0; l; l = l->next, i++)
+ {
+ if (i == idx)
+ {
+ link = l->data;
+ *start = link->start;
+ *end = link->end;
+ return;
+ }
+ }
+
+ *start = -1;
+ *end = -1;
+}
+
+gint
+_gtk_label_get_link_at (GtkLabel *label,
+ gint pos)
+{
+ GtkLabelPrivate *priv = label->priv;
+ gint i;
+ GList *l;
+ GtkLabelLink *link;
+
+ if (priv->select_info)
+ for (l = priv->select_info->links, i = 0; l; l = l->next, i++)
+ {
+ link = l->data;
+ if (link->start <= pos && pos < link->end)
+ return i;
+ }
+
+ return -1;
+}
+
+void
+_gtk_label_activate_link (GtkLabel *label,
+ gint idx)
+{
+ GtkLabelPrivate *priv = label->priv;
+ gint i;
+ GList *l;
+ GtkLabelLink *link;
+
+ if (priv->select_info)
+ for (l = priv->select_info->links, i = 0; l; l = l->next, i++)
+ {
+ if (i == idx)
+ {
+ link = l->data;
+ emit_activate_link (label, link);
+ return;
+ }
+ }
+}
+
+gboolean
+_gtk_label_get_link_visited (GtkLabel *label,
+ gint idx)
+{
+ GtkLabelPrivate *priv = label->priv;
+ gint i;
+ GList *l;
+ GtkLabelLink *link;
+
+ if (priv->select_info)
+ for (l = priv->select_info->links, i = 0; l; l = l->next, i++)
+ {
+ if (i == idx)
+ {
+ link = l->data;
+ return link->visited;
+ }
+ }
+
+ return FALSE;
+}
+
+gboolean
+_gtk_label_get_link_focused (GtkLabel *label,
+ gint idx)
+{
+ GtkLabelPrivate *priv = label->priv;
+ gint i;
+ GList *l;
+ GtkLabelLink *link;
+ GtkLabelSelectionInfo *info = priv->select_info;
+
+ if (!info)
+ return FALSE;
+
+ if (info->selection_anchor != info->selection_end)
+ return FALSE;
+
+ for (l = info->links, i = 0; l; l = l->next, i++)
+ {
+ if (i == idx)
+ {
+ link = l->data;
+ if (link->start <= info->selection_anchor &&
+ info->selection_anchor <= link->end)
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
diff --git a/gtk/gtklabelprivate.h b/gtk/gtklabelprivate.h
index e8fe1b2..f99c50f 100644
--- a/gtk/gtklabelprivate.h
+++ b/gtk/gtklabelprivate.h
@@ -29,6 +29,22 @@ void _gtk_label_mnemonics_visible_apply_recursively (GtkWidget *widget,
gint _gtk_label_get_cursor_position (GtkLabel *label);
gint _gtk_label_get_selection_bound (GtkLabel *label);
+gint _gtk_label_get_n_links (GtkLabel *label);
+gint _gtk_label_get_link_at (GtkLabel *label,
+ gint pos);
+void _gtk_label_activate_link (GtkLabel *label,
+ gint idx);
+const gchar *_gtk_label_get_link_uri (GtkLabel *label,
+ gint idx);
+void _gtk_label_get_link_extent (GtkLabel *label,
+ gint idx,
+ gint *start,
+ gint *end);
+gboolean _gtk_label_get_link_visited (GtkLabel *label,
+ gint idx);
+gboolean _gtk_label_get_link_focused (GtkLabel *label,
+ gint idx);
+
G_END_DECLS
#endif /* __GTK_LABEL_PRIVATE_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]