From 758f74de28988d6040ae3dc22238328796bb283d Mon Sep 17 00:00:00 2001 From: Al Poole Date: Sun, 13 Aug 2017 00:05:45 +0100 Subject: [PATCH] mainview: fix close_all and close. Summary: Makes sure all panels close and remain with only one panel. When tab is last in panel, remove the panel also. Also best not to free a NULL panel or its members. Reviewers: ajwillia.ms Reviewed By: ajwillia.ms Tags: #edi Differential Revision: https://phab.enlightenment.org/D5094 --- src/bin/edi_config.c | 3 +++ src/bin/mainview/edi_mainview.c | 20 +++++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/bin/edi_config.c b/src/bin/edi_config.c index b26d611..c5119fb 100644 --- a/src/bin/edi_config.c +++ b/src/bin/edi_config.c @@ -622,6 +622,9 @@ _edi_project_config_panel_remove(int panel_id) Edi_Project_Config_Tab *tab; Edi_Project_Config_Panel *panel = eina_list_nth(_edi_project_config->panels, panel_id); + if (!panel) + return; + _edi_project_config->panels = eina_list_remove(_edi_project_config->panels, panel); EINA_LIST_FREE(panel->tabs, tab) diff --git a/src/bin/mainview/edi_mainview.c b/src/bin/mainview/edi_mainview.c index 2d02d81..91fe347 100644 --- a/src/bin/mainview/edi_mainview.c +++ b/src/bin/mainview/edi_mainview.c @@ -305,10 +305,19 @@ void edi_mainview_close_all(void) { Eina_List *item; - Edi_Mainview_Panel *it; + Edi_Mainview_Panel *panel, *it; + + if (edi_mainview_is_empty()) return; EINA_LIST_FOREACH(_edi_mainview_panels, item, it) - edi_mainview_panel_close_all(it); + { + if (edi_mainview_panel_item_count(it)) + edi_mainview_panel_close_all(it); + edi_mainview_panel_remove(it); + } + + panel = edi_mainview_panel_append(); + edi_mainview_panel_focus(panel); } void @@ -354,9 +363,12 @@ edi_mainview_new_window() void edi_mainview_close() { - if (edi_mainview_is_empty()) return; + if (!_current_panel || edi_mainview_is_empty()) return; edi_mainview_panel_close(_current_panel); + if (edi_mainview_panel_count() > 1 && + !edi_mainview_panel_item_count(_current_panel)) + edi_mainview_panel_remove(_current_panel); } void @@ -541,6 +553,8 @@ edi_mainview_panel_remove(Edi_Mainview_Panel *panel) edi_mainview_panel_free(panel); _edi_mainview_panels = eina_list_remove(_edi_mainview_panels, panel); + + _current_panel = edi_mainview_panel_by_index(0); } Edi_Mainview_Panel *