From: JinYong Park Date: Wed, 22 Nov 2017 02:38:09 +0000 (+0900) Subject: edje_entry: Add edje_object_part_text_select_disable_set X-Git-Tag: submit/sandbox/upgrade/efl120/20180319.053334~893 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b05055693df803cd2685375507431aa0ee55e273;p=platform%2Fupstream%2Fefl.git edje_entry: Add edje_object_part_text_select_disable_set To enable selection using keyboard input, change select_allow_set/get to only block mouse input, and add select_disable_set/get instead of original select_allow This patch is for migration efl 1.20 original patch : https://review.tizen.org/gerrit/#/c/99119/ Change-Id: Iff893280e9c726ef6575f1cab0fdc43d93b9d0cd Signed-off-by: JinYong Park --- diff --git a/src/lib/edje/Edje_Legacy.h b/src/lib/edje/Edje_Legacy.h index b735011..a049585 100644 --- a/src/lib/edje/Edje_Legacy.h +++ b/src/lib/edje/Edje_Legacy.h @@ -1411,6 +1411,24 @@ EAPI void edje_object_size_class_del(Evas_Object *obj, const char *size_class); EAPI void edje_object_part_text_select_allow_set(const Evas_Object *obj, const char *part, Eina_Bool allow); /** + * @brief Disable selection if the entry is an EXPLICIT selection mode type include keyboard input. + * + * The default is to not allow selection. This function only affects user + * selection, functions such as edje_object_part_text_select_all() and + * edje_object_part_text_select_none() are not affected. + * + * @if MOBILE @since_tizen 3.0 + * @elseif WEARABLE @since_tizen 3.0 + * @endif + * + * @param[in] part The part name + * @param[in] disable true to disble, false otherwise + * + * @ingroup Edje_Object + */ +EAPI void edje_object_part_text_select_disable_set(const Edje_Object *obj, const char *part, Eina_Bool disable); + +/** * @brief Sets the RTL orientation for this object. * * @param[in] rtl New value of flag @c true/$false diff --git a/src/lib/edje/edje_entry.c b/src/lib/edje/edje_entry.c index cfe1514..3408027 100644 --- a/src/lib/edje/edje_entry.c +++ b/src/lib/edje/edje_entry.c @@ -51,6 +51,9 @@ struct _Entry Eina_Bool prediction_allow : 1; Eina_Bool anchors_updated : 1; Eina_Bool have_link_pressed : 1; + /* TIZEN_ONLY(2161031): Add edje_object_part_text_select_disable_set API */ + Eina_Bool select_disable : 1; + /* END */ #ifdef HAVE_ECORE_IMF Eina_Bool have_preedit : 1; @@ -828,8 +831,13 @@ _edje_anchor_mouse_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EIN if ((rp->type != EDJE_RP_TYPE_TEXT) || (!rp->typedata.text)) return; en = rp->typedata.text->entry_data; + /* TIZEN_ONLY(20161031): Add edje_object_part_text_select_disable_set API if ((rp->part->select_mode == EDJE_ENTRY_SELECTION_MODE_EXPLICIT) && (en->select_allow)) + */ + if ((rp->part->select_mode == EDJE_ENTRY_SELECTION_MODE_EXPLICIT) && + (!en->select_disable) && (en->select_allow)) + /* END */ return; ignored = rp->ignore_flags & ev->event_flags; @@ -879,8 +887,13 @@ _edje_anchor_mouse_up_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_ if (!n) n = ""; len = 200 + strlen(n); buf = alloca(len); + /* TIZEN_ONLY(20161031): Add edje_object_part_text_select_disable_set API if ((rp->part->select_mode != EDJE_ENTRY_SELECTION_MODE_EXPLICIT) || (!en->select_allow)) + */ + if ((rp->part->select_mode != EDJE_ENTRY_SELECTION_MODE_EXPLICIT) || + (en->select_disable) || (!en->select_allow)) + /* END */ { if ((!ev->event_flags) || (!ignored)) { @@ -932,8 +945,13 @@ _edje_anchor_mouse_move_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EIN if ((rp->type != EDJE_RP_TYPE_TEXT) || (!rp->typedata.text)) return; en = rp->typedata.text->entry_data; + /* TIZEN_ONLY(20161031): Add edje_object_part_text_select_disable_set API if ((rp->part->select_mode == EDJE_ENTRY_SELECTION_MODE_EXPLICIT) && (en->select_allow)) + */ + if ((rp->part->select_mode == EDJE_ENTRY_SELECTION_MODE_EXPLICIT) && + (!en->select_disable) && (en->select_allow)) + /* END */ return; ignored = rp->ignore_flags & ev->event_flags; @@ -1754,7 +1772,14 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, { _compose_seq_reset(en); // dead keys here. Escape for now (should emit these) + /* TIZEN_ONLY(20161118): selection clear when escape key down _edje_emit(ed, "entry,key,escape", rp->part->name); + */ + if (en->have_selection) + _sel_clear(ed, en->cursor, rp->object, en); + else + _edje_emit(ed, "entry,key,escape", rp->part->name); + /* END */ ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; } else if (!strcmp(ev->key, "Up") || @@ -1766,7 +1791,11 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, if (en->have_selection && (evas_textblock_cursor_pos_get(en->sel_start) != evas_textblock_cursor_pos_get(en->sel_end))) ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; + /* TIZEN_ONLY(20161031): Add edje_object_part_text_select_disable_set API if (en->select_allow) + */ + if (!en->select_disable) + /* END */ { if (shift) { @@ -1784,7 +1813,11 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, } if (_curs_up(en->cursor, rp->object, en)) ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; + /* TIZEN_ONLY(20161031): Add edje_object_part_text_select_disable_set API if (en->select_allow) + */ + if (!en->select_disable) + /* END */ { if (shift) _sel_extend(ed, en->cursor, rp->object, en); else _sel_clear(ed, en->cursor, rp->object, en); @@ -1802,7 +1835,11 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, if (en->have_selection && (evas_textblock_cursor_pos_get(en->sel_start) != evas_textblock_cursor_pos_get(en->sel_end))) ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; + /* TIZEN_ONLY(20161031): Add edje_object_part_text_select_disable_set API if (en->select_allow) + */ + if (!en->select_disable) + /* END */ { if (shift) { @@ -1820,7 +1857,11 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, } if (_curs_down(en->cursor, rp->object, en)) ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; + /* TIZEN_ONLY(20161031): Add edje_object_part_text_select_disable_set API if (en->select_allow) + */ + if (!en->select_disable) + /* END */ { if (shift) _sel_extend(ed, en->cursor, rp->object, en); else _sel_clear(ed, en->cursor, rp->object, en); @@ -1836,7 +1877,11 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, if (en->have_selection && (evas_textblock_cursor_pos_get(en->sel_start) != evas_textblock_cursor_pos_get(en->sel_end))) ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; + /* TIZEN_ONLY(20161031): Add edje_object_part_text_select_disable_set API if (en->select_allow) + */ + if (!en->select_disable) + /* END */ { if (shift) { @@ -1863,7 +1908,11 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, /* If control is pressed, go to the start of the word */ if (control) evas_textblock_cursor_word_start(en->cursor); #endif + /* TIZEN_ONLY(20161031): Add edje_object_part_text_select_disable_set API if (en->select_allow) + */ + if (!en->select_disable) + /* END */ { if (shift) _sel_extend(ed, en->cursor, rp->object, en); else _sel_clear(ed, en->cursor, rp->object, en); @@ -1878,7 +1927,11 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, if (en->have_selection && (evas_textblock_cursor_pos_get(en->sel_start) != evas_textblock_cursor_pos_get(en->sel_end))) ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; + /* TIZEN_ONLY(20161031): Add edje_object_part_text_select_disable_set API if (en->select_allow) + */ + if (!en->select_disable) + /* END */ { if (shift) { @@ -1905,7 +1958,11 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, #endif if (evas_textblock_cursor_char_next(en->cursor)) ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; + /* TIZEN_ONLY(20161031): Add edje_object_part_text_select_disable_set API if (en->select_allow) + */ + if (!en->select_disable) + /* END */ { if (shift) _sel_extend(ed, en->cursor, rp->object, en); else _sel_clear(ed, en->cursor, rp->object, en); @@ -1992,7 +2049,11 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, ((!strcmp(ev->key, "KP_Home")) && !ev->string))) { _compose_seq_reset(en); + /* TIZEN_ONLY(20161031): Add edje_object_part_text_select_disable_set API if (en->select_allow) + */ + if (!en->select_disable) + /* END */ { if (shift) _sel_start(en->cursor, rp->object, en); else _sel_clear(ed, en->cursor, rp->object, en); @@ -2001,7 +2062,11 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, _curs_start(en->cursor, rp->object, en); else _curs_lin_start(en->cursor, rp->object, en); + /* TIZEN_ONLY(20161031): Add edje_object_part_text_select_disable_set API if (en->select_allow) + */ + if (!en->select_disable) + /* END */ { if (shift) _sel_extend(ed, en->cursor, rp->object, en); } @@ -2014,7 +2079,11 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, ((!strcmp(ev->key, "KP_End")) && !ev->string))) { _compose_seq_reset(en); + /* TIZEN_ONLY(20161031): Add edje_object_part_text_select_disable_set API if (en->select_allow) + */ + if (!en->select_disable) + /* END */ { if (shift) _sel_start(en->cursor, rp->object, en); else _sel_clear(ed, en->cursor, rp->object, en); @@ -2023,7 +2092,11 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, _curs_end(en->cursor, rp->object, en); else _curs_lin_end(en->cursor, rp->object, en); + /* TIZEN_ONLY(20161031): Add edje_object_part_text_select_disable_set API if (en->select_allow) + */ + if (!en->select_disable) + /* END */ { if (shift) _sel_extend(ed, en->cursor, rp->object, en); } @@ -2215,7 +2288,11 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, (!strcmp(ev->key, "KP_Prior") && !ev->string)) { _compose_seq_reset(en); + /* TIZEN_ONLY(20161031): Add edje_object_part_text_select_disable_set API if (en->select_allow) + */ + if (!en->select_disable) + /* END */ { if (shift) _sel_start(en->cursor, rp->object, en); else _sel_clear(ed, en->cursor, rp->object, en); @@ -2225,7 +2302,11 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, evas_textblock_cursor_line_set(en->cursor, 0); _curs_lin_start(en->cursor, rp->object, en); } + /* TIZEN_ONLY(20161031): Add edje_object_part_text_select_disable_set API if (en->select_allow) + */ + if (!en->select_disable) + /* END */ { if (shift) _sel_extend(ed, en->cursor, rp->object, en); else _sel_clear(ed, en->cursor, rp->object, en); @@ -2238,7 +2319,11 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, (!strcmp(ev->key, "KP_Next") && !ev->string)) { _compose_seq_reset(en); + /* TIZEN_ONLY(20161031): Add edje_object_part_text_select_disable_set API if (en->select_allow) + */ + if (!en->select_disable) + /* END */ { if (shift) _sel_start(en->cursor, rp->object, en); else _sel_clear(ed, en->cursor, rp->object, en); @@ -2249,7 +2334,11 @@ _edje_key_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, evas_textblock_cursor_line_set(en->cursor, last); _curs_lin_end(en->cursor, rp->object, en); } + /* TIZEN_ONLY(20161031): Add edje_object_part_text_select_disable_set API if (en->select_allow) + */ + if (!en->select_disable) + /* END */ { if (shift) _sel_extend(ed, en->cursor, rp->object, en); else _sel_clear(ed, en->cursor, rp->object, en); @@ -2538,7 +2627,11 @@ _edje_part_mouse_down_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_ en->select_mod_start = EINA_FALSE; en->select_mod_end = EINA_FALSE; + /* TIZEN_ONLY(20161031): Add edje_object_part_text_select_disable_set API if (en->select_allow && ev->button != 2) dosel = EINA_TRUE; + */ + if (!en->select_disable && en->select_allow && ev->button != 2) dosel = EINA_TRUE; + /* END */ if (dosel) { if (ev->flags & EVAS_BUTTON_TRIPLE_CLICK) @@ -2720,7 +2813,11 @@ _edje_part_mouse_up_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UN /* cx cy are unused but needed in mouse down, please bear with it */ tc = _edje_cursor_char_coord_set(rp, ev->canvas.x, ev->canvas.y, &cx, &cy); + /* TIZEN_ONLY(20161031): Add edje_object_part_text_select_disable_set API if (en->select_allow) + */ + if ((!en->select_disable) && (en->select_allow)) + /* END */ { if (rp->part->select_mode == EDJE_ENTRY_SELECTION_MODE_EXPLICIT) { @@ -2821,7 +2918,11 @@ _edje_part_mouse_move_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_ _curs_lin_end(en->cursor, rp->object, en); } } + /* TIZEN_ONLY(20161031): Add edje_object_part_text_select_disable_set API if (en->select_allow) + */ + if ((!en->select_disable) && (en->select_allow)) + /* END */ { if (rp->part->select_mode == EDJE_ENTRY_SELECTION_MODE_EXPLICIT) { @@ -2988,6 +3089,9 @@ _edje_entry_real_part_init(Edje *ed, Edje_Real_Part *rp) txt = (Edje_Part_Description_Text *)rp->chosen_description; en->select_allow = EINA_FALSE; + /* TIZEN_ONLY(20161031): Add edje_object_part_text_select_disable_set API */ + en->select_disable = EINA_TRUE; + /* END */ if (txt && edje_string_get(&txt->text.repch)) evas_object_textblock_replace_char_set(rp->object, edje_string_get(&txt->text.repch)); else @@ -3635,6 +3739,33 @@ _edje_entry_select_allow_get(const Edje_Real_Part *rp) return en->select_allow; } +/* TIZEN_ONLY(20161031): Add edje_object_part_text_select_disable_set API */ +void +_edje_entry_select_disable_set(Edje_Real_Part *rp, Eina_Bool disable) +{ + Entry *en; + + if ((rp->type != EDJE_RP_TYPE_TEXT) || + (!rp->typedata.text)) return; + en = rp->typedata.text->entry_data; + if (!en) return; + + en->select_disable = disable; +} + +Eina_Bool +_edje_entry_select_disable_get(const Edje_Real_Part *rp) +{ + Entry *en; + + if ((rp->type != EDJE_RP_TYPE_TEXT) || + (!rp->typedata.text)) return EINA_FALSE; + en = rp->typedata.text->entry_data; + if (!en) return EINA_FALSE; + return en->select_disable; +} +/* END */ + void _edje_entry_select_abort(Edje_Real_Part *rp) { diff --git a/src/lib/edje/edje_private.h b/src/lib/edje/edje_private.h index 03299b3..c03e637 100644 --- a/src/lib/edje/edje_private.h +++ b/src/lib/edje/edje_private.h @@ -2927,6 +2927,10 @@ void _edje_entry_cursor_geometry_get(Edje_Real_Part *rp, Evas_Coord *cx, Evas_Co void _edje_entry_user_insert(Edje_Real_Part *rp, const char *text); void _edje_entry_select_allow_set(Edje_Real_Part *rp, Eina_Bool allow); Eina_Bool _edje_entry_select_allow_get(const Edje_Real_Part *rp); +/* TIZEN_ONLY(20161031): Add edje_object_part_text_select_disable_set API */ +void _edje_entry_select_disable_set(Edje_Real_Part *rp, Eina_Bool disable); +Eina_Bool _edje_entry_select_disable_get(const Edje_Real_Part *rp); +/* END */ void _edje_entry_select_abort(Edje_Real_Part *rp); void *_edje_entry_imf_context_get(Edje_Real_Part *rp); Eina_Bool _edje_entry_cursor_next(Edje_Real_Part *rp, Edje_Cursor cur); @@ -3105,6 +3109,9 @@ void _part_text_item_geometry_get(Eo *obj, void *_pd, va_list *list); void _part_text_cursor_geometry_get(Eo *obj, void *_pd, va_list *list); void _part_text_user_insert(Eo *obj, void *_pd, va_list *list); void _part_text_select_allow_set(Eo *obj, void *_pd, va_list *list); +/* TIZEN_ONLY(20161031): Add edje_object_part_text_select_disable_set API */ +void _part_text_select_disable_set(Eo *obj, void *_pd, va_list *list); +/* END */ void _part_text_select_abort(Eo *obj, void *_pd, va_list *list); void _part_text_select_begin(Eo *obj, void *_pd, va_list *list); void _part_text_select_extend(Eo *obj, void *_pd, va_list *list); diff --git a/src/lib/edje/edje_program.c b/src/lib/edje/edje_program.c index 53c9998..fd9ca75 100644 --- a/src/lib/edje/edje_program.c +++ b/src/lib/edje/edje_program.c @@ -1769,7 +1769,11 @@ _edje_param_native_get(Edje *ed, Edje_Real_Part *rp, const char *name, Edje_Exte { param->name = name; param->type = EDJE_EXTERNAL_PARAM_TYPE_BOOL; + /* TIZEN_ONLY(20161031): Add edje_object_part_text_select_disable_set API param->i = _edje_entry_select_allow_get(rp); + */ + param->i = !_edje_entry_select_disable_get(rp); + /* END */ return param; } } @@ -1904,7 +1908,11 @@ _edje_param_native_set(Edje *ed, Edje_Real_Part *rp, const char *name, const Edj { if (param->type != EDJE_EXTERNAL_PARAM_TYPE_BOOL) return EINA_FALSE; + /* TIZEN_ONLY(20161031): Add edje_object_part_text_select_disable_set API _edje_entry_select_allow_set(rp, param->i); + */ + _edje_entry_select_disable_set(rp, !param->i); + /* END */ return EINA_TRUE; } } diff --git a/src/lib/edje/edje_util.c b/src/lib/edje/edje_util.c index 16216e0..2bac7f5 100644 --- a/src/lib/edje/edje_util.c +++ b/src/lib/edje/edje_util.c @@ -2185,6 +2185,23 @@ edje_object_part_text_select_allow_set(const Eo *obj, const char *part, Eina_Boo _edje_entry_select_allow_set(rp, allow); } +/* TIZEN_ONLY(20161031): Add edje_object_part_text_select_disable_set API */ +EAPI void +edje_object_part_text_select_disable_set(const Eo *obj, const char *part, Eina_Bool disable) +{ + Edje_Real_Part *rp; + Edje *ed; + + ed = _edje_fetch(obj); + + if ((!ed) || (!part)) return; + rp = _edje_real_part_recursive_get(&ed, part); + if (!rp) return; + if (rp->part->entry_mode > EDJE_ENTRY_EDIT_MODE_NONE) + _edje_entry_select_disable_set(rp, disable); +} +/* END */ + EAPI void edje_object_part_text_select_abort(const Eo *obj, const char *part) {