summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gmail.com>2020-09-09 10:54:07 +0000
committerEmmanuele Bassi <ebassi@gmail.com>2020-09-09 10:54:07 +0000
commitdf7cbdfff4fe24fb92a162b119095e3afe8404a4 (patch)
tree2a35508b3dd8ba6e17db4b1c5584e0e5b8c9ac07
parentb3d3d81c8260eb83fcf61fa0e40b830faf17df8d (diff)
parentf4b410daa751aa85997cd530131b81e8d7e63ff7 (diff)
downloadgtk+-df7cbdfff4fe24fb92a162b119095e3afe8404a4.tar.gz
Merge branch 'issue-3140' into 'master'
Make sure we don't call back into GtkEntryBuffer Closes #3140 See merge request GNOME/gtk!2549
-rw-r--r--gtk/gtkpasswordentrybuffer.c27
1 files changed, 17 insertions, 10 deletions
diff --git a/gtk/gtkpasswordentrybuffer.c b/gtk/gtkpasswordentrybuffer.c
index 05844d2fc5..2c97417f26 100644
--- a/gtk/gtkpasswordentrybuffer.c
+++ b/gtk/gtkpasswordentrybuffer.c
@@ -122,6 +122,21 @@ gtk_password_entry_buffer_real_insert_text (GtkEntryBuffer *buffer,
return n_chars;
}
+static void
+gtk_password_entry_buffer_real_deleted_text (GtkEntryBuffer *buffer,
+ guint position,
+ guint n_chars)
+{
+ GtkPasswordEntryBuffer *self = GTK_PASSWORD_ENTRY_BUFFER (buffer);
+
+ gsize start = g_utf8_offset_to_pointer (self->text, position) - self->text;
+ gsize end = g_utf8_offset_to_pointer (self->text, position + n_chars) - self->text;
+
+ memmove (self->text + start, self->text + end, self->text_bytes + 1 - end);
+ self->text_chars -= n_chars;
+ self->text_bytes -= (end - start);
+}
+
static guint
gtk_password_entry_buffer_real_delete_text (GtkEntryBuffer *buffer,
guint position,
@@ -135,16 +150,7 @@ gtk_password_entry_buffer_real_delete_text (GtkEntryBuffer *buffer,
n_chars = self->text_chars - position;
if (n_chars > 0)
- {
- gsize start = g_utf8_offset_to_pointer (self->text, position) - self->text;
- gsize end = g_utf8_offset_to_pointer (self->text, position + n_chars) - self->text;
-
- memmove (self->text + start, self->text + end, self->text_bytes + 1 - end);
- self->text_chars -= n_chars;
- self->text_bytes -= (end - start);
-
- gtk_entry_buffer_emit_deleted_text (buffer, position, n_chars);
- }
+ gtk_entry_buffer_emit_deleted_text (buffer, position, n_chars);
return n_chars;
}
@@ -175,6 +181,7 @@ gtk_password_entry_buffer_class_init (GtkPasswordEntryBufferClass *klass)
buffer_class->get_length = gtk_password_entry_buffer_real_get_length;
buffer_class->insert_text = gtk_password_entry_buffer_real_insert_text;
buffer_class->delete_text = gtk_password_entry_buffer_real_delete_text;
+ buffer_class->deleted_text = gtk_password_entry_buffer_real_deleted_text;
}
static void