From 6e12d30138126c21f17eb63d6bcfe2bf44f2d945 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Fri, 15 Sep 2006 14:28:50 +0000 Subject: [PATCH] and fix key nav to be 100% right :) u can go into subdirs and go back to parents with return/escape etc. SVN revision: 25854 --- src/bin/e_fm.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 56 insertions(+), 3 deletions(-) diff --git a/src/bin/e_fm.c b/src/bin/e_fm.c index 58dfd2f6f..d24b6817b 100644 --- a/src/bin/e_fm.c +++ b/src/bin/e_fm.c @@ -2188,6 +2188,7 @@ _e_fm2_icon_sel_prev(Evas_Object *obj) ic = l->prev->data; break; } + ic = NULL; } if (!ic) { @@ -2220,6 +2221,7 @@ _e_fm2_icon_sel_next(Evas_Object *obj) ic = l->next->data; break; } + ic = NULL; } if (!ic) { @@ -2294,7 +2296,28 @@ _e_fm2_typebuf_run(Evas_Object *obj) _e_fm2_typebuf_hide(obj); ic = _e_fm2_icon_first_selected_find(obj); if (ic) - evas_object_smart_callback_call(ic->sd->obj, "selected", NULL); + { + if ((S_ISDIR(ic->info.statinfo.st_mode)) && + (ic->sd->config->view.open_dirs_in_place) && + (!ic->sd->config->view.no_subdir_jump) && + (!ic->sd->config->view.single_click) + ) + { + char buf[4096], *dev = NULL; + + if (ic->sd->dev) dev = strdup(ic->sd->dev); + if (ic->info.pseudo_link) + snprintf(buf, sizeof(buf), "%s/%s", ic->info.pseudo_dir, ic->info.file); + else + snprintf(buf, sizeof(buf), "%s/%s", ic->sd->path, ic->info.file); + e_fm2_path_set(ic->sd->obj, dev, buf); + E_FREE(dev); + } + else + { + evas_object_smart_callback_call(ic->sd->obj, "selected", NULL); + } + } } /* FIXME: prototype */ @@ -2478,7 +2501,16 @@ _e_fm2_cb_key_down(void *data, Evas *e, Evas_Object *obj, void *event_info) if (sd->typebuf_visible) _e_fm2_typebuf_hide(obj); else - _e_fm2_icon_desel_any(obj); + { + ic = _e_fm2_icon_first_selected_find(obj); + if (ic) + _e_fm2_icon_desel_any(obj); + else + { + if (e_fm2_has_parent_get(obj)) + e_fm2_parent_go(obj); + } + } } else if (!strcmp(ev->keyname, "Return")) { @@ -2491,7 +2523,28 @@ _e_fm2_cb_key_down(void *data, Evas *e, Evas_Object *obj, void *event_info) { ic = _e_fm2_icon_first_selected_find(obj); if (ic) - evas_object_smart_callback_call(ic->sd->obj, "selected", NULL); + { + if ((S_ISDIR(ic->info.statinfo.st_mode)) && + (ic->sd->config->view.open_dirs_in_place) && + (!ic->sd->config->view.no_subdir_jump) && + (!ic->sd->config->view.single_click) + ) + { + char buf[4096], *dev = NULL; + + if (ic->sd->dev) dev = strdup(ic->sd->dev); + if (ic->info.pseudo_link) + snprintf(buf, sizeof(buf), "%s/%s", ic->info.pseudo_dir, ic->info.file); + else + snprintf(buf, sizeof(buf), "%s/%s", ic->sd->path, ic->info.file); + e_fm2_path_set(ic->sd->obj, dev, buf); + E_FREE(dev); + } + else + { + evas_object_smart_callback_call(ic->sd->obj, "selected", NULL); + } + } } } else if (!strcmp(ev->keyname, "Insert"))