diff --git a/legacy/elementary/data/themes/edc/elm/fileselector.edc b/legacy/elementary/data/themes/edc/elm/fileselector.edc index 78a06b53de..a7e9a1bec9 100644 --- a/legacy/elementary/data/themes/edc/elm/fileselector.edc +++ b/legacy/elementary/data/themes/edc/elm/fileselector.edc @@ -97,6 +97,22 @@ group { name: "elm/fileselector/base/default"; } } part { name: "elm.swallow.filename"; type: SWALLOW; + description { state: "default" 0.0; + fixed: 1 1; + align: 0.5 1.0; + rel1 { + to_y: "elm.swallow.search"; + relative: 0.0 0.0; + offset: 3 -4; + } + rel2 { + to_y: "elm.swallow.search"; + relative: 1.0 0.0; + offset: -4 -4; + } + } + } + part { name: "elm.swallow.search"; type: SWALLOW; description { state: "default" 0.0; fixed: 1 1; align: 0.5 1.0; diff --git a/legacy/elementary/src/lib/elc_fileselector.c b/legacy/elementary/src/lib/elc_fileselector.c index 5a03505d49..d09cfc00af 100644 --- a/legacy/elementary/src/lib/elc_fileselector.c +++ b/legacy/elementary/src/lib/elc_fileselector.c @@ -131,6 +131,7 @@ _elm_fileselector_elm_widget_theme_apply(Eo *obj, Elm_Fileselector_Data *sd) SWALLOW("elm.swallow.path", sd->path_entry); SWALLOW("elm.swallow.filename", sd->name_entry); + SWALLOW("elm.swallow.search", sd->search_entry); snprintf(buf, sizeof(buf), "fileselector/actions/%s", style); SWALLOW("elm.swallow.filters", sd->filter_hoversel); @@ -369,6 +370,8 @@ _ls_filter_cb(void *data, Listing_Request *lreq = data; Elm_Fileselector_Filter *cf; Eina_Bool dir = EINA_FALSE; + char *pch = NULL, *temp = NULL; + char temp_path[EINA_PATH_MAX]; if (!lreq->sd->hidden_visible && info->path[info->name_start] == '.') return EINA_FALSE; @@ -379,6 +382,21 @@ _ls_filter_cb(void *data, if (lreq->sd->only_folder && !dir) return EINA_FALSE; + //Search entry filter + if ((lreq->sd->search_string) && (lreq->sd->search_string[0] != '\0')) + { + strcpy(temp_path, info->path); + pch = strchr(temp_path, '/'); + while (pch != NULL) + { + temp = pch; + pch = strchr(pch + 1, '/'); + } + temp++; + if ((temp) && (lreq->sd->search_string) && (!strstr(temp, lreq->sd->search_string))) + return EINA_FALSE; + } + cf = lreq->sd->current_filter; if (!cf) return EINA_TRUE; @@ -1335,6 +1353,17 @@ _resource_deleted(void *data, int type EINA_UNUSED, void *ev) return ECORE_CALLBACK_PASS_ON; } +static void _preedit_cb(void *data, Evas_Object *obj, + void *event_info EINA_UNUSED) +{ + ELM_FILESELECTOR_DATA_GET(data, sd); + + sd->search_string = elm_entry_entry_get(obj); + + if (sd->search_string && sd->path) + _populate(data, sd->path, NULL, NULL); +} + EOLIAN static void _elm_fileselector_evas_object_smart_add(Eo *obj, Elm_Fileselector_Data *priv) { @@ -1427,6 +1456,20 @@ _elm_fileselector_evas_object_smart_add(Eo *obj, Elm_Fileselector_Data *priv) elm_widget_sub_object_add(obj, en); priv->name_entry = en; + //search entry + en = elm_entry_add(obj); + elm_entry_scrollable_set(en, EINA_TRUE); + elm_widget_mirrored_automatic_set(en, EINA_FALSE); + elm_entry_editable_set(en, EINA_TRUE); + elm_entry_single_line_set(en, EINA_TRUE); + elm_entry_line_wrap_set(en, ELM_WRAP_CHAR); + 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); + + elm_widget_sub_object_add(obj, en); + priv->search_entry = en; + elm_fileselector_buttons_ok_cancel_set(obj, EINA_TRUE); elm_fileselector_is_save_set(obj, EINA_FALSE); diff --git a/legacy/elementary/src/lib/elm_widget_fileselector.h b/legacy/elementary/src/lib/elm_widget_fileselector.h index 6e085e4ed0..cf67ecdb06 100644 --- a/legacy/elementary/src/lib/elm_widget_fileselector.h +++ b/legacy/elementary/src/lib/elm_widget_fileselector.h @@ -27,6 +27,7 @@ struct _Elm_Fileselector_Data Evas_Object *obj; Evas_Object *path_entry; Evas_Object *name_entry; + Evas_Object *search_entry; Evas_Object *files_view; Evas_Object *up_button; Evas_Object *home_button; @@ -46,6 +47,7 @@ struct _Elm_Fileselector_Data Ecore_Idler *populate_idler; const char *path_separator; + const char *search_string; Eio_File *current; Eio_Monitor *monitor;