ajwillia-ms pushed a commit to branch master.

http://git.enlightenment.org/tools/edi.git/commit/?id=758f74de28988d6040ae3dc22238328796bb283d

commit 758f74de28988d6040ae3dc22238328796bb283d
Author: Al Poole <nets...@gmail.com>
Date:   Sun Aug 13 00:05:45 2017 +0100

    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 *

-- 


Reply via email to