fix the problem of selection cursor moving
Summary: The selection cursor is moved at the frist When clicking and moving the bracket using the mouse. In entry_recover(), there is no selection cursor recover machanism. So I added the selection recover logic in the function. Now, it is fixed. @fix @T3099 Test Plan: 1. click the bracket 2. moving the cursor keeping the mouse clicking 3. see the fixed result Reviewers: Jaehyun_Cho, Hermet Differential Revision: https://phab.enlightenment.org/D3641
This commit is contained in:
parent
75345770ce
commit
4b82e2b945
|
@ -114,14 +114,48 @@ visible_text_region_get(edit_data *ed, int *from_line, int *to_line)
|
|||
}
|
||||
|
||||
static void
|
||||
entry_recover(edit_data *ed, int cursor_pos)
|
||||
entry_recover_param_get(edit_data *ed,
|
||||
int *cursor_pos,
|
||||
int *sel_cur_begin,
|
||||
int *sel_cur_end)
|
||||
{
|
||||
if (cursor_pos)
|
||||
*cursor_pos = elm_entry_cursor_pos_get(ed->en_edit);
|
||||
|
||||
Edje_Object *en_edje;
|
||||
if (sel_cur_begin || sel_cur_end)
|
||||
{
|
||||
en_edje = elm_layout_edje_get(ed->en_edit);
|
||||
if (elm_entry_scrollable_get(ed->en_edit))
|
||||
en_edje = edje_object_part_swallow_get(en_edje, "elm.swallow.content");
|
||||
}
|
||||
|
||||
if (sel_cur_begin)
|
||||
*sel_cur_begin = edje_object_part_text_cursor_pos_get
|
||||
(en_edje, "elm.text", EDJE_CURSOR_SELECTION_BEGIN);
|
||||
if (sel_cur_end)
|
||||
*sel_cur_end = edje_object_part_text_cursor_pos_get
|
||||
(en_edje, "elm.text", EDJE_CURSOR_SELECTION_END);
|
||||
}
|
||||
|
||||
static void
|
||||
entry_recover(edit_data *ed, int cursor_pos, int sel_cur_begin, int sel_cur_end)
|
||||
{
|
||||
elm_entry_calc_force(ed->en_edit);
|
||||
|
||||
//recover cursor position??
|
||||
elm_entry_cursor_pos_set(ed->en_edit, 0);
|
||||
elm_entry_cursor_pos_set(ed->en_edit, cursor_pos);
|
||||
|
||||
Edje_Object *en_edje = elm_layout_edje_get(ed->en_edit);
|
||||
if (elm_entry_scrollable_get(ed->en_edit))
|
||||
en_edje = edje_object_part_swallow_get(en_edje, "elm.swallow.content");
|
||||
|
||||
//recover selection cursor
|
||||
edje_object_part_text_cursor_pos_set(en_edje, "elm.text",
|
||||
EDJE_CURSOR_SELECTION_BEGIN, sel_cur_begin);
|
||||
edje_object_part_text_cursor_pos_set(en_edje, "elm.text",
|
||||
EDJE_CURSOR_SELECTION_END, sel_cur_end);
|
||||
|
||||
//not on selection mode
|
||||
if (ed->select_pos == -1) return;
|
||||
|
||||
|
@ -129,7 +163,9 @@ entry_recover(edit_data *ed, int cursor_pos)
|
|||
const char *selected = elm_entry_selection_get(ed->en_edit);
|
||||
if (!selected) return;
|
||||
ed->on_select_recover = EINA_TRUE;
|
||||
elm_entry_select_region_set(ed->en_edit, ed->select_pos, cursor_pos);
|
||||
elm_entry_select_region_set(ed->en_edit,
|
||||
ed->select_pos,
|
||||
cursor_pos);
|
||||
ed->on_select_recover = EINA_FALSE;
|
||||
}
|
||||
|
||||
|
@ -143,8 +179,10 @@ edit_font_apply(edit_data *ed, const char *font_name, const char *font_style)
|
|||
elm_font_fontconfig_name_free(font);
|
||||
|
||||
elm_entry_calc_force(ed->en_line);
|
||||
int pos = elm_entry_cursor_pos_get(ed->en_edit);
|
||||
entry_recover(ed, pos);
|
||||
|
||||
int cursor_pos;
|
||||
entry_recover_param_get(ed, &cursor_pos, NULL, NULL);
|
||||
entry_recover(ed, cursor_pos, -1, -1);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -205,7 +243,6 @@ syntax_color_apply(edit_data *ed, Eina_Bool partial)
|
|||
{
|
||||
Evas_Object *tb = elm_entry_textblock_get(ed->en_edit);
|
||||
char *text = (char *) evas_object_textblock_text_markup_get(tb);
|
||||
int pos = elm_entry_cursor_pos_get(ed->en_edit);
|
||||
|
||||
int from_line = 1;
|
||||
int to_line = -1;
|
||||
|
@ -225,10 +262,12 @@ syntax_color_apply(edit_data *ed, Eina_Bool partial)
|
|||
/* I'm not sure this will be problem.
|
||||
But it can avoid entry_object_text_escaped_set() in Edje.
|
||||
Logically that's unnecessary in this case. */
|
||||
int cursor_pos, sel_cur_begin, sel_cur_end;
|
||||
entry_recover_param_get(ed, &cursor_pos, &sel_cur_begin, &sel_cur_end);
|
||||
evas_object_textblock_text_markup_set(tb, translated);
|
||||
error_highlight(ed, tb);
|
||||
bracket_highlight(ed, tb);
|
||||
entry_recover(ed, pos);
|
||||
entry_recover(ed, cursor_pos, sel_cur_begin, sel_cur_end);
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
|
@ -271,15 +310,16 @@ syntax_color_thread_end_cb(void *data, Ecore_Thread *thread EINA_UNUSED)
|
|||
syntax_color_td *td = data;
|
||||
if (!td->translated) return;
|
||||
|
||||
int pos = elm_entry_cursor_pos_get(td->ed->en_edit);
|
||||
Evas_Object *tb = elm_entry_textblock_get(td->ed->en_edit);
|
||||
|
||||
/* I'm not sure this will be problem.
|
||||
But it can avoid entry_object_text_escaped_set() in Edje.
|
||||
Logically that's unnecessary in this case. */
|
||||
int cursor_pos, sel_cur_begin, sel_cur_end;
|
||||
entry_recover_param_get(td->ed, &cursor_pos, &sel_cur_begin, &sel_cur_end);
|
||||
evas_object_textblock_text_markup_set(tb, td->translated);
|
||||
error_highlight(td->ed, tb);
|
||||
entry_recover(td->ed, pos);
|
||||
entry_recover(td->ed, cursor_pos, sel_cur_begin, sel_cur_end);
|
||||
|
||||
td->ed->syntax_color_thread = NULL;
|
||||
free(td);
|
||||
|
|
Loading…
Reference in New Issue