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. */

-- 


Reply via email to