Bug 988 - cursor position wrong with multibyte invisible char

* clutter/clutter-entry.c: (clutter_entry_ensure_cursor_position):
        Fix cursor position calculation when using invisible text
This commit is contained in:
Chris Lord 2008-06-24 10:22:53 +00:00
parent 00efebe00a
commit bc55368304
2 changed files with 30 additions and 4 deletions

View File

@ -1,3 +1,10 @@
2008-06-24 Chris Lord <chris@openedhand.com>
Bug 988 - cursor position wrong with multibyte invisible char
* clutter/clutter-entry.c: (clutter_entry_ensure_cursor_position):
Fix cursor position calculation when using invisible text
2008-06-23 Emmanuele Bassi <ebassi@openedhand.com>
* clutter/x11/clutter-event-x11.c (event_translate): Set the

View File

@ -4,7 +4,7 @@
* An OpenGL based 'interactive canvas' library.
*
* Authored By Matthew Allum <mallum@openedhand.com>
* Neil Jagdish Patel <njp@o-hand.com
* Neil Jagdish Patel <njp@o-hand.com>
*
* Copyright (C) 2006 OpenedHand
*
@ -350,13 +350,32 @@ clutter_entry_ensure_cursor_position (ClutterEntry *entry)
ClutterEntryPrivate *priv;
gint index_;
PangoRectangle rect;
gint priv_char_bytes;
priv = entry->priv;
if (priv->position == -1)
index_ = strlen (priv->text);
/* If characters are invisible, get the byte-length of the invisible
* character. If priv_char is 0, we use '*', which is ASCII (1 byte).
*/
if (!priv->text_visible && priv->priv_char)
priv_char_bytes = g_unichar_to_utf8 (priv->priv_char, NULL);
else
index_ = offset_to_bytes (priv->text, priv->position);
priv_char_bytes = 1;
if (priv->position == -1)
{
if (priv->text_visible)
index_ = strlen (priv->text);
else
index_ = priv->n_chars * priv_char_bytes;
}
else
{
if (priv->text_visible)
index_ = offset_to_bytes (priv->text, priv->position);
else
index_ = priv->position * priv_char_bytes;
}
pango_layout_get_cursor_pos (priv->layout, index_, &rect, NULL);
priv->cursor_pos.x = rect.x / PANGO_SCALE;