hermet pushed a commit to branch master. http://git.enlightenment.org/tools/enventor.git/commit/?id=d93a8b270980a14828a9ae5101dc56ab5d30f9f3
commit d93a8b270980a14828a9ae5101dc56ab5d30f9f3 Author: ChunEon Park <her...@hermet.pe.kr> Date: Sat Mar 8 02:49:06 2014 +0900 search - +find backward --- src/bin/search.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 49 insertions(+), 2 deletions(-) diff --git a/src/bin/search.c b/src/bin/search.c index e32ec81..a5663eb 100644 --- a/src/bin/search.c +++ b/src/bin/search.c @@ -133,7 +133,53 @@ find_forward_proc(search_data *sd) static void find_backward_proc(search_data *sd) { - //TODO: + const char *find = elm_entry_entry_get(sd->en_find); + if (!find) return; + + char buf[256]; + Eina_Bool need_iterate = EINA_TRUE; + int len; + + const char *text = elm_entry_entry_get(sd->entry); + char *utf8 = elm_entry_markup_to_utf8(text); + + //get the character position begun with searching. + if (sd->pos == -1) + { + sd->pos = elm_entry_cursor_pos_get(sd->entry); + } + else + { + len = strlen(utf8); + if (sd->pos == len) need_iterate = EINA_FALSE; + } + + char *prev = NULL; + char *s = utf8; + + while (s = strstr(s, find)) + { + if ((s - utf8) >= sd->pos) break; + prev = s; + s++; + } + + //No found. Need to iterate finding? + if ((!prev) && need_iterate) + { + sd->pos = len; + find_backward_proc(sd); + free(utf8); + return; + } + + //Got you! + sd->pos = prev - utf8; + elm_entry_select_none(sd->entry); + elm_entry_select_region_set(sd->entry, sd->pos, sd->pos + strlen(find)); + sd->found = EINA_TRUE; + + free(utf8); } static Eina_Bool @@ -158,6 +204,7 @@ backward_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, { search_data *sd = data; find_backward_proc(sd); + sd->forward = EINA_FALSE; } static void @@ -186,6 +233,7 @@ forward_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, { search_data *sd = data; find_forward_proc(sd); + sd->forward = EINA_TRUE; } static void @@ -278,7 +326,6 @@ search_open() //Button (backward) Evas_Object *btn_backward = elm_button_add(layout); elm_object_text_set(btn_backward, "Backward"); - elm_object_disabled_set(btn_backward, EINA_TRUE); evas_object_smart_callback_add(btn_backward, "clicked", backward_clicked_cb, sd); elm_object_part_content_set(layout, "elm.swallow.backward", --