ajwillia-ms pushed a commit to branch master. http://git.enlightenment.org/tools/edi.git/commit/?id=0549f5be368525487ec905075b222a5caa3d8464
commit 0549f5be368525487ec905075b222a5caa3d8464 Author: Al Poole <[email protected]> Date: Sun Mar 26 21:19:20 2017 +0100 Add optional menu for directories in file view. Summary: Option is "Open terminal here" also, if directory is empty: "Remove the directory" Reviewers: ajwillia.ms Reviewed By: ajwillia.ms Differential Revision: https://phab.enlightenment.org/D4748 --- src/bin/edi_filepanel.c | 57 +++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 51 insertions(+), 6 deletions(-) diff --git a/src/bin/edi_filepanel.c b/src/bin/edi_filepanel.c index 9c0f471..b99ceb7 100644 --- a/src/bin/edi_filepanel.c +++ b/src/bin/edi_filepanel.c @@ -130,11 +130,12 @@ _item_menu_del_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, } static void -_item_menu_dismissed_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, +_item_menu_dismissed_cb(void *data EINA_UNUSED, Evas_Object *obj, void *ev EINA_UNUSED) { eina_stringshare_del(_menu_cb_path); _menu_cb_path = NULL; + evas_object_del(obj); } static void @@ -171,6 +172,50 @@ _item_menu_create(Evas_Object *win) } static void +_item_menu_open_terminal_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + const char *format; + char *cmd; + int cmdlen; + + format = "terminology -d=\"%s\""; + + if (!ecore_file_is_dir(_menu_cb_path)) + return; + + cmdlen = strlen(_menu_cb_path) + strlen(format) + 1; + cmd = malloc(sizeof(char) * cmdlen); + snprintf(cmd, cmdlen, format, _menu_cb_path); + + ecore_exe_run(cmd, NULL); + free(cmd); +} + +static void +_item_menu_rmdir_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + const char *path = _menu_cb_path; + if (!ecore_file_is_dir(path)) + return; + + ecore_file_recursive_rm(path); +} + +static void +_item_menu_dir_create(Evas_Object *win) +{ + menu = elm_menu_add(win); + evas_object_smart_callback_add(menu, "dismissed", _item_menu_dismissed_cb, NULL); + + if (ecore_file_app_installed("terminology")) + elm_menu_item_add(menu, NULL, "terminal", "open terminal here", _item_menu_open_terminal_cb, NULL); + if (ecore_file_dir_is_empty(_menu_cb_path)) + elm_menu_item_add(menu, NULL, "edit-delete", "remove directory", _item_menu_rmdir_cb, NULL); +} + +static void _item_clicked_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info) { @@ -191,15 +236,15 @@ _item_clicked_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, } if (ev->button != 3) return; + _menu_cb_path = eina_stringshare_add(sd->path); + if (sd->isdir) - return; + _item_menu_dir_create(_main_win); + else + _item_menu_create(_main_win); elm_object_item_focus_set(it, EINA_TRUE); - if (!menu) - _item_menu_create(_main_win); - - _menu_cb_path = eina_stringshare_add(sd->path); elm_menu_move(menu, ev->canvas.x, ev->canvas.y); evas_object_show(menu); } --
