From 38dd432523542edee7e675e7d850e84e49e17964 Mon Sep 17 00:00:00 2001 From: Al Poole Date: Sat, 22 Apr 2017 22:23:32 +0100 Subject: [PATCH] EDI -> Save -> Menu/Toolbar Indicator (w/o autosave) Reviewers: ajwillia.ms Reviewed By: ajwillia.ms Differential Revision: https://phab.enlightenment.org/D4819 --- src/bin/edi_main.c | 23 ++++++++++++++++++++--- src/bin/edi_private.h | 1 + src/bin/mainview/edi_mainview.c | 15 +++++++++++++++ src/bin/mainview/edi_mainview.h | 7 +++++++ 4 files changed, 43 insertions(+), 3 deletions(-) diff --git a/src/bin/edi_main.c b/src/bin/edi_main.c index 9e8adeb..a94ef40 100644 --- a/src/bin/edi_main.c +++ b/src/bin/edi_main.c @@ -28,6 +28,7 @@ int EDI_EVENT_TAB_CHANGED; int EDI_EVENT_FILE_CHANGED; +int EDI_EVENT_FILE_SAVED; typedef struct _Edi_Panel_Slide_Effect { @@ -47,6 +48,7 @@ static Elm_Object_Item *_edi_selected_bottompanel; static Evas_Object *_edi_filepanel, *_edi_filepanel_icon; static Evas_Object *_edi_menu_undo, *_edi_menu_redo, *_edi_toolbar_undo, *_edi_toolbar_redo; +static Evas_Object *_edi_menu_save, *_edi_toolbar_save; static Evas_Object *_edi_main_win, *_edi_main_box, *_edi_message_popup; int _edi_log_dom = -1; @@ -882,7 +884,7 @@ _edi_menu_setup(Evas_Object *obj) elm_menu_item_separator_add(menu, menu_it); elm_menu_item_add(menu, menu_it, "document-new", "New ...", _edi_menu_new_cb, NULL); elm_menu_item_add(menu, menu_it, "folder-new", "New Directory ...", _edi_menu_new_dir_cb, NULL); - elm_menu_item_add(menu, menu_it, "document-save", "Save", _edi_menu_save_cb, NULL); + _edi_menu_save = elm_menu_item_add(menu, menu_it, "document-save", "Save", _edi_menu_save_cb, NULL); elm_menu_item_add(menu, menu_it, "window-new", "New window", _edi_menu_open_window_cb, NULL); elm_menu_item_add(menu, menu_it, "document-close", "Close", _edi_menu_close_cb, NULL); elm_menu_item_add(menu, menu_it, "document-close", "Close all", _edi_menu_closeall_cb, NULL); @@ -947,7 +949,7 @@ edi_toolbar_setup(Evas_Object *win) evas_object_size_hint_weight_set(tb, 0.0, EVAS_HINT_EXPAND); _edi_toolbar_item_add(tb, "document-new", "New File", _tb_new_cb); - _edi_toolbar_item_add(tb, "document-save", "Save", _tb_save_cb); + _edi_toolbar_save =_edi_toolbar_item_add(tb, "document-save", "Save", _tb_save_cb); _edi_toolbar_item_add(tb, "document-close", "Close", _tb_close_cb); tb_it = elm_toolbar_item_append(tb, "separator", "", NULL, NULL); @@ -1033,11 +1035,16 @@ _edi_resize_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, static void _edi_icon_update() { - Eina_Bool can_undo, can_redo = EINA_FALSE; + Eina_Bool modified, can_undo, can_redo = EINA_FALSE; can_undo = edi_mainview_can_undo(); can_redo = edi_mainview_can_redo(); + modified = edi_mainview_modified(); + + elm_object_item_disabled_set(_edi_menu_save, !modified); + elm_object_disabled_set(_edi_toolbar_save, !modified); + elm_object_item_disabled_set(_edi_menu_undo, !can_undo); elm_object_item_disabled_set(_edi_menu_redo, !can_redo); @@ -1079,6 +1086,14 @@ _edi_file_changed(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA return ECORE_CALLBACK_RENEW; } +static Eina_Bool +_edi_file_saved(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED) +{ + elm_object_item_disabled_set(_edi_menu_save, EINA_TRUE); + elm_object_disabled_set(_edi_toolbar_save, EINA_TRUE); + return ECORE_CALLBACK_RENEW; +} + void _edi_open_tabs() { @@ -1185,6 +1200,7 @@ edi_open(const char *inputpath) ecore_event_handler_add(EDI_EVENT_CONFIG_CHANGED, _edi_config_changed, NULL); ecore_event_handler_add(EDI_EVENT_TAB_CHANGED, _edi_tab_changed, NULL); ecore_event_handler_add(EDI_EVENT_FILE_CHANGED, _edi_file_changed, NULL); + ecore_event_handler_add(EDI_EVENT_FILE_SAVED, _edi_file_saved, NULL); free(path); return EINA_TRUE; @@ -1321,6 +1337,7 @@ elm_main(int argc EINA_UNUSED, char **argv EINA_UNUSED) EDI_EVENT_TAB_CHANGED = ecore_event_type_new(); EDI_EVENT_FILE_CHANGED = ecore_event_type_new(); + EDI_EVENT_FILE_SAVED = ecore_event_type_new(); if (!project_path) { diff --git a/src/bin/edi_private.h b/src/bin/edi_private.h index 90e30b9..98def3e 100644 --- a/src/bin/edi_private.h +++ b/src/bin/edi_private.h @@ -29,6 +29,7 @@ extern int _edi_log_dom; extern int EDI_EVENT_TAB_CHANGED; extern int EDI_EVENT_FILE_CHANGED; +extern int EDI_EVENT_FILE_SAVED; #define EDI_CONTENT_SAVE_TIMEOUT 1 diff --git a/src/bin/mainview/edi_mainview.c b/src/bin/mainview/edi_mainview.c index 69c350b..4a44a87 100644 --- a/src/bin/mainview/edi_mainview.c +++ b/src/bin/mainview/edi_mainview.c @@ -543,8 +543,11 @@ edi_mainview_save() if (!editor) return; + editor->modified = EINA_FALSE; + code = elm_code_widget_code_get(editor->entry); elm_code_file_save(code->file); + ecore_event_add(EDI_EVENT_FILE_SAVED, NULL, NULL, NULL); } void @@ -629,6 +632,18 @@ edi_mainview_can_redo() return elm_code_widget_can_redo_get(editor->entry); } +Eina_Bool +edi_mainview_modified() +{ + Edi_Editor *editor; + + editor = (Edi_Editor *)evas_object_data_get(_current_view, "editor"); + if (!editor) + return EINA_FALSE; + + return editor->modified; +} + void edi_mainview_cut() { diff --git a/src/bin/mainview/edi_mainview.h b/src/bin/mainview/edi_mainview.h index 7070a6b..55496a4 100644 --- a/src/bin/mainview/edi_mainview.h +++ b/src/bin/mainview/edi_mainview.h @@ -133,6 +133,13 @@ void edi_mainview_closeall(); */ void edi_mainview_undo(); +/** + * Return if editor has been modified + * + * @ingroup Content + */ +Eina_Bool edi_mainview_modified(); + /** * See whether the current view can undo a change. *