forked from AuroraMiddleware/gtk
gail: Use accessor functions to access GtkEntry
Also, we can't access entry->preedit now. Commented that code until some gail expert can fix it
This commit is contained in:
parent
8c941d2b4e
commit
f2abd656f6
@ -209,6 +209,7 @@ gail_entry_real_initialize (AtkObject *obj,
|
||||
{
|
||||
GtkEntry *entry;
|
||||
GailEntry *gail_entry;
|
||||
gint start_pos, end_pos;
|
||||
|
||||
ATK_OBJECT_CLASS (gail_entry_parent_class)->initialize (obj, data);
|
||||
|
||||
@ -219,8 +220,10 @@ gail_entry_real_initialize (AtkObject *obj,
|
||||
|
||||
entry = GTK_ENTRY (data);
|
||||
text_setup (gail_entry, entry);
|
||||
gail_entry->cursor_position = entry->current_pos;
|
||||
gail_entry->selection_bound = entry->selection_bound;
|
||||
gtk_editable_get_selection_bounds (GTK_EDITABLE (entry),
|
||||
&start_pos, &end_pos);
|
||||
gail_entry->cursor_position = end_pos;
|
||||
gail_entry->selection_bound = start_pos;
|
||||
|
||||
/* Set up signal callbacks */
|
||||
g_signal_connect (data, "insert-text",
|
||||
@ -617,6 +620,7 @@ gail_entry_get_character_extents (AtkText *text,
|
||||
PangoRectangle char_rect;
|
||||
gint index, cursor_index, x_layout, y_layout;
|
||||
const gchar *entry_text;
|
||||
gint start_pos, end_pos;
|
||||
|
||||
widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
|
||||
if (widget == NULL)
|
||||
@ -625,12 +629,17 @@ gail_entry_get_character_extents (AtkText *text,
|
||||
|
||||
entry = GTK_ENTRY (widget);
|
||||
|
||||
gtk_editable_get_selection_bounds (GTK_EDITABLE (entry),
|
||||
&start_pos, &end_pos);
|
||||
gtk_entry_get_layout_offsets (entry, &x_layout, &y_layout);
|
||||
entry_text = gtk_entry_get_text (entry);
|
||||
|
||||
index = g_utf8_offset_to_pointer (entry_text, offset) - entry_text;
|
||||
cursor_index = g_utf8_offset_to_pointer (entry_text, entry->current_pos) - entry_text;
|
||||
cursor_index = g_utf8_offset_to_pointer (entry_text, end_pos) - entry_text;
|
||||
/* FIXME: entry->preedit cannot be accessed directly
|
||||
if (index > cursor_index)
|
||||
index += entry->preedit_length;
|
||||
*/
|
||||
pango_layout_index_to_pos (gtk_entry_get_layout(entry), index, &char_rect);
|
||||
|
||||
gail_misc_get_extents_from_pango_rectangle (widget, &char_rect,
|
||||
@ -669,7 +678,12 @@ gail_entry_get_offset_at_point (AtkText *text,
|
||||
}
|
||||
else
|
||||
{
|
||||
cursor_index = g_utf8_offset_to_pointer (entry_text, entry->current_pos) - entry_text;
|
||||
gint start_pos, end_pos;
|
||||
|
||||
gtk_editable_get_selection_bounds (GTK_EDITABLE (entry),
|
||||
&start_pos, &end_pos);
|
||||
cursor_index = g_utf8_offset_to_pointer (entry_text, end_pos) - entry_text;
|
||||
/* FIXME: entry->preedit_length cannot be accessed directly
|
||||
if (index >= cursor_index && entry->preedit_length)
|
||||
{
|
||||
if (index >= cursor_index + entry->preedit_length)
|
||||
@ -677,6 +691,7 @@ gail_entry_get_offset_at_point (AtkText *text,
|
||||
else
|
||||
index = cursor_index;
|
||||
}
|
||||
*/
|
||||
return g_utf8_pointer_to_offset (entry_text, entry_text + index);
|
||||
}
|
||||
}
|
||||
@ -1158,12 +1173,15 @@ static gboolean
|
||||
check_for_selection_change (GailEntry *entry,
|
||||
GtkEntry *gtk_entry)
|
||||
{
|
||||
gboolean ret_val = FALSE;
|
||||
|
||||
if (gtk_entry->current_pos != gtk_entry->selection_bound)
|
||||
gboolean selected, ret_val = FALSE;
|
||||
gint start_pos, end_pos;
|
||||
|
||||
selected = gtk_editable_get_selection_bounds (GTK_EDITABLE (gtk_entry),
|
||||
&start_pos, &end_pos);
|
||||
if (selected)
|
||||
{
|
||||
if (gtk_entry->current_pos != entry->cursor_position ||
|
||||
gtk_entry->selection_bound != entry->selection_bound)
|
||||
if (end_pos != entry->cursor_position ||
|
||||
start_pos != entry->selection_bound)
|
||||
/*
|
||||
* This check is here as this function can be called
|
||||
* for notification of selection_bound and current_pos.
|
||||
@ -1178,8 +1196,8 @@ check_for_selection_change (GailEntry *entry,
|
||||
/* We had a selection */
|
||||
ret_val = (entry->cursor_position != entry->selection_bound);
|
||||
}
|
||||
entry->cursor_position = gtk_entry->current_pos;
|
||||
entry->selection_bound = gtk_entry->selection_bound;
|
||||
entry->cursor_position = end_pos;
|
||||
entry->selection_bound = start_pos;
|
||||
|
||||
return ret_val;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user