raster pushed a commit to branch master.

http://git.enlightenment.org/core/elementary.git/commit/?id=b8e6d6a708aa1bde8c3be87556cc6714be4310c1

commit b8e6d6a708aa1bde8c3be87556cc6714be4310c1
Author: Marcel Hollerbach <marcel-hollerb...@t-online.de>
Date:   Wed Jan 7 15:17:46 2015 +0900

    fileselector: added a search icon
    
    Summary:
    fileselector: redirect keystrokes to the searchbar
    
    Keystrokes like a-z A-Z 0-9 are redirected to the searchbar, so you dont
    need to click arround to search files in the fileselector.
    
    The search icon is from ApB (Apostolos B.), thx for that! :)
    
    @feature Improved the searchbar
    
    Reviewers: raster, seoz
    
    Subscribers: ryuan.choi, cedric, seoz
    
    Differential Revision: https://phab.enlightenment.org/D1237
    
    Conflicts:
        src/lib/elc_fileselector.c
---
 data/themes/edc/elm/icon.edc    |   1 +
 data/themes/img/icon_search.png | Bin 0 -> 1782 bytes
 src/lib/elc_fileselector.c      |  42 ++++++++++++++++++++++++++++++++++++++++
 3 files changed, 43 insertions(+)

diff --git a/data/themes/edc/elm/icon.edc b/data/themes/edc/elm/icon.edc
index f07495e..23fc6be 100644
--- a/data/themes/edc/elm/icon.edc
+++ b/data/themes/edc/elm/icon.edc
@@ -86,6 +86,7 @@ IC("edit",        "toolbar/edit",        "icon_edit.png",     
   16, 0);
 IC("refresh",     "toolbar/refresh",     "icon_refresh.png",     16, 0);
 IC("file",        "toolbar/file",        "icon_file.png",        16, 0);
 IC("no_photo",    "photo/no_photo",      "icon_head.png",        16, 0);
+IC("search",      "toolbar/search",      "icon_search.png",      16, 0);
 #undef IC
 
 #define IC(Name, File, Min, Max) \
diff --git a/data/themes/img/icon_search.png b/data/themes/img/icon_search.png
new file mode 100644
index 0000000..b8cafcc
Binary files /dev/null and b/data/themes/img/icon_search.png differ
diff --git a/src/lib/elc_fileselector.c b/src/lib/elc_fileselector.c
index d4b2a73..9a70311 100644
--- a/src/lib/elc_fileselector.c
+++ b/src/lib/elc_fileselector.c
@@ -1180,6 +1180,40 @@ _anchor_clicked(void *data,
    }
 }
 
+static void
+_files_key_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, 
void *event_info)
+{
+     Evas_Event_Key_Down *ev = event_info;
+     Evas_Object *par, *searchbar;
+
+     par = data;
+     searchbar = evas_object_data_get(par, "search");
+
+     if (!searchbar) return;
+
+     if (((ev->string) && *(ev->string) &&
+               (isalpha(*ev->string) ||
+                isdigit(*ev->string))))
+       {
+
+          elm_entry_entry_append(searchbar, ev->string);
+       }
+     else if (ev->string &&
+              *(ev->string) &&
+              !strcmp(ev->key, "BackSpace"))
+       {
+          char buf[PATH_MAX];
+          const char *en;
+          en = elm_entry_entry_get(searchbar);
+          if (strlen(en) > 0)
+            {
+               memmove(buf, en, strlen(en) -1);
+               buf[strlen(en) -1] = '\0';
+               elm_entry_entry_set(searchbar, buf);
+            }
+       }
+}
+
 static Evas_Object *
 _files_list_add(Evas_Object *obj)
 {
@@ -1201,6 +1235,7 @@ _files_list_add(Evas_Object *obj)
      (li, "contract,request", _on_list_contract_req, obj);
    evas_object_smart_callback_add(li, "expanded", _on_list_expanded, obj);
    evas_object_smart_callback_add(li, "contracted", _on_list_contracted, obj);
+   evas_object_event_callback_add(li, EVAS_CALLBACK_KEY_DOWN, _files_key_down, 
obj);
 
    elm_widget_sub_object_add(obj, li);
 
@@ -1227,6 +1262,7 @@ _files_grid_add(Evas_Object *obj)
    evas_object_smart_callback_add(grid, "selected", _on_item_selected, obj);
    evas_object_smart_callback_add(grid, "unselected", _on_item_unselected, 
obj);
    evas_object_smart_callback_add(grid, "activated", _on_item_activated, obj);
+   evas_object_event_callback_add(grid, EVAS_CALLBACK_KEY_DOWN, 
_files_key_down, obj);
 
    elm_widget_sub_object_add(obj, grid);
 
@@ -1468,6 +1504,9 @@ _elm_fileselector_evas_object_smart_add(Eo *obj, 
Elm_Fileselector_Data *priv)
    priv->name_entry = en;
 
    //search entry
+   ic = elm_icon_add(obj);
+   elm_icon_standard_set(ic, "search");
+   evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
    en = elm_entry_add(obj);
    elm_entry_scrollable_set(en, EINA_TRUE);
    elm_widget_mirrored_automatic_set(en, EINA_FALSE);
@@ -1476,9 +1515,12 @@ _elm_fileselector_evas_object_smart_add(Eo *obj, 
Elm_Fileselector_Data *priv)
    elm_entry_line_wrap_set(en, ELM_WRAP_CHAR);
    elm_object_domain_translatable_part_text_set(en, "guide",
                                                 PACKAGE, N_("Search"));
+   elm_object_part_content_set(en, "icon", ic);
+   elm_entry_icon_visible_set(en, EINA_TRUE);
    evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
    evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL);
    evas_object_smart_callback_add(en, "changed", _preedit_cb, obj);
+   evas_object_data_set(obj, "search", en);
 
    elm_widget_sub_object_add(obj, en);
    priv->search_entry = en;

-- 


Reply via email to