if so, sorry, i don't agree on your patch. the reason.
1. app may wanna show the messages if the user typed the incorrect file path. 2. This changed the behavior. Enventor has broken caused of this patch. ------------------------------------ -Regards, Hermet- -----Original Message----- From: "ryuan Choi"<ryuan.c...@gmail.com> To: "Enlightenment developer list"<enlightenment-devel@lists.sourceforge.net>; Cc: <enlightenment-...@lists.sourceforge.net>; Sent: 2013-09-11 (수) 19:42:42 Subject: Re: [E-devel] [EGIT] [core/elementary] master 01/01: elc_fileselector : Select path which user typed on path_entry. Yes, it doesn't send "selected" signal if wrong path is given in path entry. Regards, Ryuan Choi 2013/9/11 ChunEon Park <hermet>@naver.com> > Hi, As far as i understood your patch, > Now, it doesn't send "selected" signal to apps if the path is not exist? > > ------------------------------------ > -Regards, Hermet- > > -----Original Message----- > From: "Ryuan Choi - Enlightenment Git"<no-reply>@enlightenment.org> > To: <enlightenment-git>@lists.sourceforge.net>; > Cc: > Sent: 2013-09-10 (화) 19:12:21 > Subject: [EGIT] [core/elementary] master 01/01: elc_fileselector : Select > path which user typed on path_entry. > > ryuan pushed a commit to branch master. > > commit 74f308df90026fca68ef366f68a12ce9741b2b2b > Author: Ryuan Choi <ryuan.choi>@gmail.com> > Date: Tue Sep 10 18:47:30 2013 +0900 > > elc_fileselector : Select path which user typed on path_entry. > > Summary: > In fileselector, user can write directory path or file path which they > want. > If then, fileselector navigates path when directory path is given, > but just send a "selected" signal without real selection when file > path or wrong path is given. > > With this path, > - fileselector will navigate (if needed) and select file with signal > when file path is given. > - no action when wrong path is given. > --- > ChangeLog 5 ++ > NEWS 1 + > src/lib/elc_fileselector.c 149 > ++++++++++++++++++++++++++++---------- > src/lib/elm_widget_fileselector.h 1 + > 4 files changed, 118 insertions(+), 38 deletions(-) > > diff --git a/ChangeLog b/ChangeLog > index d957f29..9b701ef 100644 > --- a/ChangeLog > +++ b/ChangeLog > @@ -1598,3 +1598,8 @@ > > * ProgressBar: Added support for more than one progress status > in a > single progress bar > + > +2013-09-10 Ryuan Choi (ryuan) > + > + * elc_fileselector : Navigate (if needed) and select file with > "selected" > + signal when user typed file path on path_entry. > diff --git a/NEWS b/NEWS > index 2a3ed46..b14ad6c 100644 > --- a/NEWS > +++ b/NEWS > @@ -277,6 +277,7 @@ Fixes: > This prevents the asynchronous states between ime and conformant. > * Flip : Fix the flip page to not flip on a direction if the direction > is disabled. > * Spinner : change part name to access.text from access_text on > default style. > + * Fix fileselector only send "selected" signal without selection when > file path is typed on the path entry. > > Removals: > > diff --git a/src/lib/elc_fileselector.c b/src/lib/elc_fileselector.c > index ef73b6a..742ac30 100644 > --- a/src/lib/elc_fileselector.c > +++ b/src/lib/elc_fileselector.c > @@ -393,6 +393,7 @@ _ls_main_cb(void *data, > const Eina_File_Direct_Info *info) > { > Listing_Request *lreq = data; > + Elm_Object_Item *item; > int itcn = ELM_FILE_UNKNOW; > > if (eio_file_check(handler)) return; > @@ -416,16 +417,26 @@ _ls_main_cb(void *data, > } > > if (lreq->sd->mode == ELM_FILESELECTOR_LIST) > - elm_genlist_item_sorted_insert(lreq->sd->files_list, list_itc[itcn], > - eina_stringshare_add(info->path), > - lreq->parent_it, > - ((lreq->sd->expand) && (itcn == > ELM_DIRECTORY)) > - ? ELM_GENLIST_ITEM_TREE : > ELM_GENLIST_ITEM_NONE, > - _file_list_cmp, NULL, NULL); > + { > + item = elm_genlist_item_sorted_insert(lreq->sd->files_list, > list_itc[itcn], > + > eina_stringshare_add(info->path), > + lreq->parent_it, > + ((lreq->sd->expand) && > (itcn == ELM_DIRECTORY)) > + ? ELM_GENLIST_ITEM_TREE : > ELM_GENLIST_ITEM_NONE, > + _file_list_cmp, NULL, NULL); > + > + if (lreq->selected && !strcmp(info->path, lreq->selected)) > + elm_genlist_item_selected_set(item, EINA_TRUE); > + } > else if (lreq->sd->mode == ELM_FILESELECTOR_GRID) > - elm_gengrid_item_sorted_insert(lreq->sd->files_grid, grid_itc[itcn], > - eina_stringshare_add(info->path), > - _file_grid_cmp, NULL, NULL); > + { > + item = elm_gengrid_item_sorted_insert(lreq->sd->files_grid, > grid_itc[itcn], > + > eina_stringshare_add(info->path), > + _file_grid_cmp, NULL, NULL); > + > + if (lreq->selected && !strcmp(info->path, lreq->selected)) > + elm_gengrid_item_selected_set(item, EINA_TRUE); > + } > } > > static void > @@ -434,6 +445,7 @@ _listing_request_cleanup(Listing_Request *lreq) > EINA_REFCOUNT_UNREF(lreq->sd) _elm_fileselector_smart_del_do(lreq->sd); > > eina_stringshare_del(lreq->path); > + eina_stringshare_del(lreq->selected); > free(lreq); > } > > @@ -468,7 +480,8 @@ _ls_error_cb(void *data, Eio_File *handler, int error > __UNUSED__) > static void > _populate(Evas_Object *obj, > const char *path, > - Elm_Object_Item *parent_it) > + Elm_Object_Item *parent_it, > + const char *selected) > { > ELM_FILESELECTOR_DATA_GET(obj, sd); > if (!path) return; > @@ -538,14 +551,24 @@ _populate(Evas_Object *obj, > ELM_FILE_IMAGE : ELM_FILE_UNKNOW; > > if (sd->mode == ELM_FILESELECTOR_LIST) > - elm_genlist_item_append(sd->files_list, list_itc[type], > - entry, /* item data */ > - parent_it, ELM_GENLIST_ITEM_NONE, > - NULL, NULL); > + { > + Elm_Object_Item *item; > + item = elm_genlist_item_append(sd->files_list, > list_itc[type], > + entry, /* item data */ > + parent_it, > ELM_GENLIST_ITEM_NONE, > + NULL, NULL); > + if (selected && !strcmp(entry, selected)) > + elm_genlist_item_selected_set(item, EINA_TRUE); > + } > else if (sd->mode == ELM_FILESELECTOR_GRID) > - elm_gengrid_item_append(sd->files_grid, grid_itc[type], > - entry, /* item data */ > - NULL, NULL); > + { > + Elm_Object_Item *item; > + item = elm_gengrid_item_append(sd->files_grid, > grid_itc[type], > + entry, /* item data */ > + NULL, NULL); > + if (selected && !strcmp(entry, selected)) > + elm_gengrid_item_selected_set(item, EINA_TRUE); > + } > } > > #else /* asynchronous listing path */ > @@ -564,6 +587,11 @@ _populate(Evas_Object *obj, > lreq->path = eina_stringshare_add(path); > lreq->first = EINA_TRUE; > > + if (selected) > + lreq->selected = eina_stringshare_add(selected); > + else > + lreq->selected = NULL; > + > sd->current = eio_file_stat_ls(path, _ls_filter_cb, _ls_main_cb, > _ls_done_cb, _ls_error_cb, lreq); > elm_progressbar_pulse(sd->spinner, EINA_TRUE); > @@ -579,7 +607,7 @@ _on_list_expanded(void *data, > Elm_Object_Item *it = event_info; > const char *path = elm_object_item_data_get(it); > > - _populate(data, path, it); > + _populate(data, path, it, NULL); > } > > static void > @@ -632,7 +660,7 @@ _sel_do(void *data) > { > /* keep a ref to path 'couse it will be destroyed by _populate */ > p = eina_stringshare_add(path); > - _populate(sdata->fs, p, NULL); > + _populate(sdata->fs, p, NULL, NULL); > eina_stringshare_del(p); > } > else > @@ -703,7 +731,7 @@ _on_dir_up(void *data, > ELM_FILESELECTOR_DATA_GET(fs, sd); > > parent = ecore_file_dir_get(sd->path); > - _populate(fs, parent, NULL); > + _populate(fs, parent, NULL, NULL); > free(parent); > } > > @@ -714,7 +742,7 @@ _home(void *data, > { > Evas_Object *fs = data; > > - _populate(fs, getenv("HOME"), NULL); > + _populate(fs, getenv("HOME"), NULL, NULL); > } > > static void > @@ -729,7 +757,7 @@ _current_filer_changed(void *data, > elm_object_text_set(obj, filter->filter_name); > filter->sd->current_filter = filter; > > - _populate(filter->sd->obj, filter->sd->path, NULL); > + _populate(filter->sd->obj, filter->sd->path, NULL, NULL); > } > > static void > @@ -778,16 +806,61 @@ _on_text_activated(void *data, > void *event_info __UNUSED__) > { > Evas_Object *fs = data; > - const char *p; > + const char *p, *path; > + char *dir; > > - // keep a ref to path 'couse it will be destroyed by _populate > - p = eina_stringshare_add(elm_object_text_get(obj)); > - if (ecore_file_is_dir(p)) > - _populate(fs, p, NULL); > + ELM_FILESELECTOR_DATA_GET(fs, sd); > + > + path = elm_object_text_get(obj); > + > + // FIXME: Needs some feedback to user like alert. > + if (!ecore_file_exists(path)) goto end; > + > + if (ecore_file_is_dir(path)) > + { > + // keep a ref to path 'couse it will be destroyed by _populate > + p = eina_stringshare_add(path); > + _populate(fs, p, NULL, NULL); > + eina_stringshare_del(p); > + goto end; > + } > + > + dir = ecore_file_dir_get(path); > + if (!dir) goto end; > + > + if (strcmp(dir, sd->path)) > + _populate(fs, dir, NULL, path); > else > - evas_object_smart_callback_call(data, SIG_SELECTED, (void *)p); > + { > + if (sd->mode == ELM_FILESELECTOR_LIST) > + { > + Elm_Object_Item *item = > elm_genlist_first_item_get(sd->files_list); > + while (item) > + { > + const char *item_path = elm_object_item_data_get(item); > + if (!strcmp(item_path, path)) > + elm_genlist_item_selected_set(item, EINA_TRUE); > + item = elm_genlist_item_next_get(item); > + } > + } > + else > + { > + Elm_Object_Item *item = > elm_gengrid_first_item_get(sd->files_list); > + while (item) > + { > + const char *item_path = elm_object_item_data_get(item); > + if (!strcmp(item_path, path)) > + { > + elm_gengrid_item_selected_set(item, EINA_TRUE); > + break; > + } > + item = elm_gengrid_item_next_get(item); > + } > + } > + } > + free(dir); > > - eina_stringshare_del(p); > +end: > elm_object_focus_set(obj, EINA_FALSE); > } > > @@ -811,7 +884,7 @@ _anchor_clicked(void *data, > > // keep a ref to path 'couse it will be destroyed by _populate > p = eina_stringshare_add(info->name); > - _populate(fs, p, NULL); > + _populate(fs, p, NULL, NULL); > evas_object_smart_callback_call(data, SIG_SELECTED, (void *)p); > eina_stringshare_del(p); > /* After anchor was clicked, entry will be focused, and will be > editable. > @@ -1035,7 +1108,7 @@ _folder_only_set(Eo *obj, void *_pd, va_list *list) > if (sd->only_folder == only) return; > > sd->only_folder = !!only; > - if (sd->path) _populate(obj, sd->path, NULL); > + if (sd->path) _populate(obj, sd->path, NULL, NULL); > } > > EAPI Eina_Bool > @@ -1136,7 +1209,7 @@ _expandable_set(Eo *obj, void *_pd, va_list *list) > > sd->expand = !!expand; > > - if (sd->path) _populate(obj, sd->path, NULL); > + if (sd->path) _populate(obj, sd->path, NULL, NULL); > } > > EAPI Eina_Bool > @@ -1171,7 +1244,7 @@ _path_set(Eo *obj, void *_pd EINA_UNUSED, va_list > *list) > char *path; > > path = ecore_file_realpath(_path); > - _populate(obj, path, NULL); > + _populate(obj, path, NULL, NULL); > free(path); > } > > @@ -1217,7 +1290,7 @@ _mode_set(Eo *obj, void *_pd, va_list *list) > > sd->mode = mode; > > - _populate(obj, sd->path, NULL); > + _populate(obj, sd->path, NULL, NULL); > } > > EAPI Elm_Fileselector_Mode > @@ -1306,7 +1379,7 @@ _selected_set(Eo *obj, void *_pd, va_list *list) > > path = ecore_file_realpath(_path); > > - if (ecore_file_is_dir(path)) _populate(obj, path, NULL); > + if (ecore_file_is_dir(path)) _populate(obj, path, NULL, NULL); > else > { > if (!ecore_file_exists(path)) > @@ -1316,7 +1389,7 @@ _selected_set(Eo *obj, void *_pd, va_list *list) > } > > selected = ecore_file_dir_get(path); > - _populate(obj, selected, NULL); > + _populate(obj, selected, NULL, NULL); > eina_stringshare_replace(&sd->selection, path); > free(selected); > } > @@ -1373,7 +1446,7 @@ _mime_types_filter_append(Eo *obj, void *_pd, > va_list *list) > > sd->filter_list = eina_list_append(sd->filter_list, ff); > > - _populate(obj, sd->path, NULL); > + _populate(obj, sd->path, NULL, NULL); > > if (need_theme) > eo_do(obj, elm_wdg_theme(NULL)); > @@ -1409,7 +1482,7 @@ _filters_clear(Eo *obj, void *_pd, va_list *list > EINA_UNUSED) > > ELM_SAFE_FREE(sd->filter_hoversel, evas_object_del); > > - _populate(obj, sd->path, NULL); > + _populate(obj, sd->path, NULL, NULL); > } > > static void > diff --git a/src/lib/elm_widget_fileselector.h > b/src/lib/elm_widget_fileselector.h > index ad8c35a..353a4fb 100644 > --- a/src/lib/elm_widget_fileselector.h > +++ b/src/lib/elm_widget_fileselector.h > @@ -68,6 +68,7 @@ struct _Listing_Request > > Evas_Object *obj; > const char *path; > + const char *selected; > Eina_Bool first : 1; > }; > > > -- > > > ------------------------------------------------------------------------------ > How ServiceNow helps IT people transform IT departments: > 1. Consolidate legacy IT systems to a single system of record for IT > 2. Standardize and globalize service processes across IT > 3. Implement zero-touch automation to replace manual, redundant tasks > http://pubads.g.doubleclick.net/gampad/clk?id=51271111&iu=/4140/ostg.clktrk > > > ------------------------------------------------------------------------------ > How ServiceNow helps IT people transform IT departments: > 1. Consolidate legacy IT systems to a single system of record for IT > 2. Standardize and globalize service processes across IT > 3. Implement zero-touch automation to replace manual, redundant tasks > http://pubads.g.doubleclick.net/gampad/clk?id=51271111&iu=/4140/ostg.clktrk > _______________________________________________ > enlightenment-devel mailing list > enlightenment-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel > ------------------------------------------------------------------------------ How ServiceNow helps IT people transform IT departments: 1. Consolidate legacy IT systems to a single system of record for IT 2. Standardize and globalize service processes across IT 3. Implement zero-touch automation to replace manual, redundant tasks http://pubads.g.doubleclick.net/gampad/clk?id=51271111&iu=/4140/ostg.clktrk _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel ------------------------------------------------------------------------------ How ServiceNow helps IT people transform IT departments: 1. Consolidate legacy IT systems to a single system of record for IT 2. Standardize and globalize service processes across IT 3. Implement zero-touch automation to replace manual, redundant tasks http://pubads.g.doubleclick.net/gampad/clk?id=51271111&iu=/4140/ostg.clktrk _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel