Elementary entry: Fixed bug with jumping scroller when editing text.

Get cursor position only when needed, don't get it in advance, cache and
then find out it's not correct because we already moved the entry 10
10 times since :)

SVN revision: 59020
This commit is contained in:
Tom Hacohen 2011-04-28 17:50:26 +00:00
parent 524096648e
commit ec3d7792e2
1 changed files with 13 additions and 10 deletions

View File

@ -116,7 +116,6 @@ struct _Widget_Data
Elm_Text_Format format;
Evas_Coord lastw;
Evas_Coord downx, downy;
Evas_Coord cx, cy, cw, ch;
Eina_List *items;
Eina_List *item_providers;
Eina_List *text_filters;
@ -585,6 +584,7 @@ _elm_win_recalc_job(void *data)
Evas_Coord minh = -1, resw = -1, minw = -1;
if (!wd) return;
wd->deferred_recalc_job = NULL;
evas_object_geometry_get(wd->ent, NULL, NULL, &resw, NULL);
edje_object_size_min_restricted_calc(wd->ent, &minw, &minh, resw, 0);
elm_coords_finger_size_adjust(1, &minw, 1, &minh);
@ -602,7 +602,12 @@ _elm_win_recalc_job(void *data)
evas_object_size_hint_max_set(data, minw, minh);
if (wd->deferred_cur)
elm_widget_show_region_set(data, wd->cx, wd->cy, wd->cw, wd->ch);
{
Evas_Coord cx, cy, cw, ch;
edje_object_part_text_cursor_geometry_get(wd->ent, "elm.text",
&cx, &cy, &cw, &ch);
elm_widget_show_region_set(data, cx, cy, cw, ch);
}
}
static void
@ -1244,21 +1249,19 @@ static void
_signal_cursor_changed(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__)
{
Widget_Data *wd = elm_widget_data_get(data);
Evas_Coord cx, cy, cw, ch;
if (!wd) return;
evas_object_smart_callback_call(data, SIG_CURSOR_CHANGED, NULL);
edje_object_part_text_cursor_geometry_get(wd->ent, "elm.text",
&cx, &cy, &cw, &ch);
wd->cursor_pos = edje_object_part_text_cursor_pos_get(wd->ent, "elm.text", EDJE_CURSOR_MAIN);
if (!wd->deferred_recalc_job)
elm_widget_show_region_set(data, cx, cy, cw, ch);
{
Evas_Coord cx, cy, cw, ch;
edje_object_part_text_cursor_geometry_get(wd->ent, "elm.text",
&cx, &cy, &cw, &ch);
elm_widget_show_region_set(data, cx, cy, cw, ch);
}
else
{
wd->deferred_cur = EINA_TRUE;
wd->cx = cx;
wd->cy = cy;
wd->cw = cw;
wd->ch = ch;
}
}