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
This commit is contained in:
Al Poole 2017-08-13 00:05:45 +01:00 committed by Andy Williams
parent 7a8119af60
commit 758f74de28
2 changed files with 20 additions and 3 deletions

View File

@ -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)

View File

@ -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 *