rimmed pushed a commit to branch master. http://git.enlightenment.org/tools/eflete.git/commit/?id=5525e34c2af0db9d80b97787aaf2b3dbe3d23a13
commit 5525e34c2af0db9d80b97787aaf2b3dbe3d23a13 Author: Andrii Kroitor <an.kroi...@samsung.com> Date: Tue Dec 1 15:56:10 2015 +0200 editor: add methods that [un]blocks signals --- src/bin/editor/editor.h | 6 ++++++ src/bin/editor/editor_general.c | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/src/bin/editor/editor.h b/src/bin/editor/editor.h index c088402..91cb5d0 100644 --- a/src/bin/editor/editor.h +++ b/src/bin/editor/editor.h @@ -177,6 +177,12 @@ editor_group_alias_add(Evas_Object *obj, const char *group_src, const char *grou Eina_Bool editor_group_del(Evas_Object *obj, const char *name); +Eina_Bool +you_shall_not_pass_editor_signals(Change *change); + +Eina_Bool +you_shall_pass_editor_signals(Change *change); + /* Group */ Eina_Bool editor_group_min_w_set(Evas_Object *obj, Change *change, Eina_Bool merge, diff --git a/src/bin/editor/editor_general.c b/src/bin/editor/editor_general.c index 12b2f19..a479dda 100644 --- a/src/bin/editor/editor_general.c +++ b/src/bin/editor/editor_general.c @@ -19,6 +19,7 @@ #include "editor.h" +int _editor_signals_blocked = 0; static inline Eina_Bool _editor_save(Evas_Object *edit_object, Eina_Bool current_group) { @@ -56,3 +57,41 @@ editor_internal_group_add(Evas_Object *edit_object) return false; return true; } + +Eina_Bool +you_shall_not_pass_editor_signals(Change *change) +{ + Diff *diff; + + if (change) + { + diff = mem_calloc(1, sizeof(Diff)); + diff->redo.type = FUNCTION_TYPE_SIGNALSBLOCK; + diff->redo.function = you_shall_not_pass_editor_signals; + diff->undo.type = FUNCTION_TYPE_NONE; + + change_diff_add(change, diff); + } + _editor_signals_blocked++; + return true; +} + +Eina_Bool +you_shall_pass_editor_signals(Change *change) +{ + Diff *diff; + + assert(_editor_signals_blocked > 0); + + if (change) + { + diff = mem_calloc(1, sizeof(Diff)); + diff->redo.type = FUNCTION_TYPE_SIGNALSBLOCK; + diff->redo.function = you_shall_pass_editor_signals; + diff->undo.type = FUNCTION_TYPE_NONE; + + change_diff_add(change, diff); + } + _editor_signals_blocked--; + return true; +} --