[clutter] a11y: expose the text with password-char
- From: Alejandro Piñeiro Iglesias <apinheiro src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [clutter] a11y: expose the text with password-char
- Date: Tue, 5 Mar 2013 19:22:28 +0000 (UTC)
commit ccea1644ba81593fd19a772048e91909962ef570
Author: Alejandro Piñeiro <apinheiro igalia com>
Date: Mon Sep 24 17:24:54 2012 +0200
a11y: expose the text with password-char
Text exposed by the AtkText methods should be the text
displayed to the user (like the internal method
clutter_text_get_display_text). So it should use the password-char
if it is being used.
This is also a security concern.
clutter/cally/cally-text.c | 37 ++++++++++++++++++++++++++++---------
1 files changed, 28 insertions(+), 9 deletions(-)
---
diff --git a/clutter/cally/cally-text.c b/clutter/cally/cally-text.c
index c12aa4f..cf6dfce 100644
--- a/clutter/cally/cally-text.c
+++ b/clutter/cally/cally-text.c
@@ -316,9 +316,9 @@ cally_text_real_initialize(AtkObject *obj,
_check_activate_action (cally_text, clutter_text);
if (clutter_text_get_password_char (clutter_text) != 0)
- obj->role = ATK_ROLE_PASSWORD_TEXT;
+ atk_object_set_role (obj, ATK_ROLE_PASSWORD_TEXT);
else
- obj->role = ATK_ROLE_TEXT;
+ atk_object_set_role (obj, ATK_ROLE_TEXT);
}
static AtkStateSet*
@@ -1077,13 +1077,28 @@ cally_text_get_text (AtkText *text,
gint end_offset)
{
ClutterActor *actor = NULL;
+ PangoLayout *layout = NULL;
+ const gchar *string = NULL;
+ gint character_count = 0;
actor = CALLY_GET_CLUTTER_ACTOR (text);
if (actor == NULL) /* Object is defunct */
return NULL;
- return clutter_text_get_chars (CLUTTER_TEXT (actor),
- start_offset, end_offset);
+ /* we use the pango layout instead of clutter_text_get_chars because
+ it take into account password-char */
+
+ layout = clutter_text_get_layout (CLUTTER_TEXT (actor));
+ string = pango_layout_get_text (layout);
+ character_count = pango_layout_get_character_count (layout);
+
+ if (end_offset == -1 || end_offset > character_count)
+ end_offset = character_count;
+
+ if (string[0] == 0)
+ return g_strdup("");
+ else
+ return g_utf8_substring (string, start_offset, end_offset);
}
static gunichar
@@ -1091,15 +1106,21 @@ cally_text_get_character_at_offset (AtkText *text,
gint offset)
{
ClutterActor *actor = NULL;
- gchar *string = NULL;
+ const gchar *string = NULL;
gchar *index = NULL;
gunichar unichar;
+ PangoLayout *layout = NULL;
actor = CALLY_GET_CLUTTER_ACTOR (text);
if (actor == NULL) /* State is defunct */
return '\0';
- string = clutter_text_get_chars (CLUTTER_TEXT (actor), 0, -1);
+ /* we use the pango layout instead of clutter_text_get_chars because
+ it take into account password-char */
+
+ layout = clutter_text_get_layout (CLUTTER_TEXT (actor));
+ string = pango_layout_get_text (layout);
+
if (offset >= g_utf8_strlen (string, -1))
{
unichar = '\0';
@@ -1108,11 +1129,9 @@ cally_text_get_character_at_offset (AtkText *text,
{
index = g_utf8_offset_to_pointer (string, offset);
- unichar = g_utf8_get_char(index);
+ unichar = g_utf8_get_char (index);
}
- g_free(string);
-
return unichar;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]