hermet pushed a commit to branch master.

http://git.enlightenment.org/tools/enventor.git/commit/?id=9619ad4f8256f7a0fd734ad89ec0bda62f90b67b

commit 9619ad4f8256f7a0fd734ad89ec0bda62f90b67b
Author: Mykyta Biliavskyi <m.biliavs...@samsung.com>
Date:   Mon Aug 11 10:56:37 2014 +0900

    redoundo: add limit for maximum depth.
    
    Summary:
    Added analysis current depth of queue redo/undo.
    
    Reviewers: Hermet
    
    Reviewed By: Hermet
    
    Subscribers: NikaWhite
    
    Differential Revision: https://phab.enlightenment.org/D1298
---
 src/bin/redoundo.c     | 13 +++++++++++++
 src/include/redoundo.h |  3 ++-
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/src/bin/redoundo.c b/src/bin/redoundo.c
index d4d14c2..71d821b 100644
--- a/src/bin/redoundo.c
+++ b/src/bin/redoundo.c
@@ -1,6 +1,8 @@
 #include <Elementary.h>
 #include "common.h"
 
+#define DEFAULT_QUEUE_SIZE 200
+
 typedef struct diff_s
 {
    Eina_Stringshare *text;
@@ -18,6 +20,7 @@ struct redoundo_s
    Eina_List *queue;
    Eina_List *current_node;
    diff_data *last_diff;
+   unsigned int queue_max;        //Maximum queuing data count 0: unlimited
    Eina_Bool internal_change : 1; //Entry change by redoundo
 };
 
@@ -63,6 +66,15 @@ entry_changed_user_cb(void *data, Evas_Object *obj 
EINA_UNUSED,
         return;
      }
 
+   if ((rd->queue_max) && (eina_list_count(rd->queue) >= rd->queue_max))
+     {
+        diff_data *old = NULL;
+        old = eina_list_data_get(rd->queue);
+        eina_stringshare_del(old->text);
+        free(old);
+        rd->queue = eina_list_remove_list(rd->queue, rd->queue);
+     }
+
    if (info->insert)
      {
         if (info->change.insert.plain_length == 0) goto nochange;
@@ -294,6 +306,7 @@ redoundo_init(Evas_Object *entry)
    rd->entry = entry;
    rd->textblock = elm_entry_textblock_get(entry);
    rd->cursor = evas_object_textblock_cursor_new(rd->textblock);
+   rd->queue_max = DEFAULT_QUEUE_SIZE;
 
    //FIXME: Why signal callback? not smart callback?
    elm_object_signal_callback_add(entry, "entry,changed,user", "*",
diff --git a/src/include/redoundo.h b/src/include/redoundo.h
index 35cfe6c..31efee7 100644
--- a/src/include/redoundo.h
+++ b/src/include/redoundo.h
@@ -6,4 +6,5 @@ void redoundo_text_relative_push(redoundo_data *rd, const char 
*text);
 void redoundo_entry_region_push(redoundo_data *rd, int cursor_pos, int 
cursor_pos2);
 int redoundo_undo(redoundo_data *rd, Eina_Bool *changed);
 int redoundo_redo(redoundo_data *rd, Eina_Bool *changed);
-
+void redoundo_depth_set(redoundo_data *rd, unsigned int depth);
+unsigned int redoundo_depth_get(redoundo_data *rd);

-- 


Reply via email to