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); --