yakov pushed a commit to branch master. http://git.enlightenment.org/tools/erigo.git/commit/?id=a3f6eafa805c057804528a038e4e79b902af5c7b
commit a3f6eafa805c057804528a038e4e79b902af5c7b Author: Yakov Goldberg <yako...@samsung.com> Date: Thu Nov 12 14:45:16 2015 +0200 Add _context_change_cb This callback will be called when edited content was changed, t.e. in the end of updater(). --- src/bin/gui/editor.c | 28 ++++++++++++++++++++++------ src/bin/gui/egui_logic.c | 1 + src/lib/gui_widget.c | 15 +++++++++++++++ src/lib/gui_widget.h | 6 ++++++ 4 files changed, 44 insertions(+), 6 deletions(-) diff --git a/src/bin/gui/editor.c b/src/bin/gui/editor.c index 3802688..4bb1f1b 100644 --- a/src/bin/gui/editor.c +++ b/src/bin/gui/editor.c @@ -2793,8 +2793,6 @@ _editor_undo(const Gui_Context *ctx) _editor_undo_redo_post(head_memento); - eo_do(g->main_win->toolbar_redo_it, elm_wdg_item_disabled_set(context_can_redo(ctx) ? EINA_FALSE : EINA_TRUE)); - eo_do(g->main_win->toolbar_undo_it, elm_wdg_item_disabled_set(context_can_undo(ctx) ? EINA_FALSE : EINA_TRUE)); return EINA_TRUE; } @@ -2812,8 +2810,6 @@ _editor_redo(const Gui_Context *ctx) _editor_undo_redo_post(head_memento); - eo_do(g->main_win->toolbar_redo_it, elm_wdg_item_disabled_set(context_can_redo(ctx) ? EINA_FALSE : EINA_TRUE)); - eo_do(g->main_win->toolbar_undo_it, elm_wdg_item_disabled_set(context_can_undo(ctx) ? EINA_FALSE : EINA_TRUE)); return EINA_TRUE; } @@ -4010,8 +4006,9 @@ _wdg_border_draw_on_idle(void *data EINA_UNUSED) static void _update_undo_redo_buttons(void *data EINA_UNUSED) { - eo_do(g->main_win->toolbar_redo_it, elm_wdg_item_disabled_set(EINA_TRUE)); - eo_do(g->main_win->toolbar_undo_it, elm_wdg_item_disabled_set(EINA_FALSE)); + Gui_Context *ctx = _active_context_get(); + eo_do(g->main_win->toolbar_redo_it, elm_wdg_item_disabled_set(context_can_redo(ctx) ? EINA_FALSE : EINA_TRUE)); + eo_do(g->main_win->toolbar_undo_it, elm_wdg_item_disabled_set(context_can_undo(ctx) ? EINA_FALSE : EINA_TRUE)); } static void @@ -4246,6 +4243,23 @@ _mouse_wheel_cb(void *data EINA_UNUSED, int type EINA_UNUSED, void *ev EINA_UNUS return ECORE_CALLBACK_PASS_ON; } +static void +_context_changed_cb(void *data, Memento *mem, Eina_Bool dir) +{ + ERR("I'm change cb"); + const Gui_Context *ctx = _active_context_get(); + eo_do(g->main_win->toolbar_redo_it, elm_wdg_item_disabled_set(context_can_redo(ctx) ? EINA_FALSE : EINA_TRUE)); + eo_do(g->main_win->toolbar_undo_it, elm_wdg_item_disabled_set(context_can_undo(ctx) ? EINA_FALSE : EINA_TRUE)); + if (context_current_memento_get(ctx) != context_saved_memento_get(ctx)) + { + _canvas_name_update(ctx, EINA_TRUE); + } + else + { + _canvas_name_update(ctx, EINA_FALSE); + } +} + void editor_init(GuiLogicCbs *_guilogic_cbs) { @@ -4287,6 +4301,8 @@ editor_init(GuiLogicCbs *_guilogic_cbs) _guilogic_cbs->_project_new = _project_new; _guilogic_cbs->_theme_hoversel_fill = _theme_hoversel_fill; + updater_completion_callback_add(_context_changed_cb, NULL); + objtree_init(); proplayout_init(); target_db_init(); diff --git a/src/bin/gui/egui_logic.c b/src/bin/gui/egui_logic.c index fa7c51b..3961a56 100644 --- a/src/bin/gui/egui_logic.c +++ b/src/bin/gui/egui_logic.c @@ -149,6 +149,7 @@ static void _context_save(const Gui_Context *ctx) { generator_ctx_source_generate(ctx, GENERATE_JSON, EINA_FALSE); + context_saved_memento_set((Gui_Context *) ctx, context_current_memento_get(ctx)); _canvas_name_update(ctx, EINA_FALSE); } diff --git a/src/lib/gui_widget.c b/src/lib/gui_widget.c index 1d344d3..271ae08 100644 --- a/src/lib/gui_widget.c +++ b/src/lib/gui_widget.c @@ -168,6 +168,7 @@ struct _Gui_Context Eina_Hash *eids; Eina_Hash *eids_by_name; + Memento *saved_memento; Eina_List *current_memento; Eina_List *memento_list; Eina_List *not_updated_mementos; @@ -4029,6 +4030,20 @@ context_current_memento_get(const Gui_Context *ctx) return eina_list_data_get(ctx->current_memento); } +const Memento * +context_saved_memento_get(const Gui_Context *ctx) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(ctx, NULL); + return ctx->saved_memento; +} + +void +context_saved_memento_set(Gui_Context *ctx, const Memento *memento) +{ + EINA_SAFETY_ON_NULL_RETURN(ctx); + ctx->saved_memento = (Memento *) memento; +} + void context_memento_finalize(Gui_Context *ctx) { diff --git a/src/lib/gui_widget.h b/src/lib/gui_widget.h index a37525b..e224adb 100644 --- a/src/lib/gui_widget.h +++ b/src/lib/gui_widget.h @@ -1000,6 +1000,12 @@ const Memento * context_current_memento_get(const Gui_Context *ctx); void +context_saved_memento_set(Gui_Context *ctx, const Memento *memento); + +const Memento * +context_saved_memento_get(const Gui_Context *ctx); + +void context_memento_finalize(Gui_Context *ctx); /* FIXME: remove this func, when editor_undo will move to gui_widget. */ --