summaryrefslogtreecommitdiff
path: root/gtk/gtktextbtree.c
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/gtktextbtree.c')
-rw-r--r--gtk/gtktextbtree.c132
1 files changed, 76 insertions, 56 deletions
diff --git a/gtk/gtktextbtree.c b/gtk/gtktextbtree.c
index 8c2b3e00af..e51f2bbd08 100644
--- a/gtk/gtktextbtree.c
+++ b/gtk/gtktextbtree.c
@@ -567,8 +567,8 @@ gtk_text_btree_delete (GtkTextIter *start,
gint line1;
gint line2;
- line1 = gtk_text_iter_get_line_number(start);
- line2 = gtk_text_iter_get_line_number(end);
+ line1 = gtk_text_iter_get_line(start);
+ line2 = gtk_text_iter_get_line(end);
if (line2 == gtk_text_btree_line_count(tree))
{
@@ -577,14 +577,14 @@ gtk_text_btree_delete (GtkTextIter *start,
GtkTextIter orig_end;
orig_end = *end;
- gtk_text_iter_backward_char(end);
+ gtk_text_iter_prev_char(end);
--line2;
- if (gtk_text_iter_get_line_char(start) == 0 &&
+ if (gtk_text_iter_get_line_offset(start) == 0 &&
line1 != 0)
{
- gtk_text_iter_backward_char(start);
+ gtk_text_iter_prev_char(start);
--line1;
}
@@ -612,10 +612,10 @@ gtk_text_btree_delete (GtkTextIter *start,
gtk_text_btree_invalidate_region(tree, start, end);
/* Save the byte offset so we can reset the iterators */
- start_byte_offset = gtk_text_iter_get_line_byte(start);
+ start_byte_offset = gtk_text_iter_get_line_index(start);
- start_line = gtk_text_iter_get_line(start);
- end_line = gtk_text_iter_get_line(end);
+ start_line = gtk_text_iter_get_text_line(start);
+ end_line = gtk_text_iter_get_text_line(end);
/*
* Split the start and end segments, so we have a place
@@ -921,9 +921,9 @@ gtk_text_btree_insert (GtkTextIter *iter,
/* extract iterator info */
tree = gtk_text_iter_get_btree(iter);
- line = gtk_text_iter_get_line(iter);
+ line = gtk_text_iter_get_text_line(iter);
start_line = line;
- start_byte_index = gtk_text_iter_get_line_byte(iter);
+ start_byte_index = gtk_text_iter_get_line_index(iter);
/* Get our insertion segment split */
prev_seg = gtk_text_line_segment_split(iter);
@@ -1045,9 +1045,9 @@ gtk_text_btree_insert_pixmap (GtkTextIter *iter,
GtkTextBTree *tree;
gint start_byte_offset;
- line = gtk_text_iter_get_line(iter);
+ line = gtk_text_iter_get_text_line(iter);
tree = gtk_text_iter_get_btree(iter);
- start_byte_offset = gtk_text_iter_get_line_byte(iter);
+ start_byte_offset = gtk_text_iter_get_line_index(iter);
seg = gtk_text_pixmap_segment_new (pixmap, mask);
@@ -1073,7 +1073,7 @@ gtk_text_btree_insert_pixmap (GtkTextIter *iter,
gtk_text_btree_get_iter_at_line(tree, &start, line, start_byte_offset);
*iter = start;
- gtk_text_iter_forward_char(iter); /* skip forward past the pixmap */
+ gtk_text_iter_next_char(iter); /* skip forward past the pixmap */
gtk_text_btree_invalidate_region(tree, &start, iter);
}
@@ -1481,8 +1481,8 @@ gtk_text_btree_tag (const GtkTextIter *start_orig,
printf("%s tag %s from %d to %d\n",
add ? "Adding" : "Removing",
tag->name,
- gtk_text_iter_get_char_index(start_orig),
- gtk_text_iter_get_char_index(end_orig));
+ gtk_text_buffer_get_offset(start_orig),
+ gtk_text_buffer_get_offset(end_orig));
#endif
if (gtk_text_iter_equal(start_orig, end_orig))
@@ -1497,8 +1497,8 @@ gtk_text_btree_tag (const GtkTextIter *start_orig,
info = gtk_text_btree_get_tag_info(tree, tag);
- start_line = gtk_text_iter_get_line(&start);
- end_line = gtk_text_iter_get_line(&end);
+ start_line = gtk_text_iter_get_text_line(&start);
+ end_line = gtk_text_iter_get_text_line(&end);
/* Find all tag toggles in the region; we are going to delete them.
We need to find them in advance, because
@@ -1507,8 +1507,8 @@ gtk_text_btree_tag (const GtkTextIter *start_orig,
stack = iter_stack_new();
iter = start;
/* We don't want to delete a toggle that's at the start iterator. */
- gtk_text_iter_forward_char(&iter);
- while (gtk_text_iter_forward_find_tag_toggle(&iter, tag))
+ gtk_text_iter_next_char(&iter);
+ while (gtk_text_iter_forward_to_tag_toggle(&iter, tag))
{
if (gtk_text_iter_compare(&iter, &end) >= 0)
break;
@@ -1569,7 +1569,7 @@ gtk_text_btree_tag (const GtkTextIter *start_orig,
GtkTextLineSegment *indexable_seg;
GtkTextLine *line;
- line = gtk_text_iter_get_line(&iter);
+ line = gtk_text_iter_get_text_line(&iter);
seg = gtk_text_iter_get_any_segment(&iter);
indexable_seg = gtk_text_iter_get_indexable_segment(&iter);
@@ -1873,9 +1873,9 @@ gtk_text_btree_get_tags (const GtkTextIter *iter,
#define NUM_TAG_INFOS 10
- line = gtk_text_iter_get_line(iter);
+ line = gtk_text_iter_get_text_line(iter);
tree = gtk_text_iter_get_btree(iter);
- byte_index = gtk_text_iter_get_line_byte(iter);
+ byte_index = gtk_text_iter_get_line_index(iter);
tagInfo.numTags = 0;
tagInfo.arraySize = NUM_TAG_INFOS;
@@ -1993,13 +1993,13 @@ copy_segment(GString *string,
gint copy_bytes = 0;
gint copy_start = 0;
- /* Don't copy if we're elided; segments are elided/not
+ /* Don't copy if we're invisible; segments are invisible/not
as a whole, no need to check each char */
if (!include_hidden &&
gtk_text_btree_char_is_invisible(start))
{
copy = FALSE;
- /* printf(" <elided>\n"); */
+ /* printf(" <invisible>\n"); */
}
copy_start = gtk_text_iter_get_segment_byte(start);
@@ -2012,7 +2012,7 @@ copy_segment(GString *string,
copy_bytes = end_byte - copy_start;
}
else
- copy_bytes = seg->byte_count;
+ copy_bytes = seg->byte_count - copy_start;
g_assert(copy_bytes != 0); /* Due to iter equality check at
front of this function. */
@@ -2085,18 +2085,17 @@ gtk_text_btree_get_text (const GtkTextIter *start_orig,
iter = start;
seg = gtk_text_iter_get_indexable_segment(&iter);
while (seg != end_seg)
- {
+ {
copy_segment(retval, include_hidden, include_nonchars,
&iter, &end);
- if (!gtk_text_iter_forward_indexable_segment(&iter))
- g_assert_not_reached(); /* must be able to go forward to
- end_seg, if end_seg still exists
- and was in front. */
-
+ gtk_text_iter_forward_indexable_segment(&iter);
+
seg = gtk_text_iter_get_indexable_segment(&iter);
}
+ copy_segment(retval, include_hidden, include_nonchars, &iter, &end);
+
str = retval->str;
g_string_free(retval, FALSE);
return str;
@@ -2137,9 +2136,9 @@ gtk_text_btree_char_is_invisible (const GtkTextIter *iter)
GtkTextBTree *tree;
gint byte_index;
- line = gtk_text_iter_get_line(iter);
+ line = gtk_text_iter_get_text_line(iter);
tree = gtk_text_iter_get_btree(iter);
- byte_index = gtk_text_iter_get_line_byte(iter);
+ byte_index = gtk_text_iter_get_line_index(iter);
numTags = gtk_text_tag_table_size(tree->table);
@@ -2168,7 +2167,7 @@ gtk_text_btree_char_is_invisible (const GtkTextIter *iter)
|| (seg->type == &gtk_text_toggle_off_type))
{
tag = seg->body.toggle.info->tag;
- if (tag->elide_set && tag->values->elide)
+ if (tag->invisible_set && tag->values->invisible)
{
tags[tag->priority] = tag;
tagCnts[tag->priority]++;
@@ -2192,7 +2191,7 @@ gtk_text_btree_char_is_invisible (const GtkTextIter *iter)
|| (seg->type == &gtk_text_toggle_off_type))
{
tag = seg->body.toggle.info->tag;
- if (tag->elide_set && tag->values->elide)
+ if (tag->invisible_set && tag->values->invisible)
{
tags[tag->priority] = tag;
tagCnts[tag->priority]++;
@@ -2221,7 +2220,7 @@ gtk_text_btree_char_is_invisible (const GtkTextIter *iter)
if (summary->toggle_count & 1)
{
tag = summary->info->tag;
- if (tag->elide_set && tag->values->elide)
+ if (tag->invisible_set && tag->values->invisible)
{
tags[tag->priority] = tag;
tagCnts[tag->priority] += summary->toggle_count;
@@ -2233,7 +2232,7 @@ gtk_text_btree_char_is_invisible (const GtkTextIter *iter)
/*
* Now traverse from highest priority to lowest,
- * take elided value from first odd count (= on)
+ * take invisible value from first odd count (= on)
*/
for (i = numTags-1; i >=0; i--)
@@ -2243,7 +2242,7 @@ gtk_text_btree_char_is_invisible (const GtkTextIter *iter)
/* FIXME not sure this should be if 0 */
#if 0
#ifndef ALWAYS_SHOW_SELECTION
- /* who would make the selection elided? */
+ /* who would make the selection invisible? */
if ((tag == tkxt->seltag)
&& !(tkxt->flags & GOT_FOCUS))
{
@@ -2251,7 +2250,7 @@ gtk_text_btree_char_is_invisible (const GtkTextIter *iter)
}
#endif
#endif
- invisible = tags[i]->values->elide;
+ invisible = tags[i]->values->invisible;
break;
}
}
@@ -2285,8 +2284,8 @@ redisplay_region (GtkTextBTree *tree,
end = tmp;
}
- start_line = gtk_text_iter_get_line (start);
- end_line = gtk_text_iter_get_line (end);
+ start_line = gtk_text_iter_get_text_line (start);
+ end_line = gtk_text_iter_get_text_line (end);
view = tree->views;
while (view != NULL)
@@ -2322,7 +2321,7 @@ redisplay_mark(GtkTextLineSegment *mark)
(GtkTextMark*)mark);
end = iter;
- gtk_text_iter_forward_char(&end);
+ gtk_text_iter_next_char(&end);
gtk_text_btree_invalidate_region(mark->body.mark.tree,
&iter, &end);
@@ -2342,9 +2341,9 @@ ensure_not_off_end(GtkTextBTree *tree,
GtkTextLineSegment *mark,
GtkTextIter *iter)
{
- if (gtk_text_iter_get_line_number(iter) ==
+ if (gtk_text_iter_get_line(iter) ==
gtk_text_btree_line_count(tree))
- gtk_text_iter_backward_char(iter);
+ gtk_text_iter_prev_char(iter);
}
static GtkTextLineSegment*
@@ -2411,8 +2410,8 @@ real_set_mark(GtkTextBTree *tree,
This could hose our iterator... */
gtk_text_btree_unlink_segment(tree, mark,
mark->body.mark.line);
- mark->body.mark.line = gtk_text_iter_get_line(&iter);
- g_assert(mark->body.mark.line == gtk_text_iter_get_line(&iter));
+ mark->body.mark.line = gtk_text_iter_get_text_line(&iter);
+ g_assert(mark->body.mark.line == gtk_text_iter_get_text_line(&iter));
segments_changed(tree); /* make sure the iterator recomputes its
segment */
@@ -2423,7 +2422,7 @@ real_set_mark(GtkTextBTree *tree,
left_gravity,
name);
- mark->body.mark.line = gtk_text_iter_get_line(&iter);
+ mark->body.mark.line = gtk_text_iter_get_text_line(&iter);
if (mark->body.mark.name)
g_hash_table_insert(tree->mark_table,
@@ -2532,6 +2531,10 @@ gtk_text_btree_remove_mark (GtkTextBTree *tree,
if (segment->body.mark.name)
g_hash_table_remove(tree->mark_table, segment->body.mark.name);
mark_segment_unref(segment);
+
+ segment->body.mark.tree = NULL;
+ segment->body.mark.line = NULL;
+
segments_changed(tree);
}
@@ -2602,7 +2605,8 @@ gtk_text_btree_first_could_contain_tag (GtkTextBTree *tree,
/* We know the tag root has instances of the given
tag below it */
-
+
+ continue_outer_loop:
g_assert(node != NULL);
while (node->level > 0)
{
@@ -2611,14 +2615,13 @@ gtk_text_btree_first_could_contain_tag (GtkTextBTree *tree,
while (node != NULL)
{
if (gtk_text_btree_node_has_tag(node, tag))
- goto done;
+ goto continue_outer_loop;
+
node = node->next;
}
g_assert(node != NULL);
}
- done:
-
g_assert(node != NULL); /* The tag summaries said some node had
tag toggles... */
@@ -2933,6 +2936,23 @@ gtk_text_line_byte_has_tag (GtkTextLine *line,
return find_toggle_outside_current_line(line, tree, tag);
}
+gboolean
+gtk_text_line_is_last (GtkTextLine *line)
+{
+ GtkTextBTreeNode *node;
+
+ if (line->next != NULL)
+ return FALSE;
+ else
+ {
+ node = line->parent;
+ while (node != NULL && node->next == NULL)
+ node = node->parent;
+
+ return node == NULL;
+ }
+}
+
GtkTextLine*
gtk_text_line_next (GtkTextLine *line)
{
@@ -3802,6 +3822,7 @@ gtk_text_line_next_could_contain_tag(GtkTextLine *line,
/* We have to find the first sub-node of this node that contains
the target tag. */
+ continue_outer_loop:
while (node->level > 0)
{
g_assert(node != NULL); /* If this fails, it likely means an
@@ -3812,13 +3833,12 @@ gtk_text_line_next_could_contain_tag(GtkTextLine *line,
while (node != NULL)
{
if (gtk_text_btree_node_has_tag(node, tag))
- goto done;
+ goto continue_outer_loop;
node = node->next;
}
g_assert(node != NULL);
}
- done:
g_assert(node != NULL);
g_assert(node->level == 0);
@@ -5649,7 +5669,7 @@ gtk_text_btree_link_segment(GtkTextLineSegment *seg,
GtkTextLine *line;
GtkTextBTree *tree;
- line = gtk_text_iter_get_line(iter);
+ line = gtk_text_iter_get_text_line(iter);
tree = gtk_text_iter_get_btree(iter);
prev = gtk_text_line_segment_split(iter);
@@ -5996,11 +6016,11 @@ gtk_text_btree_node_check_consistency(GtkTextBTreeNode *node)
}
static void
-listify_foreach(gpointer key, gpointer value, gpointer user_data)
+listify_foreach(GtkTextTag *tag, gpointer user_data)
{
GSList** listp = user_data;
- *listp = g_slist_prepend(*listp, value);
+ *listp = g_slist_prepend(*listp, tag);
}
static GSList*