diff options
author | Marcel Hollerbach <mail@marcel-hollerbach.de> | 2020-01-21 17:11:31 +0100 |
---|---|---|
committer | Marcel Hollerbach <mail@marcel-hollerbach.de> | 2020-01-21 17:15:11 +0100 |
commit | 0049155c1acac72f6e0dee6079d3a7da1e2c925c (patch) | |
tree | 317aa84a8124653a83865b45c009267d756c6a3e | |
parent | 6a1d6b6705911dca8e9facc0fefc55e02c6e3694 (diff) | |
download | efl-0049155c1acac72f6e0dee6079d3a7da1e2c925c.tar.gz |
Revert "efl_text_interactive: selection enhancment"
This reverts commit 09f0d66d90e4db5f879f4c998e8a07b26fa749fc.
This breaks CI, and tests do not pass anymore, hence no other revision
can be verified.
The revision is reopened. lets take a second look at this.
-rw-r--r-- | src/lib/elementary/efl_text_interactive.eo | 14 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_internal_text_interactive.c | 172 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_internal_text_interactive.eo | 2 | ||||
-rw-r--r-- | src/tests/elementary/efl_ui_test_text.c | 39 |
4 files changed, 60 insertions, 167 deletions
diff --git a/src/lib/elementary/efl_text_interactive.eo b/src/lib/elementary/efl_text_interactive.eo index 2f16ce89d8..933aad0cb1 100644 --- a/src/lib/elementary/efl_text_interactive.eo +++ b/src/lib/elementary/efl_text_interactive.eo @@ -25,17 +25,13 @@ interface @beta Efl.Text_Interactive extends Efl.Text, Efl.Text_Font_Properties, } @property selection_cursors { [[The cursors used for selection handling. + If the cursors are equal there's no selection. + + You are allowed to retain and modify them. Modifying them modifies + the selection of the object. ]] - get { - [[You are allowed to retain and modify them. Modifying them modifies - the selection of the object (recommended to extend selection range).]] - } - set { - [[The positions of passed cursors will be used to set selection cursors positions. - Further modification for passed @Efl.Text.Cursor objects, will not affect selection. - Setter is recommended to set new range for selection.]] - } + get {} values { start: Efl.Text.Cursor; [[The start of the selection.]] end: Efl.Text.Cursor; [[The end of the selection.]] diff --git a/src/lib/elementary/efl_ui_internal_text_interactive.c b/src/lib/elementary/efl_ui_internal_text_interactive.c index 42d3bdb8bb..8c39ed6287 100644 --- a/src/lib/elementary/efl_ui_internal_text_interactive.c +++ b/src/lib/elementary/efl_ui_internal_text_interactive.c @@ -14,7 +14,6 @@ typedef struct _Efl_Ui_Internal_Text_Interactive_Data { Efl_Text_Cursor *sel_start, *sel_end; - int sel_start_pos, sel_end_pos; Efl_Text_Cursor *main_cursor; Efl_Text_Cursor *preedit_start, *preedit_end; Ecore_Timer *pw_timer; @@ -45,11 +44,10 @@ typedef struct _Efl_Ui_Internal_Text_Interactive_Data } Efl_Ui_Internal_Text_Interactive_Data; static void _sel_range_del_emit(Evas_Object *obj, Efl_Ui_Internal_Text_Interactive_Data *en); -static void _sel_init(Efl_Text_Cursor *c, Efl_Ui_Internal_Text_Interactive_Data *en); -static void _sel_enable(Evas_Object *o,Efl_Ui_Internal_Text_Interactive_Data *en, Eina_Bool emit_event); -static void _sel_extend(Efl_Text_Cursor *c, Evas_Object *o, Efl_Ui_Internal_Text_Interactive_Data *en, Eina_Bool emit_event); -static void _sel_clear(Evas_Object *o EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en, Eina_Bool emit_event); -static void _emit_sel_state( Eo *o, Efl_Ui_Internal_Text_Interactive_Data *en); +static void _sel_init(Efl_Text_Cursor *c, Evas_Object *o, Efl_Ui_Internal_Text_Interactive_Data *en); +static void _sel_enable(Efl_Text_Cursor *c EINA_UNUSED, Evas_Object *o EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en); +static void _sel_extend(Efl_Text_Cursor *c, Evas_Object *o, Efl_Ui_Internal_Text_Interactive_Data *en); +static void _sel_clear(Evas_Object *o EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en); static const char *_entry_selection_get(Efl_Ui_Internal_Text_Interactive *obj, Efl_Ui_Internal_Text_Interactive_Data *en); static void _entry_imf_cursor_info_set(Efl_Ui_Internal_Text_Interactive_Data *en); @@ -203,7 +201,7 @@ _entry_imf_event_commit_cb(void *data, Ecore_IMF_Context *ctx EINA_UNUSED, void { /* delete selected characters */ _sel_range_del_emit(obj, en); - _sel_clear(obj, en, EINA_TRUE); + _sel_clear(obj, en); } } @@ -628,12 +626,12 @@ _entry_imf_event_selection_set_cb(void *data, Ecore_IMF_Context *ctx EINA_UNUSED } else { - _sel_clear(obj, en, EINA_TRUE); + _sel_clear(obj, en); efl_text_cursor_position_set(cur, ev->start); - _sel_enable(obj, en, EINA_TRUE); - _sel_init(cur, en); + _sel_enable(cur, obj, en); + _sel_init(cur, obj, en); efl_text_cursor_position_set(cur, ev->end); - _sel_extend(cur, obj, en, EINA_TRUE); + _sel_extend(cur, obj, en); } } @@ -749,64 +747,18 @@ _entry_selection_get(Efl_Ui_Internal_Text_Interactive *obj EINA_UNUSED, Efl_Ui_I } static void -_sel_reset(Eo *obj, Efl_Ui_Internal_Text_Interactive_Data *en){ - if (!en->have_selection && efl_text_cursor_equal(en->sel_start, en->sel_end)) - return; - - if ( en->sel_start_pos == efl_text_cursor_position_get(en->sel_start) && - en->sel_end_pos == efl_text_cursor_position_get(en->sel_end)) - return; - - if (en->have_selection) - { - if (efl_text_cursor_equal(en->sel_start, en->sel_end)) - { - _sel_clear(obj, en, EINA_TRUE); - } - else - { - _entry_imf_cursor_info_set(en); - if (en->selection) - { - free(en->selection); - en->selection = NULL; - } - _emit_sel_state(obj, en); - } - } - else - { - if (!efl_text_cursor_equal(en->sel_start, en->sel_end)) - { - _sel_enable(obj, en, EINA_TRUE); - _entry_imf_cursor_info_set(en); - if (en->selection) - { - free(en->selection); - en->selection = NULL; - } - _emit_sel_state(obj, en); - } - } -} - -static void _sel_cursor_changed(void *data EINA_UNUSED, const Efl_Event *event EINA_UNUSED) { - Efl_Ui_Internal_Text_Interactive *obj = data; - Efl_Ui_Internal_Text_Interactive_Data *en = efl_data_scope_get(obj, MY_CLASS); - _sel_reset(obj, en); +// Eo *obj = data; } static void -_sel_init(Efl_Text_Cursor *c, Efl_Ui_Internal_Text_Interactive_Data *en) +_sel_init(Efl_Text_Cursor *c, Evas_Object *o EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en) { if (en->have_selection) return; - en->sel_start_pos = efl_text_cursor_position_get(c); _cur_pos_copy(c, en->sel_start); - en->sel_end_pos = efl_text_cursor_position_get(c); _cur_pos_copy(c, en->sel_end); en->have_selection = EINA_FALSE; @@ -818,7 +770,8 @@ _sel_init(Efl_Text_Cursor *c, Efl_Ui_Internal_Text_Interactive_Data *en) } static void -_sel_enable(Eo *o, Efl_Ui_Internal_Text_Interactive_Data *en, Eina_Bool emit_event) +_sel_enable(Efl_Text_Cursor *c EINA_UNUSED, + Evas_Object *o EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en) { if (en->have_selection) return; en->have_selection = EINA_TRUE; @@ -828,11 +781,8 @@ _sel_enable(Eo *o, Efl_Ui_Internal_Text_Interactive_Data *en, Eina_Bool emit_eve en->selection = NULL; } - if (emit_event) - { - Eina_Bool b_value = EINA_TRUE; - efl_event_callback_call(o, EFL_TEXT_INTERACTIVE_EVENT_HAVE_SELECTION_CHANGED, &b_value); - } + Eina_Bool b_value = EINA_TRUE; + efl_event_callback_call(o, EFL_TEXT_INTERACTIVE_EVENT_HAVE_SELECTION_CHANGED, &b_value); _entry_imf_context_reset(en); } @@ -841,7 +791,8 @@ _emit_sel_state( Eo *o, Efl_Ui_Internal_Text_Interactive_Data *en) { if (!efl_text_cursor_compare(en->sel_start, en->sel_end)) { - _sel_clear(o, en, EINA_TRUE); + Eina_Bool b_value = EINA_FALSE; + efl_event_callback_call(o, EFL_TEXT_INTERACTIVE_EVENT_HAVE_SELECTION_CHANGED, &b_value); } else { @@ -853,12 +804,12 @@ _emit_sel_state( Eo *o, Efl_Ui_Internal_Text_Interactive_Data *en) } static void -_sel_extend(Efl_Text_Cursor *c, Evas_Object *o, Efl_Ui_Internal_Text_Interactive_Data *en, Eina_Bool emit_event) +_sel_extend(Efl_Text_Cursor *c, Evas_Object *o, Efl_Ui_Internal_Text_Interactive_Data *en) { - _sel_enable(o, en, emit_event); + if (!en->sel_end) return; + _sel_enable(c, o, en); if (efl_text_cursor_equal(c, en->sel_end)) return; - en->sel_end_pos = efl_text_cursor_position_get(c); _cur_pos_copy(c, en->sel_end); _entry_imf_cursor_info_set(en); @@ -873,7 +824,7 @@ _sel_extend(Efl_Text_Cursor *c, Evas_Object *o, Efl_Ui_Internal_Text_Interactive } static void -_sel_clear(Evas_Object *o EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en, Eina_Bool emit_change) +_sel_clear(Evas_Object *o EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en) { en->had_sel = EINA_FALSE; if (en->selection) @@ -885,10 +836,8 @@ _sel_clear(Evas_Object *o EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en { en->have_selection = EINA_FALSE; Eina_Bool b_value = en->have_selection; - en->sel_start_pos = en->sel_end_pos = efl_text_cursor_position_get(en->sel_start); _cur_pos_copy(en->sel_start, en->sel_end); - if (emit_change) - efl_event_callback_call(o, EFL_TEXT_INTERACTIVE_EVENT_HAVE_SELECTION_CHANGED, &b_value); + efl_event_callback_call(o, EFL_TEXT_INTERACTIVE_EVENT_HAVE_SELECTION_CHANGED, &b_value); } } @@ -896,32 +845,32 @@ EOLIAN static void _efl_ui_internal_text_interactive_efl_text_interactive_all_unselect( Eo *obj, Efl_Ui_Internal_Text_Interactive_Data *en) { - _sel_clear(obj, en, EINA_TRUE); + _sel_clear(obj, en); } EOLIAN static Eina_Bool _efl_ui_internal_text_interactive_efl_text_interactive_have_selection_get( const Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en) { - if (!en->have_selection) return en->have_selection; return !efl_text_cursor_equal(en->sel_start, en->sel_end); } EOLIAN static void _efl_ui_internal_text_interactive_efl_text_interactive_all_select( - Eo *obj, Efl_Ui_Internal_Text_Interactive_Data *en EINA_UNUSED) + Eo *obj, Efl_Ui_Internal_Text_Interactive_Data *en) { if (!efl_text_interactive_selection_allowed_get(obj)) return; - Eo *c1 = efl_canvas_textblock_cursor_create(obj); - Eo *c2 = efl_canvas_textblock_cursor_create(obj); - - efl_text_cursor_move(c1, EFL_TEXT_CURSOR_MOVE_TYPE_FIRST); - efl_text_cursor_move(c2, EFL_TEXT_CURSOR_MOVE_TYPE_LAST); + Efl_Text_Cursor *cur = efl_text_interactive_main_cursor_get(obj); + _entry_imf_context_reset(en); - efl_text_interactive_selection_cursors_set(obj, c1, c2); + efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_FIRST); + _entry_imf_context_reset(en); + _sel_init(cur, obj, en); + efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_LAST); + _sel_extend(cur, obj, en); } @@ -954,7 +903,7 @@ static void _sel_range_del_emit(Evas_Object *obj, Efl_Ui_Internal_Text_Interactive_Data *en) { _range_del_emit(obj, en->sel_start, en->sel_end); - _sel_clear(obj, en, EINA_TRUE); + _sel_clear(obj, en); } static void @@ -1075,7 +1024,7 @@ _key_down_sel_pre(Efl_Ui_Internal_Text_Interactive *obj, Efl_Text_Cursor *cur, E { if (shift) { - _sel_init(cur, en); + _sel_init(cur, obj, en); } else if (en->have_selection) { @@ -1083,9 +1032,8 @@ _key_down_sel_pre(Efl_Ui_Internal_Text_Interactive *obj, Efl_Text_Cursor *cur, E if ((sel_forward && movement_forward) || (!sel_forward && !movement_forward)) _cur_pos_copy(en->sel_end, cur); else - - _cur_pos_copy(en->sel_start, cur); - _sel_clear(obj, en, EINA_TRUE); + _cur_pos_copy(en->sel_start, cur); + _sel_clear(obj, en); } } } @@ -1095,8 +1043,8 @@ _key_down_sel_post(Efl_Ui_Internal_Text_Interactive *obj, Efl_Text_Cursor *cur, { if (en->select_allow) { - if (shift) _sel_extend(cur, obj, en, EINA_TRUE); - else _sel_clear(obj, en, EINA_TRUE); + if (shift) _sel_extend(cur, obj, en); + else _sel_clear(obj, en); } } @@ -1289,7 +1237,7 @@ _key_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void _delete_emit(obj, cur, en, old_cur_pos, EINA_TRUE); } } - _sel_clear(obj, en, EINA_TRUE); + _sel_clear(obj, en); ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; } else if (!strcmp(ev->key, "Delete") || @@ -1325,7 +1273,7 @@ _key_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void _delete_emit(obj, cur, en, old_cur_pos, EINA_FALSE); } } - _sel_clear(obj, en, EINA_TRUE); + _sel_clear(obj, en); ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; } else if ((!alt) && @@ -1613,19 +1561,19 @@ _mouse_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EIN efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_START); else efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_END); - _sel_extend(cur, obj, en, EINA_TRUE); + _sel_extend(cur, obj, en); } else { en->have_selection = EINA_FALSE; en->selecting = EINA_FALSE; - _sel_clear(obj, en, EINA_TRUE); + _sel_clear(obj, en); tc = efl_canvas_textblock_cursor_create(obj); _cur_pos_copy(cur, tc); efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_START); - _sel_init(cur, en); + _sel_init(cur, obj, en); efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_LINE_END); - _sel_extend(cur, obj, en, EINA_TRUE); + _sel_extend(cur, obj, en); } goto end; } @@ -1642,20 +1590,20 @@ _mouse_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EIN efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_END); efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_CHARACTER_NEXT); } - _sel_extend(cur, obj, en, EINA_TRUE); + _sel_extend(cur, obj, en); } else { en->have_selection = EINA_FALSE; en->selecting = EINA_FALSE; - _sel_clear(obj, en, EINA_TRUE); + _sel_clear(obj, en); tc = efl_canvas_textblock_cursor_create(obj); _cur_pos_copy(cur, tc); efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_START); - _sel_init(cur, en); + _sel_init(cur, obj, en); efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_WORD_END); efl_text_cursor_move(cur, EFL_TEXT_CURSOR_MOVE_TYPE_CHARACTER_NEXT); - _sel_extend(cur, obj, en, EINA_TRUE); + _sel_extend(cur, obj, en); } goto end; } @@ -1666,13 +1614,13 @@ _mouse_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EIN { if ((en->have_selection) && (shift)) { - _sel_extend(cur, obj, en, EINA_TRUE); + _sel_extend(cur, obj, en); } else { en->selecting = EINA_TRUE; - _sel_clear(obj, en, EINA_TRUE); - _sel_init(cur, en); + _sel_clear(obj, en); + _sel_init(cur, obj, en); } } @@ -1768,10 +1716,10 @@ _mouse_move_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, vo if (en->select_allow) { - _sel_extend(cur, obj, en, EINA_TRUE); + _sel_extend(cur, obj, en); if (!efl_text_cursor_equal(en->sel_start, en->sel_end)) - _sel_enable(obj, en, EINA_TRUE); + _sel_enable(cur, obj, en); } efl_del(tc); } @@ -1806,9 +1754,7 @@ _efl_ui_internal_text_interactive_efl_object_finalize(Eo *obj, Efl_Ui_Internal_T en->sel_start = efl_canvas_textblock_cursor_create(obj); en->sel_end = efl_canvas_textblock_cursor_create(obj); - efl_event_callback_add(en->sel_start, EFL_TEXT_CURSOR_EVENT_CHANGED, - _sel_cursor_changed, obj); - efl_event_callback_add(en->sel_end, EFL_TEXT_CURSOR_EVENT_CHANGED, + efl_event_callback_add(efl_text_interactive_main_cursor_get(obj), EFL_TEXT_CURSOR_EVENT_CHANGED, _sel_cursor_changed, obj); #ifdef HAVE_ECORE_IMF @@ -1901,7 +1847,7 @@ _efl_ui_internal_text_interactive_efl_text_interactive_selection_allowed_set(Eo pd->select_allow = allowed; if (!allowed) { - _sel_clear(obj, pd, EINA_TRUE); + _sel_clear(obj, pd); } } @@ -1928,16 +1874,6 @@ _efl_ui_internal_text_interactive_efl_text_interactive_selection_cursors_get(con } EOLIAN static void -_efl_ui_internal_text_interactive_efl_text_interactive_selection_cursors_set(Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *en, Efl_Text_Cursor *start, Efl_Text_Cursor *end) -{ - en->sel_start_pos = efl_text_cursor_position_get(start); - en->sel_end_pos = efl_text_cursor_position_get(en->sel_end); - efl_text_cursor_position_set(en->sel_start, en->sel_start_pos); - en->sel_end_pos = -1; - efl_text_cursor_position_set(en->sel_end, efl_text_cursor_position_get(end)); -} - -EOLIAN static void _efl_ui_internal_text_interactive_efl_text_interactive_editable_set(Eo *obj EINA_UNUSED, Efl_Ui_Internal_Text_Interactive_Data *sd, Eina_Bool editable) { sd->editable = editable; diff --git a/src/lib/elementary/efl_ui_internal_text_interactive.eo b/src/lib/elementary/efl_ui_internal_text_interactive.eo index 0688334500..448f7a0c6c 100644 --- a/src/lib/elementary/efl_ui_internal_text_interactive.eo +++ b/src/lib/elementary/efl_ui_internal_text_interactive.eo @@ -9,7 +9,7 @@ class @beta Efl.Ui.Internal.Text.Interactive extends Efl.Canvas.Textblock implem Efl.Object.finalize; Efl.Text_Interactive.main_cursor { get; } Efl.Text_Interactive.selection_allowed { get; set; } - Efl.Text_Interactive.selection_cursors { get; set; } + Efl.Text_Interactive.selection_cursors { get; } Efl.Text_Interactive.editable { get; set; } Efl.Text_Interactive.all_unselect; Efl.Text_Interactive.all_select; diff --git a/src/tests/elementary/efl_ui_test_text.c b/src/tests/elementary/efl_ui_test_text.c index b7886544f1..a49c7e7cc9 100644 --- a/src/tests/elementary/efl_ui_test_text.c +++ b/src/tests/elementary/efl_ui_test_text.c @@ -72,45 +72,6 @@ EFL_START_TEST(text_all_select_all_unselect) ecore_main_loop_iterate(); ck_assert_int_eq(i_have_selection, 2); ck_assert_int_eq(i_selection, 1); - - /*Partial select, the select all*/ - Eo *sel1, *sel2; - i_selection = 0; - efl_text_interactive_selection_cursors_get(txt, &sel1, &sel2); - efl_text_cursor_position_set(sel1, 1); - efl_text_cursor_position_set(sel2, 2); - ck_assert_int_eq(i_selection, 2); - efl_text_interactive_all_select(txt); - ck_assert_int_eq(i_selection, 3); - ck_assert_int_eq(efl_text_cursor_position_get(sel1), 0); - ck_assert_int_eq(efl_text_cursor_position_get(sel2), 5); - - Eo *cur1 = efl_ui_textbox_cursor_create(txt); - Eo *cur2 = efl_ui_textbox_cursor_create(txt); - efl_text_cursor_position_set(cur1, 1); - efl_text_cursor_position_set(cur2, 2); - efl_text_interactive_selection_cursors_set(txt, cur1, cur2); - ck_assert_int_eq(i_selection, 4); - efl_text_interactive_selection_cursors_get(txt, &sel1, &sel2); - ck_assert_int_eq(efl_text_cursor_position_get(sel1),1); - ck_assert_int_eq(efl_text_cursor_position_get(sel2),2); - - - /*Select part then select all*/ - efl_text_interactive_all_unselect(txt); - i_have_selection = 0, i_selection = 0; - efl_text_cursor_position_set(cur1, 1); - efl_text_cursor_position_set(cur2, 2); - efl_text_interactive_selection_cursors_set(txt, cur1, cur2); - ck_assert_int_eq(i_selection, 1); - ck_assert_int_eq(i_have_selection, 1); - efl_text_interactive_all_select(txt); - ck_assert_int_eq(i_selection, 2); - ck_assert_int_eq(i_have_selection, 1); - efl_text_interactive_all_unselect(txt); - ck_assert_int_eq(i_have_selection, 2); - - efl_del(txt); efl_del(win); } |