diff options
-rw-r--r-- | ChangeLog | 12 | ||||
-rw-r--r-- | ChangeLog.pre-2-0 | 12 | ||||
-rw-r--r-- | ChangeLog.pre-2-10 | 12 | ||||
-rw-r--r-- | ChangeLog.pre-2-2 | 12 | ||||
-rw-r--r-- | ChangeLog.pre-2-4 | 12 | ||||
-rw-r--r-- | ChangeLog.pre-2-6 | 12 | ||||
-rw-r--r-- | ChangeLog.pre-2-8 | 12 | ||||
-rw-r--r-- | gtk/gtktextiter.c | 28 | ||||
-rw-r--r-- | gtk/gtktextlayout.c | 23 |
9 files changed, 121 insertions, 14 deletions
@@ -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); } |