[gtk] textbuffer: Be careful with tags when copying
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk] textbuffer: Be careful with tags when copying
- Date: Sun, 2 Aug 2020 17:55:42 +0000 (UTC)
commit 0add6268224e705f6e3f8f26289846e046098a81
Author: Matthias Clasen <mclasen redhat com>
Date: Sun Aug 2 13:54:06 2020 -0400
textbuffer: Be careful with tags when copying
We can only insert tags in the buffer if they come
from the same GtkTextTagTable as the buffer uses.
If that is not the case, paste the text without tags.
Fixes: #2991
gtk/gtktextbuffer.c | 39 +++++++++++++++++++--------------------
1 file changed, 19 insertions(+), 20 deletions(-)
---
diff --git a/gtk/gtktextbuffer.c b/gtk/gtktextbuffer.c
index 3e7e12c0fa..1f616bdce1 100644
--- a/gtk/gtktextbuffer.c
+++ b/gtk/gtktextbuffer.c
@@ -1605,15 +1605,15 @@ insert_range_not_inside_self (GtkTextBuffer *buffer,
GtkTextIter end = *orig_end;
GtkTextIter range_start;
GtkTextIter range_end;
-
+
if (gtk_text_iter_equal (orig_start, orig_end))
return;
-
+
gtk_text_iter_order (&start, &end);
range_start = start;
- range_end = start;
-
+ range_end = start;
+
while (TRUE)
{
int start_offset;
@@ -1621,12 +1621,12 @@ insert_range_not_inside_self (GtkTextBuffer *buffer,
GSList *tags;
GSList *tmp_list;
Range *r;
-
+
if (gtk_text_iter_equal (&range_start, &end))
break; /* All done */
g_assert (gtk_text_iter_compare (&range_start, &end) < 0);
-
+
gtk_text_iter_forward_to_tag_toggle (&range_end, NULL);
g_assert (!gtk_text_iter_equal (&range_start, &range_end));
@@ -1634,33 +1634,32 @@ insert_range_not_inside_self (GtkTextBuffer *buffer,
/* Clamp to the end iterator */
if (gtk_text_iter_compare (&range_end, &end) > 0)
range_end = end;
-
+
/* We have a range with unique tags; insert it, and
* apply all tags.
*/
start_offset = gtk_text_iter_get_offset (iter);
r = save_range (&range_start, &range_end, &end);
-
+
insert_range_untagged (buffer, iter, &range_start, &range_end, interactive);
restore_range (r);
r = NULL;
-
- gtk_text_buffer_get_iter_at_offset (buffer, &start_iter, start_offset);
-
- tags = gtk_text_iter_get_tags (&range_start);
- tmp_list = tags;
- while (tmp_list != NULL)
+
+ if (gtk_text_buffer_get_tag_table (gtk_text_iter_get_buffer (orig_start)) ==
gtk_text_buffer_get_tag_table (buffer))
{
- gtk_text_buffer_apply_tag (buffer,
- tmp_list->data,
- &start_iter,
- iter);
+ gtk_text_buffer_get_iter_at_offset (buffer, &start_iter, start_offset);
- tmp_list = tmp_list->next;
+ tags = gtk_text_iter_get_tags (&range_start);
+ tmp_list = tags;
+ while (tmp_list != NULL)
+ {
+ gtk_text_buffer_apply_tag (buffer, tmp_list->data, &start_iter, iter);
+ tmp_list = tmp_list->next;
+ }
+ g_slist_free (tags);
}
- g_slist_free (tags);
range_start = range_end;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]