jackdanielz pushed a commit to branch master. http://git.enlightenment.org/tools/erigo.git/commit/?id=5bd4e4f904ce40c84753aa6db3255901235e4c8f
commit 5bd4e4f904ce40c84753aa6db3255901235e4c8f Author: Daniel Zaoui <daniel.za...@samsung.com> Date: Mon Nov 9 14:27:34 2015 +0200 Undo/redo: add debug prints --- src/lib/undoredo.c | 46 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/src/lib/undoredo.c b/src/lib/undoredo.c index d6715c0..6c30eff 100644 --- a/src/lib/undoredo.c +++ b/src/lib/undoredo.c @@ -2,6 +2,13 @@ #include "egui_log.h" #include "gui_widget.h" +#define DEBUGON 1 +#ifdef DEBUGON +# define undo_debug(fmt, args...) fprintf(stderr, __FILE__":%s/%d : " fmt "\n", __FUNCTION__, __LINE__, ##args) +#else +# define undo_debug(x...) do { } while (0) +#endif + struct _Memento_Command { Eid *eid; // wdg, action... @@ -72,6 +79,25 @@ struct _Memento Eina_Bool finalized : 1; }; +static const char * +_memento_type_get_as_string(Memento_Type type) +{ + switch(type) + { + case MEMENTO_PROPERTY: return "Property memento"; + case MEMENTO_ACTION: return "Action memento"; + case MEMENTO_CALLBACK: return "Callback memento"; + case MEMENTO_CALLBACK_ADD_DEL: return "Callback add/del memento"; + case MEMENTO_OBJ_CONTAINER: return "Object container memento"; + case MEMENTO_ITEM_CONTAINER_ITEM: return "Item container memento"; + case MEMENTO_WIDGET: return "Widget add/del memento"; + case MEMENTO_WIDGET_PARENT: return "Widget parent memento"; + case MEMENTO_WIDGET_NAME: return "Widget name memento"; + case MEMENTO_WIDGET_PUBLIC: return "Widget public memento"; + default: return NULL; + } +} + /* Create new Memento Item */ Eina_Bool memento_command_add(Eid *eid, Memento_Type type, void *old_pointer, void *new_pointer) @@ -294,6 +320,10 @@ memento_finalize(Memento *memento) cmd->eid == cmd_next->eid && cmd->new_ptr == cmd_next->old_ptr) { + undo_debug("Merging %s on %p: %p -> %p -> %p", + _memento_type_get_as_string(cmd->type), + cmd->eid, cmd->old_ptr, cmd->new_ptr, + cmd_next->new_ptr); /* Swap pointers in order to properly unref data. */ void *tmp = cmd->new_ptr; cmd->new_ptr = cmd_next->new_ptr; @@ -307,6 +337,9 @@ memento_finalize(Memento *memento) } if (cmd->old_ptr == cmd->new_ptr) { + undo_debug("Deleting %s on %p: %p -> %p", + _memento_type_get_as_string(cmd->type), + cmd->eid, cmd->old_ptr, cmd->new_ptr); cmd_del = EINA_TRUE; break; } @@ -319,7 +352,7 @@ memento_finalize(Memento *memento) to_list = obj_container_contents_list_get(cmd->new_ptr); if (eina_list_count(from_list) != eina_list_count(to_list)) continue; cmd_del = EINA_TRUE; - while (from_list) + while (from_list && cmd_del) { if (obj_container_item_eid_get(eina_list_data_get(from_list)) != obj_container_item_eid_get(eina_list_data_get(to_list))) @@ -331,7 +364,13 @@ memento_finalize(Memento *memento) from_list = eina_list_next(from_list); to_list = eina_list_next(to_list); } - if (cmd_del) break; + if (cmd_del) + { + undo_debug("Deleting %s on %p: %p -> %p", + _memento_type_get_as_string(cmd->type), + cmd->eid, cmd->old_ptr, cmd->new_ptr); + break; + } } if (cmd->type == MEMENTO_PROPERTY) { @@ -347,6 +386,9 @@ memento_finalize(Memento *memento) wdg_prop_remove(wdg, cmd->new_ptr); wdg_prop_add(wdg, cmd->old_ptr); cmd_del = EINA_TRUE; + undo_debug("Deleting %s on %p: %p -> %p", + _memento_type_get_as_string(cmd->type), + cmd->eid, cmd->old_ptr, cmd->new_ptr); break; } } --