From 97e324654c4f19711826311e39324aa9125ea826 Mon Sep 17 00:00:00 2001 From: Al Poole Date: Fri, 1 Sep 2017 13:53:27 +0100 Subject: [PATCH] mainview: ensure only one instance of file is open across tabs and panels. This change will ensure only one item can be opened at once across all panels. --- src/bin/edi_filepanel.c | 2 + src/bin/mainview/edi_mainview_panel.c | 59 +++++++++++++++++++-------- 2 files changed, 44 insertions(+), 17 deletions(-) diff --git a/src/bin/edi_filepanel.c b/src/bin/edi_filepanel.c index da2abfd..66c59a1 100644 --- a/src/bin/edi_filepanel.c +++ b/src/bin/edi_filepanel.c @@ -167,6 +167,8 @@ _item_menu_open_panel_cb(void *data, Evas_Object *obj EINA_UNUSED, else panel = edi_mainview_panel_append(); + edi_mainview_item_close_path(sd->path); + options = edi_path_options_create(sd->path); edi_mainview_panel_open(panel, options); diff --git a/src/bin/mainview/edi_mainview_panel.c b/src/bin/mainview/edi_mainview_panel.c index ae7c089..93dcff3 100644 --- a/src/bin/mainview/edi_mainview_panel.c +++ b/src/bin/mainview/edi_mainview_panel.c @@ -729,23 +729,36 @@ void edi_mainview_panel_open(Edi_Mainview_Panel *panel, Edi_Path_Options *options) { Edi_Mainview_Item *it; + Edi_Mainview_Panel *current; + int i; + + current = panel; + + for (i = 0; i < edi_mainview_panel_count(); i++) + { + panel = edi_mainview_panel_by_index(i); + + it = _get_item_for_path(panel, options->path); + if (it) + { + edi_mainview_panel_item_select(panel, it); + edi_mainview_panel_focus(panel); + + if (options->line) + { + if (options->character > 1) + edi_mainview_goto_position(options->line, options->character); + else + edi_mainview_goto(options->line); + } + return; + } + + } + + panel = current; edi_mainview_panel_focus(panel); - - it = _get_item_for_path(panel, options->path); - if (it) - { - edi_mainview_panel_item_select(panel, it); - if (options->line) - { - if (options->character > 1) - edi_mainview_goto_position(options->line, options->character); - else - edi_mainview_goto(options->line); - } - return; - } - if (options->type == NULL) { eio_file_direct_stat(options->path, _edi_mainview_panel_tab_stat_done, dummy, options); @@ -812,7 +825,8 @@ void edi_mainview_panel_item_close_path(Edi_Mainview_Panel *panel, const char *path) { Eina_List *item; - Edi_Mainview_Item *it; + int panel_id; + Edi_Mainview_Item *it, *prev = NULL; if (!panel) return; @@ -821,8 +835,19 @@ edi_mainview_panel_item_close_path(Edi_Mainview_Panel *panel, const char *path) if (it && !strcmp(it->path, path)) { edi_mainview_panel_item_close(panel, it); - return; + if (prev) + edi_mainview_panel_item_select(panel, prev); + + if (edi_mainview_panel_item_count(panel) == 0 && + edi_mainview_panel_count() > 1) + { + edi_mainview_panel_remove(panel); + panel_id = edi_mainview_panel_count() -1; + panel = edi_mainview_panel_by_index(panel_id); + edi_mainview_panel_focus(panel); + } } + prev = it; } }