ajwillia-ms pushed a commit to branch master.

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

commit bcd0909ca995138d4598eade1962ee787b42c2e9
Author: Al Poole <nets...@gmail.com>
Date:   Sat Aug 12 17:50:27 2017 +0100

    mainview: add method for testing if mainview is empty.
    
    Summary: Also add checks to some GUI functions that crash Edi if there is 
no panel with no items.
    
    Reviewers: ajwillia.ms
    
    Reviewed By: ajwillia.ms
    
    Differential Revision: https://phab.enlightenment.org/D5083
---
 src/bin/mainview/edi_mainview.c       | 36 +++++++++++++++++++++++++++++++++++
 src/bin/mainview/edi_mainview.h       |  9 +++++++++
 src/bin/mainview/edi_mainview_panel.c |  4 ++++
 3 files changed, 49 insertions(+)

diff --git a/src/bin/mainview/edi_mainview.c b/src/bin/mainview/edi_mainview.c
index 069185f..2d02d81 100644
--- a/src/bin/mainview/edi_mainview.c
+++ b/src/bin/mainview/edi_mainview.c
@@ -29,6 +29,16 @@ static void
 dummy()
 {}
 
+Eina_Bool
+edi_mainview_is_empty(void)
+{
+   if (edi_mainview_panel_count() == 1 &&
+       !edi_mainview_panel_item_count(edi_mainview_panel_by_index(0)))
+     return EINA_TRUE;
+
+   return EINA_FALSE;
+}
+
 int
 edi_mainview_panel_count(void)
 {
@@ -324,6 +334,8 @@ edi_mainview_item_close_path(const char *path)
 void
 edi_mainview_save()
 {
+   if (edi_mainview_is_empty()) return;
+
    edi_mainview_panel_save(_current_panel);
 }
 
@@ -342,72 +354,96 @@ edi_mainview_new_window()
 void
 edi_mainview_close()
 {
+   if (edi_mainview_is_empty()) return;
+
    edi_mainview_panel_close(_current_panel);
 }
 
 void
 edi_mainview_undo()
 {
+   if (edi_mainview_is_empty()) return;
+
    edi_mainview_panel_undo(_current_panel);
 }
 
 Eina_Bool
 edi_mainview_can_undo()
 {
+   if (edi_mainview_is_empty()) return EINA_FALSE;
+
    return edi_mainview_panel_can_undo(_current_panel);
 }
 
 void
 edi_mainview_redo()
 {
+   if (edi_mainview_is_empty()) return;
+
    edi_mainview_panel_redo(_current_panel);
 }
 
 Eina_Bool
 edi_mainview_can_redo()
 {
+   if (edi_mainview_is_empty()) return EINA_FALSE;
+
    return edi_mainview_panel_can_redo(_current_panel);
 }
 
 Eina_Bool
 edi_mainview_modified()
 {
+   if (edi_mainview_is_empty()) return EINA_FALSE;
+
    return edi_mainview_panel_modified(_current_panel);
 }
 
 void
 edi_mainview_cut()
 {
+   if (edi_mainview_is_empty()) return;
+
    edi_mainview_panel_cut(_current_panel);
 }
 
 void
 edi_mainview_copy()
 {
+   if (edi_mainview_is_empty()) return;
+
    edi_mainview_panel_copy(_current_panel);
 }
 
 void
 edi_mainview_paste()
 {
+   if (edi_mainview_is_empty()) return;
+
    edi_mainview_panel_paste(_current_panel);
 }
 
 void
 edi_mainview_search()
 {
+   if (edi_mainview_is_empty()) return;
+
    edi_mainview_panel_search(_current_panel);
 }
 
 void
 edi_mainview_goto(unsigned int number)
 {
+   if (edi_mainview_is_empty()) return;
+
    edi_mainview_panel_goto(_current_panel, number);
 }
 
 void
 edi_mainview_goto_position(unsigned int row, unsigned int col)
 {
+   if (edi_mainview_is_empty()) return;
+
    edi_mainview_panel_goto_position(_current_panel, row, col);
 }
 
diff --git a/src/bin/mainview/edi_mainview.h b/src/bin/mainview/edi_mainview.h
index b4e7843..895400b 100644
--- a/src/bin/mainview/edi_mainview.h
+++ b/src/bin/mainview/edi_mainview.h
@@ -345,6 +345,15 @@ Edi_Mainview_Panel *edi_mainview_panel_by_index(int index);
  */
 int edi_mainview_panel_count(void);
 
+/**
+ * Return whether the mainview is completely empty.
+ *
+ * @return true if there are any items open in any panel.
+ *
+ * @ingroup Panels
+ */
+Eina_Bool edi_mainview_is_empty(void);
+
 /*
  * Return the panel id of a given panel instance.
  *
diff --git a/src/bin/mainview/edi_mainview_panel.c 
b/src/bin/mainview/edi_mainview_panel.c
index f34682b..dc4c860 100644
--- a/src/bin/mainview/edi_mainview_panel.c
+++ b/src/bin/mainview/edi_mainview_panel.c
@@ -535,6 +535,8 @@ edi_mainview_panel_search(Edi_Mainview_Panel *panel)
 {
    Edi_Editor *editor;
 
+   if (edi_mainview_is_empty()) return;
+
    editor = (Edi_Editor *)evas_object_data_get(panel->current->view, "editor");
 
    if (editor)
@@ -544,6 +546,8 @@ edi_mainview_panel_search(Edi_Mainview_Panel *panel)
 void
 edi_mainview_panel_goto(Edi_Mainview_Panel *panel, unsigned int number)
 {
+   if (edi_mainview_is_empty()) return;
+
    edi_mainview_panel_goto_position(panel, number, 1);
 }
 

-- 


Reply via email to