summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog12
-rw-r--r--ChangeLog.pre-2-012
-rw-r--r--ChangeLog.pre-2-1012
-rw-r--r--ChangeLog.pre-2-212
-rw-r--r--ChangeLog.pre-2-412
-rw-r--r--ChangeLog.pre-2-612
-rw-r--r--ChangeLog.pre-2-812
-rw-r--r--gtk/gtktextiter.c28
-rw-r--r--gtk/gtktextlayout.c23
9 files changed, 121 insertions, 14 deletions
diff --git a/ChangeLog b/ChangeLog
index 605f1dd4f3..be4b5b2724 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2001-01-04 Havoc Pennington <hp@redhat.com>
+
+ * gtk/gtktextlayout.c (line_display_index_to_iter): if index is
+ equal to the line length, then position iterator before paragraph
+ separators. Fixes crash reported by Mikael Hermansson when
+ pressing left arrow from the start of a line.
+
+ * gtk/gtktextiter.c (iter_set_from_byte_offset): Add g_error
+ about byte indexes off the end
+ (iter_set_from_char_offset): add g_error about char offsets
+ off the end
+
2001-01-03 Havoc Pennington <hp@redhat.com>
* gtk/gtktextbtree.c: Adapt to uscore-ification of gtktextiterprivate
diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0
index 605f1dd4f3..be4b5b2724 100644
--- a/ChangeLog.pre-2-0
+++ b/ChangeLog.pre-2-0
@@ -1,3 +1,15 @@
+2001-01-04 Havoc Pennington <hp@redhat.com>
+
+ * gtk/gtktextlayout.c (line_display_index_to_iter): if index is
+ equal to the line length, then position iterator before paragraph
+ separators. Fixes crash reported by Mikael Hermansson when
+ pressing left arrow from the start of a line.
+
+ * gtk/gtktextiter.c (iter_set_from_byte_offset): Add g_error
+ about byte indexes off the end
+ (iter_set_from_char_offset): add g_error about char offsets
+ off the end
+
2001-01-03 Havoc Pennington <hp@redhat.com>
* gtk/gtktextbtree.c: Adapt to uscore-ification of gtktextiterprivate
diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10
index 605f1dd4f3..be4b5b2724 100644
--- a/ChangeLog.pre-2-10
+++ b/ChangeLog.pre-2-10
@@ -1,3 +1,15 @@
+2001-01-04 Havoc Pennington <hp@redhat.com>
+
+ * gtk/gtktextlayout.c (line_display_index_to_iter): if index is
+ equal to the line length, then position iterator before paragraph
+ separators. Fixes crash reported by Mikael Hermansson when
+ pressing left arrow from the start of a line.
+
+ * gtk/gtktextiter.c (iter_set_from_byte_offset): Add g_error
+ about byte indexes off the end
+ (iter_set_from_char_offset): add g_error about char offsets
+ off the end
+
2001-01-03 Havoc Pennington <hp@redhat.com>
* gtk/gtktextbtree.c: Adapt to uscore-ification of gtktextiterprivate
diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2
index 605f1dd4f3..be4b5b2724 100644
--- a/ChangeLog.pre-2-2
+++ b/ChangeLog.pre-2-2
@@ -1,3 +1,15 @@
+2001-01-04 Havoc Pennington <hp@redhat.com>
+
+ * gtk/gtktextlayout.c (line_display_index_to_iter): if index is
+ equal to the line length, then position iterator before paragraph
+ separators. Fixes crash reported by Mikael Hermansson when
+ pressing left arrow from the start of a line.
+
+ * gtk/gtktextiter.c (iter_set_from_byte_offset): Add g_error
+ about byte indexes off the end
+ (iter_set_from_char_offset): add g_error about char offsets
+ off the end
+
2001-01-03 Havoc Pennington <hp@redhat.com>
* gtk/gtktextbtree.c: Adapt to uscore-ification of gtktextiterprivate
diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4
index 605f1dd4f3..be4b5b2724 100644
--- a/ChangeLog.pre-2-4
+++ b/ChangeLog.pre-2-4
@@ -1,3 +1,15 @@
+2001-01-04 Havoc Pennington <hp@redhat.com>
+
+ * gtk/gtktextlayout.c (line_display_index_to_iter): if index is
+ equal to the line length, then position iterator before paragraph
+ separators. Fixes crash reported by Mikael Hermansson when
+ pressing left arrow from the start of a line.
+
+ * gtk/gtktextiter.c (iter_set_from_byte_offset): Add g_error
+ about byte indexes off the end
+ (iter_set_from_char_offset): add g_error about char offsets
+ off the end
+
2001-01-03 Havoc Pennington <hp@redhat.com>
* gtk/gtktextbtree.c: Adapt to uscore-ification of gtktextiterprivate
diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6
index 605f1dd4f3..be4b5b2724 100644
--- a/ChangeLog.pre-2-6
+++ b/ChangeLog.pre-2-6
@@ -1,3 +1,15 @@
+2001-01-04 Havoc Pennington <hp@redhat.com>
+
+ * gtk/gtktextlayout.c (line_display_index_to_iter): if index is
+ equal to the line length, then position iterator before paragraph
+ separators. Fixes crash reported by Mikael Hermansson when
+ pressing left arrow from the start of a line.
+
+ * gtk/gtktextiter.c (iter_set_from_byte_offset): Add g_error
+ about byte indexes off the end
+ (iter_set_from_char_offset): add g_error about char offsets
+ off the end
+
2001-01-03 Havoc Pennington <hp@redhat.com>
* gtk/gtktextbtree.c: Adapt to uscore-ification of gtktextiterprivate
diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8
index 605f1dd4f3..be4b5b2724 100644
--- a/ChangeLog.pre-2-8
+++ b/ChangeLog.pre-2-8
@@ -1,3 +1,15 @@
+2001-01-04 Havoc Pennington <hp@redhat.com>
+
+ * gtk/gtktextlayout.c (line_display_index_to_iter): if index is
+ equal to the line length, then position iterator before paragraph
+ separators. Fixes crash reported by Mikael Hermansson when
+ pressing left arrow from the start of a line.
+
+ * gtk/gtktextiter.c (iter_set_from_byte_offset): Add g_error
+ about byte indexes off the end
+ (iter_set_from_char_offset): add g_error about char offsets
+ off the end
+
2001-01-03 Havoc Pennington <hp@redhat.com>
* gtk/gtktextbtree.c: Adapt to uscore-ification of gtktextiterprivate
diff --git a/gtk/gtktextiter.c b/gtk/gtktextiter.c
index e2e0f44cf9..c085fb3266 100644
--- a/gtk/gtktextiter.c
+++ b/gtk/gtktextiter.c
@@ -92,12 +92,14 @@ iter_set_from_byte_offset (GtkTextRealIter *iter,
{
iter_set_common (iter, line);
- _gtk_text_line_byte_locate (iter->line,
- byte_offset,
- &iter->segment,
- &iter->any_segment,
- &iter->segment_byte_offset,
- &iter->line_byte_offset);
+ if (!_gtk_text_line_byte_locate (iter->line,
+ byte_offset,
+ &iter->segment,
+ &iter->any_segment,
+ &iter->segment_byte_offset,
+ &iter->line_byte_offset))
+ g_error ("Byte index %d is off the end of the line",
+ byte_offset);
}
static void
@@ -107,12 +109,14 @@ iter_set_from_char_offset (GtkTextRealIter *iter,
{
iter_set_common (iter, line);
- _gtk_text_line_char_locate (iter->line,
- char_offset,
- &iter->segment,
- &iter->any_segment,
- &iter->segment_char_offset,
- &iter->line_char_offset);
+ if (!_gtk_text_line_char_locate (iter->line,
+ char_offset,
+ &iter->segment,
+ &iter->any_segment,
+ &iter->segment_char_offset,
+ &iter->line_char_offset))
+ g_error ("Char offset %d is off the end of the line",
+ char_offset);
}
static void
diff --git a/gtk/gtktextlayout.c b/gtk/gtktextlayout.c
index 458142dec5..035d4935a8 100644
--- a/gtk/gtktextlayout.c
+++ b/gtk/gtktextlayout.c
@@ -1929,6 +1929,8 @@ line_display_index_to_iter (GtkTextLayout *layout,
gint index,
gint trailing)
{
+ gint line_len;
+
if (index >= display->insert_index + layout->preedit_len)
index -= layout->preedit_len;
else if (index > display->insert_index)
@@ -1937,8 +1939,25 @@ line_display_index_to_iter (GtkTextLayout *layout,
trailing = 0;
}
- _gtk_text_btree_get_iter_at_line (_gtk_text_buffer_get_btree (layout->buffer),
- iter, display->line, index);
+ line_len = _gtk_text_line_byte_count (display->line);
+ g_assert (index <= line_len);
+
+ if (index < line_len)
+ _gtk_text_btree_get_iter_at_line (_gtk_text_buffer_get_btree (layout->buffer),
+ iter, display->line, index);
+ else
+ {
+ /* Clamp to end of line - really this clamping should have been done
+ * before here, maybe in Pango, this is a broken band-aid I think
+ */
+ g_assert (index == line_len);
+
+ _gtk_text_btree_get_iter_at_line (_gtk_text_buffer_get_btree (layout->buffer),
+ iter, display->line, 0);
+ gtk_text_iter_forward_to_delimiters (iter);
+ }
+
+ /* FIXME should this be cursor positions? */
gtk_text_iter_forward_chars (iter, trailing);
}