From bcd0909ca995138d4598eade1962ee787b42c2e9 Mon Sep 17 00:00:00 2001 From: Al Poole Date: Sat, 12 Aug 2017 17:50:27 +0100 Subject: [PATCH] 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); }