diff --git a/debian/changelog b/debian/changelog index 88e8f68e85..85e9915387 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +gtk+3.0 (3.18.3-3) UNRELEASED; urgency=medium + + * Revert "textbuffer: nicer get_iter functions" and related commits since + this broke the bindings API. (Closes: #804798) + + -- Michael Biebl Thu, 12 Nov 2015 18:48:41 +0100 + gtk+3.0 (3.18.3-2) unstable; urgency=medium * The placesview API was not supposed to be public, so those symbols were diff --git a/debian/patches/001-Revert-textbuffer-nicer-get_iter-functions.patch b/debian/patches/001-Revert-textbuffer-nicer-get_iter-functions.patch new file mode 100644 index 0000000000..d592bb8646 --- /dev/null +++ b/debian/patches/001-Revert-textbuffer-nicer-get_iter-functions.patch @@ -0,0 +1,344 @@ +From 0dc66f5125196ee10c7e851b75f16e9f5669eb49 Mon Sep 17 00:00:00 2001 +From: Matthias Clasen +Date: Thu, 12 Nov 2015 10:34:48 -0500 +Subject: [PATCH 1/2] Revert "textbuffer: nicer get_iter functions" + +This reverts commit cf51c4f6dbd91dae1878a0cb0d08b24c67e15232. + +This change broke binding api. +--- + gtk/gtktextbuffer.c | 95 ++++++++-------------------------- + gtk/gtktextbuffer.h | 34 ++++++------- + testsuite/gtk/textbuffer.c | 123 --------------------------------------------- + 3 files changed, 37 insertions(+), 215 deletions(-) + +diff --git a/gtk/gtktextbuffer.c b/gtk/gtktextbuffer.c +index 7295021..1bf1b68 100644 +--- a/gtk/gtktextbuffer.c ++++ b/gtk/gtktextbuffer.c +@@ -2862,48 +2862,22 @@ gtk_text_buffer_remove_all_tags (GtkTextBuffer *buffer, + * @line_number: line number counting from 0 + * @char_offset: char offset from start of line + * +- * Obtains an iterator pointing to @char_offset within the given line. Note +- * characters, not bytes; UTF-8 may encode one character as multiple bytes. +- * +- * Before the 3.20 version, it was not allowed to pass an invalid location. +- * +- * Since the 3.20 version, if @line_number is greater than the number of lines +- * in the @buffer, the end iterator is returned. And if @char_offset is off the +- * end of the line, the iterator at the end of the line is returned. +- * +- * Returns: whether the exact position has been found (since 3.20). ++ * Obtains an iterator pointing to @char_offset within the given ++ * line. The @char_offset must exist, offsets off the end of the line ++ * are not allowed. Note characters, not bytes; ++ * UTF-8 may encode one character as multiple bytes. + **/ +-gboolean ++void + gtk_text_buffer_get_iter_at_line_offset (GtkTextBuffer *buffer, + GtkTextIter *iter, + gint line_number, + gint char_offset) + { +- GtkTextIter end_line_iter; +- +- g_return_val_if_fail (iter != NULL, FALSE); +- g_return_val_if_fail (GTK_IS_TEXT_BUFFER (buffer), FALSE); +- +- if (line_number >= gtk_text_buffer_get_line_count (buffer)) +- { +- gtk_text_buffer_get_end_iter (buffer, iter); +- return FALSE; +- } +- +- _gtk_text_btree_get_iter_at_line_char (get_btree (buffer), iter, line_number, 0); +- +- end_line_iter = *iter; +- if (!gtk_text_iter_ends_line (&end_line_iter)) +- gtk_text_iter_forward_to_line_end (&end_line_iter); +- +- if (char_offset > gtk_text_iter_get_line_offset (&end_line_iter)) +- { +- *iter = end_line_iter; +- return FALSE; +- } ++ g_return_if_fail (iter != NULL); ++ g_return_if_fail (GTK_IS_TEXT_BUFFER (buffer)); + +- gtk_text_iter_set_line_offset (iter, char_offset); +- return TRUE; ++ _gtk_text_btree_get_iter_at_line_char (get_btree (buffer), ++ iter, line_number, char_offset); + } + + /** +@@ -2914,48 +2888,21 @@ gtk_text_buffer_get_iter_at_line_offset (GtkTextBuffer *buffer, + * @byte_index: byte index from start of line + * + * Obtains an iterator pointing to @byte_index within the given line. +- * @byte_index must be the start of a UTF-8 character. Note bytes, not ++ * @byte_index must be the start of a UTF-8 character, and must not be ++ * beyond the end of the line. Note bytes, not + * characters; UTF-8 may encode one character as multiple bytes. +- * +- * Before the 3.20 version, it was not allowed to pass an invalid location. +- * +- * Since the 3.20 version, if @line_number is greater than the number of lines +- * in the @buffer, the end iterator is returned. And if @byte_index is off the +- * end of the line, the iterator at the end of the line is returned. +- * +- * Returns: whether the exact position has been found (since 3.20). + **/ +-gboolean ++void + gtk_text_buffer_get_iter_at_line_index (GtkTextBuffer *buffer, + GtkTextIter *iter, + gint line_number, + gint byte_index) + { +- GtkTextIter end_line_iter; +- +- g_return_val_if_fail (iter != NULL, FALSE); +- g_return_val_if_fail (GTK_IS_TEXT_BUFFER (buffer), FALSE); +- +- if (line_number >= gtk_text_buffer_get_line_count (buffer)) +- { +- gtk_text_buffer_get_end_iter (buffer, iter); +- return FALSE; +- } +- +- gtk_text_buffer_get_iter_at_line (buffer, iter, line_number); +- +- end_line_iter = *iter; +- if (!gtk_text_iter_ends_line (&end_line_iter)) +- gtk_text_iter_forward_to_line_end (&end_line_iter); +- +- if (byte_index > gtk_text_iter_get_line_index (&end_line_iter)) +- { +- *iter = end_line_iter; +- return FALSE; +- } ++ g_return_if_fail (iter != NULL); ++ g_return_if_fail (GTK_IS_TEXT_BUFFER (buffer)); + +- gtk_text_iter_set_line_index (iter, byte_index); +- return TRUE; ++ _gtk_text_btree_get_iter_at_line_byte (get_btree (buffer), ++ iter, line_number, byte_index); + } + + /** +@@ -2966,18 +2913,16 @@ gtk_text_buffer_get_iter_at_line_index (GtkTextBuffer *buffer, + * + * Initializes @iter to the start of the given line. If @line_number is greater + * than the number of lines in the @buffer, the end iterator is returned. +- * +- * Returns: whether the exact position has been found (since 3.20). + **/ +-gboolean ++void + gtk_text_buffer_get_iter_at_line (GtkTextBuffer *buffer, + GtkTextIter *iter, + gint line_number) + { +- g_return_val_if_fail (iter != NULL, FALSE); +- g_return_val_if_fail (GTK_IS_TEXT_BUFFER (buffer), FALSE); ++ g_return_if_fail (iter != NULL); ++ g_return_if_fail (GTK_IS_TEXT_BUFFER (buffer)); + +- return gtk_text_buffer_get_iter_at_line_offset (buffer, iter, line_number, 0); ++ gtk_text_buffer_get_iter_at_line_offset (buffer, iter, line_number, 0); + } + + /** +diff --git a/gtk/gtktextbuffer.h b/gtk/gtktextbuffer.h +index 8894542..9227be8 100644 +--- a/gtk/gtktextbuffer.h ++++ b/gtk/gtktextbuffer.h +@@ -373,23 +373,23 @@ GtkTextTag *gtk_text_buffer_create_tag (GtkTextBuffer *buffer, + * iterator around using the GtkTextIter operators + */ + GDK_AVAILABLE_IN_ALL +-gboolean gtk_text_buffer_get_iter_at_line_offset (GtkTextBuffer *buffer, +- GtkTextIter *iter, +- gint line_number, +- gint char_offset); +-GDK_AVAILABLE_IN_ALL +-gboolean gtk_text_buffer_get_iter_at_line_index (GtkTextBuffer *buffer, +- GtkTextIter *iter, +- gint line_number, +- gint byte_index); +-GDK_AVAILABLE_IN_ALL +-void gtk_text_buffer_get_iter_at_offset (GtkTextBuffer *buffer, +- GtkTextIter *iter, +- gint char_offset); +-GDK_AVAILABLE_IN_ALL +-gboolean gtk_text_buffer_get_iter_at_line (GtkTextBuffer *buffer, +- GtkTextIter *iter, +- gint line_number); ++void gtk_text_buffer_get_iter_at_line_offset (GtkTextBuffer *buffer, ++ GtkTextIter *iter, ++ gint line_number, ++ gint char_offset); ++GDK_AVAILABLE_IN_ALL ++void gtk_text_buffer_get_iter_at_line_index (GtkTextBuffer *buffer, ++ GtkTextIter *iter, ++ gint line_number, ++ gint byte_index); ++GDK_AVAILABLE_IN_ALL ++void gtk_text_buffer_get_iter_at_offset (GtkTextBuffer *buffer, ++ GtkTextIter *iter, ++ gint char_offset); ++GDK_AVAILABLE_IN_ALL ++void gtk_text_buffer_get_iter_at_line (GtkTextBuffer *buffer, ++ GtkTextIter *iter, ++ gint line_number); + GDK_AVAILABLE_IN_ALL + void gtk_text_buffer_get_start_iter (GtkTextBuffer *buffer, + GtkTextIter *iter); +diff --git a/testsuite/gtk/textbuffer.c b/testsuite/gtk/textbuffer.c +index 37243dc..6e16ff2 100644 +--- a/testsuite/gtk/textbuffer.c ++++ b/testsuite/gtk/textbuffer.c +@@ -1434,128 +1434,6 @@ test_clipboard (void) + g_object_unref (buffer); + } + +-static void +-test_get_iter (void) +-{ +- GtkTextBuffer *buffer; +- GtkTextIter iter; +- gint offset; +- +- buffer = gtk_text_buffer_new (NULL); +- +- /* ß takes 2 bytes in UTF-8 */ +- gtk_text_buffer_set_text (buffer, "ab\nßd\r\nef", -1); +- +- /* Test get_iter_at_line() */ +- g_assert (gtk_text_buffer_get_iter_at_line (buffer, &iter, 0)); +- g_assert (gtk_text_iter_is_start (&iter)); +- +- g_assert (gtk_text_buffer_get_iter_at_line (buffer, &iter, 1)); +- offset = gtk_text_iter_get_offset (&iter); +- g_assert_cmpint (offset, ==, 3); +- +- g_assert (gtk_text_buffer_get_iter_at_line (buffer, &iter, 2)); +- offset = gtk_text_iter_get_offset (&iter); +- g_assert_cmpint (offset, ==, 7); +- +- g_assert (!gtk_text_buffer_get_iter_at_line (buffer, &iter, 3)); +- g_assert (gtk_text_iter_is_end (&iter)); +- +- /* Test get_iter_at_line_offset() */ +- g_assert (gtk_text_buffer_get_iter_at_line_offset (buffer, &iter, 0, 0)); +- g_assert (gtk_text_iter_is_start (&iter)); +- +- g_assert (gtk_text_buffer_get_iter_at_line_offset (buffer, &iter, 0, 1)); +- offset = gtk_text_iter_get_offset (&iter); +- g_assert_cmpint (offset, ==, 1); +- +- g_assert (gtk_text_buffer_get_iter_at_line_offset (buffer, &iter, 0, 2)); +- offset = gtk_text_iter_get_offset (&iter); +- g_assert_cmpint (offset, ==, 2); +- +- g_assert (!gtk_text_buffer_get_iter_at_line_offset (buffer, &iter, 0, 3)); +- offset = gtk_text_iter_get_offset (&iter); +- g_assert_cmpint (offset, ==, 2); +- +- g_assert (gtk_text_buffer_get_iter_at_line_offset (buffer, &iter, 1, 1)); +- offset = gtk_text_iter_get_offset (&iter); +- g_assert_cmpint (offset, ==, 4); +- +- g_assert (gtk_text_buffer_get_iter_at_line_offset (buffer, &iter, 2, 1)); +- offset = gtk_text_iter_get_offset (&iter); +- g_assert_cmpint (offset, ==, 8); +- +- g_assert (gtk_text_buffer_get_iter_at_line_offset (buffer, &iter, 2, 2)); +- g_assert (gtk_text_iter_is_end (&iter)); +- +- g_assert (!gtk_text_buffer_get_iter_at_line_offset (buffer, &iter, 2, 3)); +- g_assert (gtk_text_iter_is_end (&iter)); +- +- g_assert (!gtk_text_buffer_get_iter_at_line_offset (buffer, &iter, 3, 1)); +- g_assert (gtk_text_iter_is_end (&iter)); +- +- /* Test get_iter_at_line_index() */ +- g_assert (gtk_text_buffer_get_iter_at_line_index (buffer, &iter, 0, 0)); +- g_assert (gtk_text_iter_is_start (&iter)); +- +- g_assert (gtk_text_buffer_get_iter_at_line_index (buffer, &iter, 0, 1)); +- offset = gtk_text_iter_get_offset (&iter); +- g_assert_cmpint (offset, ==, 1); +- +- g_assert (gtk_text_buffer_get_iter_at_line_index (buffer, &iter, 0, 2)); +- offset = gtk_text_iter_get_offset (&iter); +- g_assert_cmpint (offset, ==, 2); +- +- g_assert (!gtk_text_buffer_get_iter_at_line_index (buffer, &iter, 0, 3)); +- offset = gtk_text_iter_get_offset (&iter); +- g_assert_cmpint (offset, ==, 2); +- +- g_assert (gtk_text_buffer_get_iter_at_line_index (buffer, &iter, 1, 0)); +- offset = gtk_text_iter_get_offset (&iter); +- g_assert_cmpint (offset, ==, 3); +- +- g_assert (gtk_text_buffer_get_iter_at_line_index (buffer, &iter, 1, 2)); +- offset = gtk_text_iter_get_offset (&iter); +- g_assert_cmpint (offset, ==, 4); +- +- g_assert (gtk_text_buffer_get_iter_at_line_index (buffer, &iter, 1, 3)); +- offset = gtk_text_iter_get_offset (&iter); +- g_assert_cmpint (offset, ==, 5); +- +- g_assert (gtk_text_buffer_get_iter_at_line_index (buffer, &iter, 2, 2)); +- g_assert (gtk_text_iter_is_end (&iter)); +- +- g_assert (!gtk_text_buffer_get_iter_at_line_index (buffer, &iter, 2, 3)); +- g_assert (gtk_text_iter_is_end (&iter)); +- +- g_assert (!gtk_text_buffer_get_iter_at_line_index (buffer, &iter, 3, 1)); +- g_assert (gtk_text_iter_is_end (&iter)); +- +- /* Test get_iter_at_offset() */ +- gtk_text_buffer_get_iter_at_offset (buffer, &iter, 0); +- g_assert (gtk_text_iter_is_start (&iter)); +- +- gtk_text_buffer_get_iter_at_offset (buffer, &iter, 1); +- offset = gtk_text_iter_get_offset (&iter); +- g_assert_cmpint (offset, ==, 1); +- +- gtk_text_buffer_get_iter_at_offset (buffer, &iter, 8); +- offset = gtk_text_iter_get_offset (&iter); +- g_assert_cmpint (offset, ==, 8); +- g_assert (!gtk_text_iter_is_end (&iter)); +- +- gtk_text_buffer_get_iter_at_offset (buffer, &iter, 9); +- g_assert (gtk_text_iter_is_end (&iter)); +- +- gtk_text_buffer_get_iter_at_offset (buffer, &iter, 100); +- g_assert (gtk_text_iter_is_end (&iter)); +- +- gtk_text_buffer_get_iter_at_offset (buffer, &iter, -1); +- g_assert (gtk_text_iter_is_end (&iter)); +- +- g_object_unref (buffer); +-} +- + int + main (int argc, char** argv) + { +@@ -1574,7 +1452,6 @@ main (int argc, char** argv) + g_test_add_func ("/TextBuffer/Fill and Empty", test_fill_empty); + g_test_add_func ("/TextBuffer/Tag", test_tag); + g_test_add_func ("/TextBuffer/Clipboard", test_clipboard); +- g_test_add_func ("/TextBuffer/Get iter", test_get_iter); + + return g_test_run(); + } +-- +2.6.2 + diff --git a/debian/patches/002-Revert-inspector-remove-gtk_text_buffer_get_iter_at_.patch b/debian/patches/002-Revert-inspector-remove-gtk_text_buffer_get_iter_at_.patch new file mode 100644 index 0000000000..2933f3b6f5 --- /dev/null +++ b/debian/patches/002-Revert-inspector-remove-gtk_text_buffer_get_iter_at_.patch @@ -0,0 +1,72 @@ +From 511bd4fee7fa0c2abf394681713c6bce93b99b02 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?S=C3=A9bastien=20Wilmet?= +Date: Thu, 12 Nov 2015 17:23:16 +0100 +Subject: [PATCH 2/2] Revert "inspector: remove + gtk_text_buffer_get_iter_at_line_index() workaround" + +This reverts commit 1536710dbac58f0d46a6c308370e1e3864bf42e0. + +Because of the revert at +commit 0dc66f5125196ee10c7e851b75f16e9f5669eb49. +--- + gtk/inspector/css-editor.c | 37 +++++++++++++++++++++++++++++-------- + 1 file changed, 29 insertions(+), 8 deletions(-) + +diff --git a/gtk/inspector/css-editor.c b/gtk/inspector/css-editor.c +index b11329d..776b3ac 100644 +--- a/gtk/inspector/css-editor.c ++++ b/gtk/inspector/css-editor.c +@@ -249,6 +249,27 @@ text_changed (GtkTextBuffer *buffer, + ce->priv->timeout = g_timeout_add (100, update_timeout, ce); + } + ++/* Safe version of gtk_text_buffer_get_iter_at_line_index(). */ ++static void ++safe_get_iter_at_line_index (GtkTextBuffer *buffer, ++ GtkTextIter *iter, ++ gint line_number, ++ gint byte_index) ++{ ++ if (line_number >= gtk_text_buffer_get_line_count (buffer)) ++ { ++ gtk_text_buffer_get_end_iter (buffer, iter); ++ return; ++ } ++ ++ gtk_text_buffer_get_iter_at_line (buffer, iter, line_number); ++ ++ if (byte_index < gtk_text_iter_get_bytes_in_line (iter)) ++ gtk_text_iter_set_line_index (iter, byte_index); ++ else ++ gtk_text_iter_forward_to_line_end (iter); ++} ++ + static void + show_parsing_error (GtkCssProvider *provider, + GtkCssSection *section, +@@ -259,14 +280,14 @@ show_parsing_error (GtkCssProvider *provider, + const char *tag_name; + GtkTextBuffer *buffer = GTK_TEXT_BUFFER (ce->priv->text); + +- gtk_text_buffer_get_iter_at_line_index (buffer, +- &start, +- gtk_css_section_get_start_line (section), +- gtk_css_section_get_start_position (section)); +- gtk_text_buffer_get_iter_at_line_index (buffer, +- &end, +- gtk_css_section_get_end_line (section), +- gtk_css_section_get_end_position (section)); ++ safe_get_iter_at_line_index (buffer, ++ &start, ++ gtk_css_section_get_start_line (section), ++ gtk_css_section_get_start_position (section)); ++ safe_get_iter_at_line_index (buffer, ++ &end, ++ gtk_css_section_get_end_line (section), ++ gtk_css_section_get_end_position (section)); + + if (g_error_matches (error, GTK_CSS_PROVIDER_ERROR, GTK_CSS_PROVIDER_ERROR_DEPRECATED)) + tag_name = "warning"; +-- +2.6.2 + diff --git a/debian/patches/series b/debian/patches/series index 0d085ed9fb..80dccdf223 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,3 +1,5 @@ +001-Revert-textbuffer-nicer-get_iter-functions.patch +002-Revert-inspector-remove-gtk_text_buffer_get_iter_at_.patch 015_default-fallback-icon-theme.patch 016_no_offscreen_widgets_grabbing.patch 017_no_offscreen_device_grabbing.patch