edje_entry: Add edje_object_part_text_select_disable_set
authorJinYong Park <j4939.park@samsung.com>
Wed, 22 Nov 2017 02:38:09 +0000 (11:38 +0900)
committerJiyoun Park <jy0703.park@samsung.com>
Thu, 21 Dec 2017 09:24:04 +0000 (18:24 +0900)
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 <j4939.park@samsung.com>
src/lib/edje/Edje_Legacy.h
src/lib/edje/edje_entry.c
src/lib/edje/edje_private.h
src/lib/edje/edje_program.c
src/lib/edje/edje_util.c

index b735011..a049585 100644 (file)
@@ -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
index cfe1514..3408027 100644 (file)
@@ -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)
 {
index 03299b3..c03e637 100644 (file)
@@ -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);
index 53c9998..fd9ca75 100644 (file)
@@ -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;
                }
           }
index 16216e0..2bac7f5 100644 (file)
@@ -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)
 {