[gtk+] entry: Compute selection range correctly



commit a222aa66d5b7811798c3a98b0b0694de6fe4ec49
Author: Benjamin Otte <otte redhat com>
Date:   Wed Jan 27 02:07:35 2016 +0100

    entry: Compute selection range correctly
    
    gtk_editable_get_selection_bounds() returns UTF-8 character offsets,
    but gdk_pango_layout_get_clip_region() wants byte ranges, so convert
    from one to the other.
    With English, this is especially visible for passwords, which use ●
    as the invisible character.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=761128

 gtk/gtkentry.c |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)
---
diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c
index 1d11bbe..2854d94 100644
--- a/gtk/gtkentry.c
+++ b/gtk/gtkentry.c
@@ -6373,11 +6373,14 @@ gtk_entry_draw_text (GtkEntry *entry,
 
   if (gtk_editable_get_selection_bounds (GTK_EDITABLE (entry), &start_pos, &end_pos))
     {
+      const char *text = pango_layout_get_text (layout);
+      gint start_index = g_utf8_offset_to_pointer (text, start_pos) - text;
+      gint end_index = g_utf8_offset_to_pointer (text, end_pos) - text;
       cairo_region_t *clip;
       gint range[2];
 
-      range[0] = MIN (start_pos, end_pos);
-      range[1] = MAX (start_pos, end_pos);
+      range[0] = MIN (start_index, end_index);
+      range[1] = MAX (start_index, end_index);
 
       gtk_style_context_save_to_node (context, priv->selection_node);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]