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",

-- 


Reply via email to