ajwillia-ms pushed a commit to branch master.

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

commit 0b67bfc0315fdf7fed800652d10b76b7a17a7051
Author: YeongJong Lee <clean...@naver.com>
Date:   Tue May 30 08:33:10 2017 +0100

    elm_code: fix wrong selection delete
    
    Summary:
    If multi selection have 0 column and delete the selection, 0 + 1 column also
    deleted
    This fix that bug.
    
    Also, remove needless code.
    
    Test Plan:
    1. select multi line with 0 column.
    2. delete the selection
    
    Reviewers: ajwillia.ms
    
    Reviewed By: ajwillia.ms
    
    Subscribers: cedric, jpeg
    
    Differential Revision: https://phab.enlightenment.org/D4922
---
 src/lib/elementary/elm_code_widget_selection.c     | 25 +++++------
 .../elementary/elm_code_test_widget_selection.c    | 50 ++++++++++++++++++++--
 2 files changed, 56 insertions(+), 19 deletions(-)

diff --git a/src/lib/elementary/elm_code_widget_selection.c 
b/src/lib/elementary/elm_code_widget_selection.c
index c8c1dacde8..9cac479d3e 100644
--- a/src/lib/elementary/elm_code_widget_selection.c
+++ b/src/lib/elementary/elm_code_widget_selection.c
@@ -186,7 +186,8 @@ _elm_code_widget_selection_delete_multi(Elm_Code_Widget 
*widget, Elm_Code_Widget
 {
    Elm_Code_Line *line;
    const char *first, *last;
-   unsigned int last_length, start, end, length, i;
+   unsigned int last_length, start, length, i;
+   int end;
    char *content;
    Elm_Code_Widget_Selection_Data *selection;
 
@@ -200,22 +201,16 @@ _elm_code_widget_selection_delete_multi(Elm_Code_Widget 
*widget, Elm_Code_Widget
 
    line = elm_code_file_line_get(pd->code->file, selection->end_line);
    last = elm_code_line_text_get(line, &last_length);
-   end = elm_code_widget_line_text_position_for_column_get(widget, line, 
selection->end_col);
+   end = (int)elm_code_widget_line_text_position_for_column_get(widget, line, 
selection->end_col);
 
-   if (last_length == end)
-     {
-        length = start + last_length - end;
-        content = malloc(sizeof(char) * length);
-        strncpy(content, first, start);
-     }
-   else
-     {
-        length = start + last_length - (end + 1);
-        content = malloc(sizeof(char) * length);
-        strncpy(content, first, start);
+   if (selection->end_col == 0)
+     end = -1;
 
-        strncpy(content + start, last + end + 1, last_length - (end + 1));
-     }
+   length = start + last_length - (end + 1);
+   content = malloc(sizeof(char) * length);
+   strncpy(content, first, start);
+   if (last_length > 0)
+     strncpy(content + start, last + end + 1, last_length - (end + 1));
 
    for (i = line->number; i > selection->start_line; i--)
      elm_code_file_line_remove(pd->code->file, i);
diff --git a/src/tests/elementary/elm_code_test_widget_selection.c 
b/src/tests/elementary/elm_code_test_widget_selection.c
index e394300af6..db046a0155 100644
--- a/src/tests/elementary/elm_code_test_widget_selection.c
+++ b/src/tests/elementary/elm_code_test_widget_selection.c
@@ -346,13 +346,14 @@ START_TEST (elm_code_test_widget_selection_delete_twoline)
    file = elm_code_file_new(code);
    elm_code_file_line_append(file, "text", 4, NULL);
    elm_code_file_line_append(file, "TEXT", 4, NULL);
+   elm_code_file_line_append(file, "remove", 6, NULL);
 
    win = elm_win_add(NULL, "code", ELM_WIN_BASIC);
    widget = elm_code_widget_add(win, code);
    line = elm_code_file_line_get(file, 1);
    text = elm_code_line_text_get(line, NULL);
    ck_assert_str_eq("text", text);
-   ck_assert_int_eq(2, elm_code_file_lines_get(file));
+   ck_assert_int_eq(3, elm_code_file_lines_get(file));
 
    elm_code_widget_selection_start(widget, 1, 3);
    elm_code_widget_selection_end(widget, 2, 2);
@@ -361,6 +362,15 @@ START_TEST (elm_code_test_widget_selection_delete_twoline)
    line = elm_code_file_line_get(file, 1);
    text = elm_code_line_text_get(line, &length);
    ck_assert_strn_eq("teXT", text, length);
+   ck_assert_int_eq(2, elm_code_file_lines_get(file));
+
+   elm_code_widget_selection_start(widget, 1, 5);
+   elm_code_widget_selection_end(widget, 2, 0);
+   elm_code_widget_selection_delete(widget);
+
+   line = elm_code_file_line_get(file, 1);
+   text = elm_code_line_text_get(line, &length);
+   ck_assert_strn_eq("teXTremove", text, length);
    ck_assert_int_eq(1, elm_code_file_lines_get(file));
 
    elm_code_free(code);
@@ -383,13 +393,14 @@ START_TEST 
(elm_code_test_widget_selection_reverse_delete_twoline)
    file = elm_code_file_new(code);
    elm_code_file_line_append(file, "text", 4, NULL);
    elm_code_file_line_append(file, "TEXT", 4, NULL);
+   elm_code_file_line_append(file, "remove", 6, NULL);
 
    win = elm_win_add(NULL, "code", ELM_WIN_BASIC);
    widget = elm_code_widget_add(win, code);
    line = elm_code_file_line_get(file, 1);
    text = elm_code_line_text_get(line, NULL);
    ck_assert_str_eq("text", text);
-   ck_assert_int_eq(2, elm_code_file_lines_get(file));
+   ck_assert_int_eq(3, elm_code_file_lines_get(file));
 
    elm_code_widget_selection_start(widget, 2, 2);
    elm_code_widget_selection_end(widget, 1, 3);
@@ -398,6 +409,15 @@ START_TEST 
(elm_code_test_widget_selection_reverse_delete_twoline)
    line = elm_code_file_line_get(file, 1);
    text = elm_code_line_text_get(line, &length);
    ck_assert_strn_eq("teXT", text, length);
+   ck_assert_int_eq(2, elm_code_file_lines_get(file));
+
+   elm_code_widget_selection_start(widget, 2, 0);
+   elm_code_widget_selection_end(widget, 1, 5);
+   elm_code_widget_selection_delete(widget);
+
+   line = elm_code_file_line_get(file, 1);
+   text = elm_code_line_text_get(line, &length);
+   ck_assert_strn_eq("teXTremove", text, length);
    ck_assert_int_eq(1, elm_code_file_lines_get(file));
 
    elm_code_free(code);
@@ -421,13 +441,15 @@ START_TEST 
(elm_code_test_widget_selection_delete_multiline)
    elm_code_file_line_append(file, "text", 4, NULL);
    elm_code_file_line_append(file, "remove", 6, NULL);
    elm_code_file_line_append(file, "TEXT", 4, NULL);
+   elm_code_file_line_append(file, "delete", 6, NULL);
+   elm_code_file_line_append(file, "REMOVE", 6, NULL);
 
    win = elm_win_add(NULL, "code", ELM_WIN_BASIC);
    widget = elm_code_widget_add(win, code);
    line = elm_code_file_line_get(file, 1);
    text = elm_code_line_text_get(line, NULL);
    ck_assert_str_eq("text", text);
-   ck_assert_int_eq(3, elm_code_file_lines_get(file));
+   ck_assert_int_eq(5, elm_code_file_lines_get(file));
 
    elm_code_widget_selection_start(widget, 1, 3);
    elm_code_widget_selection_end(widget, 3, 2);
@@ -436,6 +458,15 @@ START_TEST 
(elm_code_test_widget_selection_delete_multiline)
    line = elm_code_file_line_get(file, 1);
    text = elm_code_line_text_get(line, &length);
    ck_assert_strn_eq("teXT", text, length);
+   ck_assert_int_eq(3, elm_code_file_lines_get(file));
+
+   elm_code_widget_selection_start(widget, 1, 5);
+   elm_code_widget_selection_end(widget, 3, 0);
+   elm_code_widget_selection_delete(widget);
+
+   line = elm_code_file_line_get(file, 1);
+   text = elm_code_line_text_get(line, &length);
+   ck_assert_strn_eq("teXTREMOVE", text, length);
    ck_assert_int_eq(1, elm_code_file_lines_get(file));
 
    elm_code_free(code);
@@ -459,13 +490,15 @@ START_TEST 
(elm_code_test_widget_selection_reverse_delete_multiline)
    elm_code_file_line_append(file, "text", 4, NULL);
    elm_code_file_line_append(file, "remove", 6, NULL);
    elm_code_file_line_append(file, "TEXT", 4, NULL);
+   elm_code_file_line_append(file, "delete", 6, NULL);
+   elm_code_file_line_append(file, "REMOVE", 6, NULL);
 
    win = elm_win_add(NULL, "code", ELM_WIN_BASIC);
    widget = elm_code_widget_add(win, code);
    line = elm_code_file_line_get(file, 1);
    text = elm_code_line_text_get(line, NULL);
    ck_assert_str_eq("text", text);
-   ck_assert_int_eq(3, elm_code_file_lines_get(file));
+   ck_assert_int_eq(5, elm_code_file_lines_get(file));
 
    elm_code_widget_selection_start(widget, 3, 2);
    elm_code_widget_selection_end(widget, 1, 3);
@@ -474,6 +507,15 @@ START_TEST 
(elm_code_test_widget_selection_reverse_delete_multiline)
    line = elm_code_file_line_get(file, 1);
    text = elm_code_line_text_get(line, &length);
    ck_assert_strn_eq("teXT", text, length);
+   ck_assert_int_eq(3, elm_code_file_lines_get(file));
+
+   elm_code_widget_selection_start(widget, 3, 0);
+   elm_code_widget_selection_end(widget, 1, 5);
+   elm_code_widget_selection_delete(widget);
+
+   line = elm_code_file_line_get(file, 1);
+   text = elm_code_line_text_get(line, &length);
+   ck_assert_strn_eq("teXTREMOVE", text, length);
    ck_assert_int_eq(1, elm_code_file_lines_get(file));
 
    elm_code_free(code);

-- 


Reply via email to