woohyun pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=a239fc4a1a22ba05a7106248c0cb1655cc87d2c3

commit a239fc4a1a22ba05a7106248c0cb1655cc87d2c3
Author: ali <[email protected]>
Date:   Thu Dec 26 16:05:37 2019 +0900

    efl_text_cursor: movement word start/end
    
    Summary:
    This patch will make **efl_text_cursor_move** method, when it is working 
with **WORD_START** or **WORD_END** If no actual movement happened then return 
false, and do not fire CHANGE event
    
    for example if cursor at word start, and we call 
efl_text_cursor_move(cursor, word_start);
    1- this call should return false because no actual movement happened. If no 
actual movement happened then return false
    2- this call should not fire CHANGE event for cursor.and do not fire CHANGE 
event
    
    Reviewers: woohyun, segfaultxavi, cedric, zmike
    
    Reviewed By: woohyun
    
    Subscribers: cedric, #reviewers, #committers
    
    Tags: #efl
    
    Maniphest Tasks: T8454
    
    Differential Revision: https://phab.enlightenment.org/D10949
---
 src/lib/evas/canvas/evas_object_textblock.c | 21 ++++++++++++++++-----
 src/tests/evas/evas_test_textblock.c        | 16 +++++++++++++++-
 2 files changed, 31 insertions(+), 6 deletions(-)

diff --git a/src/lib/evas/canvas/evas_object_textblock.c 
b/src/lib/evas/canvas/evas_object_textblock.c
index 5516e712bd..bdbe9b18c8 100644
--- a/src/lib/evas/canvas/evas_object_textblock.c
+++ b/src/lib/evas/canvas/evas_object_textblock.c
@@ -9954,6 +9954,7 @@ evas_textblock_cursor_word_start(Efl_Text_Cursor_Handle 
*cur)
    const Eina_Unicode *text;
    size_t i;
    char *breaks;
+   size_t old_cursor_pos = cur->pos;
 
    Evas_Object_Protected_Data *obj = efl_data_scope_get(cur->obj, 
EFL_CANVAS_OBJECT_CLASS);
    evas_object_async_block(obj);
@@ -10004,8 +10005,12 @@ 
evas_textblock_cursor_word_start(Efl_Text_Cursor_Handle *cur)
    cur->pos = i;
 
    free(breaks);
-   _evas_textblock_cursor_object_changed(cur);
-   return EINA_TRUE;
+   if (cur->pos != old_cursor_pos)
+     {
+        _evas_textblock_cursor_object_changed(cur);
+        return EINA_TRUE;
+     }
+   return EINA_FALSE;
 }
 
 EAPI Eina_Bool
@@ -10015,6 +10020,7 @@ evas_textblock_cursor_word_end(Efl_Text_Cursor_Handle 
*cur)
    const Eina_Unicode *text;
    size_t i;
    char *breaks;
+   size_t old_cursor_pos = cur->pos;
 
    Evas_Object_Protected_Data *obj = efl_data_scope_get(cur->obj, 
EFL_CANVAS_OBJECT_CLASS);
    evas_object_async_block(obj);
@@ -10022,8 +10028,9 @@ evas_textblock_cursor_word_end(Efl_Text_Cursor_Handle 
*cur)
 
    size_t len = eina_ustrbuf_length_get(cur->node->unicode);
 
+   // No movement happend, return false
    if (cur->pos == len)
-      return EINA_TRUE;
+     return EINA_FALSE;
 
    text = eina_ustrbuf_string_get(cur->node->unicode);
 
@@ -10059,8 +10066,12 @@ evas_textblock_cursor_word_end(Efl_Text_Cursor_Handle 
*cur)
    cur->pos = i;
 
    free(breaks);
-   _evas_textblock_cursor_object_changed(cur);
-   return EINA_TRUE;
+   if (cur->pos != old_cursor_pos)
+     {
+        _evas_textblock_cursor_object_changed(cur);
+        return EINA_TRUE;
+     }
+   return EINA_FALSE;
 }
 
 static char *
diff --git a/src/tests/evas/evas_test_textblock.c 
b/src/tests/evas/evas_test_textblock.c
index 3a112a0048..33bbad6472 100644
--- a/src/tests/evas/evas_test_textblock.c
+++ b/src/tests/evas/evas_test_textblock.c
@@ -4513,7 +4513,6 @@ EFL_START_TEST(efl_canvas_textblock_cursor)
    efl_text_set(txt, "");
    efl_text_set(txt, "");
    efl_text_cursor_text_insert(cursor1, "aa");
-
    ck_assert_int_eq(changed_emit, 3);
 
    Eo *cursor_temp = efl_add(EFL_TEXT_CURSOR_CLASS, txt);
@@ -4528,6 +4527,21 @@ EFL_START_TEST(efl_canvas_textblock_cursor)
    efl_text_cursor_line_jump_by(cur_obj, -1);
    ck_assert_int_eq(efl_text_cursor_position_get(cur_obj), 0);
 
+   efl_text_set(txt, "Word");
+   efl_text_cursor_position_set(cur_obj, 1);
+   changed_emit = 0;
+   efl_event_callback_add(cur_obj, EFL_TEXT_CURSOR_EVENT_CHANGED, 
_increment_int_changed, &changed_emit);
+   ck_assert(efl_text_cursor_move(cur_obj, 
EFL_TEXT_CURSOR_MOVE_TYPE_WORD_START));
+   ck_assert_int_eq(changed_emit, 1);
+
+   ck_assert(!efl_text_cursor_move(cur_obj, 
EFL_TEXT_CURSOR_MOVE_TYPE_WORD_START));
+   ck_assert_int_eq(changed_emit, 1);
+
+   ck_assert(efl_text_cursor_move(cur_obj, 
EFL_TEXT_CURSOR_MOVE_TYPE_WORD_END));
+   ck_assert_int_eq(changed_emit, 2);
+
+   ck_assert(!efl_text_cursor_move(cur_obj, 
EFL_TEXT_CURSOR_MOVE_TYPE_WORD_END));
+   ck_assert_int_eq(changed_emit, 2);
 
    END_EFL_CANVAS_TEXTBLOCK_TEST();
 }

-- 


Reply via email to