From: Tom Hacohen Date: Thu, 28 Apr 2011 17:50:26 +0000 (+0000) Subject: Elementary entry: Fixed bug with jumping scroller when editing text. X-Git-Tag: v1.0.0~3069 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b8252ceea4ddbf8003329ee807417f1e63dc3b1e;p=platform%2Fupstream%2Felementary.git 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 --- diff --git a/src/lib/elm_entry.c b/src/lib/elm_entry.c index 5afbfc4..187468f 100644 --- a/src/lib/elm_entry.c +++ b/src/lib/elm_entry.c @@ -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; } }