indent: enhanced integration with Redo/Undo module.

Summary: in case when was adding or deleting line, will sent changing whitespaces (add/delete) from module "indent"  into undo/redo module. Fixes T1481 @fix

Reviewers: Hermet

Subscribers: kfesyna

Projects: #enventor

Maniphest Tasks: T1481

Differential Revision: https://phab.enlightenment.org/D1274

Conflicts:

	src/bin/indent.c
This commit is contained in:
Mykyta Biliavskyi 2014-08-06 16:57:55 +09:00 committed by ChunEon Park
parent ce373ec81f
commit 414e604273
1 changed files with 20 additions and 2 deletions

View File

@ -74,19 +74,27 @@ indent_insert_br_case(indent_data *id, Evas_Object *entry)
{
Evas_Object *tb = elm_entry_textblock_get(entry);
Evas_Textblock_Cursor *cur = evas_object_textblock_cursor_get(tb);
redoundo_data *rd = evas_object_data_get(entry, "redoundo");
const char *text = evas_textblock_cursor_paragraph_text_get(cur);
char *utf8 = elm_entry_markup_to_utf8(text);
Eina_Strbuf* diff = eina_strbuf_new();
int rd_cur_pos = evas_textblock_cursor_pos_get(cur);
if (strlen(utf8) > 0)
{
evas_textblock_cursor_paragraph_char_first(cur);
int i = 0;
while (utf8[i] == ' ')
{
eina_strbuf_append(diff, evas_textblock_cursor_content_get(cur));
evas_textblock_cursor_char_delete(cur);
i++;
}
}
free(utf8);
redoundo_text_push(rd, eina_strbuf_string_get(diff), rd_cur_pos, 0,
EINA_FALSE);
eina_strbuf_free(diff);
int space = indent_space_get(id, entry);
if (space <= 0) return;
@ -96,7 +104,6 @@ indent_insert_br_case(indent_data *id, Evas_Object *entry)
memset(p, ' ', space);
p[space] = '\0';
redoundo_data *rd = evas_object_data_get(entry, "redoundo");
redoundo_text_push(rd, p, elm_entry_cursor_pos_get(entry), 0, EINA_TRUE);
elm_entry_entry_insert(entry, p);
@ -173,6 +180,9 @@ indent_delete_apply(indent_data *id EINA_UNUSED, Evas_Object *entry,
evas_textblock_cursor_line_set(cur, cur_line - 1);
const char *text = evas_textblock_cursor_paragraph_text_get(cur);
char *utf8 = elm_entry_markup_to_utf8(text);
Eina_Strbuf* diff = eina_strbuf_new();
int rd_cur_pos = evas_textblock_cursor_pos_get(cur);
redoundo_data *rd = evas_object_data_get(entry, "redoundo");
int len = strlen(utf8);
if (len < 0) return EINA_FALSE;
@ -184,16 +194,24 @@ indent_delete_apply(indent_data *id EINA_UNUSED, Evas_Object *entry,
if ((utf8[(len - 1)] == ' '))
{
evas_textblock_cursor_char_prev(cur);
eina_strbuf_append(diff, evas_textblock_cursor_content_get(cur));
evas_textblock_cursor_char_delete(cur);
}
else break;
len--;
}
if (len == 0) evas_textblock_cursor_char_delete(cur);
if (len == 0)
{
eina_strbuf_append(diff, evas_textblock_cursor_content_get(cur));
evas_textblock_cursor_char_delete(cur);
}
redoundo_text_push(rd, eina_strbuf_string_get(diff), rd_cur_pos, 0,
EINA_FALSE);
elm_entry_calc_force(entry);
evas_textblock_cursor_free(cur);
free(utf8);
eina_strbuf_free(diff);
if (len == 0)
{
elm_entry_cursor_prev(entry);