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;
+}

-- 


Reply via email to