From: WooHyun Jung <wh0705.jung@samsung.com>
authorWooHyun Jung <wh0705.jung@samsung.com>
Mon, 21 Feb 2011 05:53:23 +0000 (05:53 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 21 Feb 2011 05:53:23 +0000 (05:53 +0000)
Subject: RE: [E-devel] One bug in _edje_key_down_cb func (in
edje_entry.c)

I found one bug in _edje_key_down_cb func (in edje_entry.c)

When I input "Backspace" in an entry object,  _signal_cursor_chagned_func(in
elm_entry.c) is not called.

This is because the following code in _edje_key_down_cb func (in edje_entry.c)
is not called.

 if ((evas_textblock_cursor_compare(tc, en->cursor)) && (!cursor_changed))
    _edje_emit(ed, "cursor,changed", rp->part->name);

Why not called ? Because ~ evas_textblock_cursor_compare(tc, en->cursor)
returns 0.

(i.e. old cursor and current cursor have the same position information)

I think old cursor should keep its position without any updating.

But in evas_textblock_cursor_char_delete() func, called by _backsapce func
(in edje_entry.c) -

old cursor's postion is updated as the current position.

git-svn-id: http://svn.enlightenment.org/svn/e/trunk/edje@57199 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/edje_entry.c

index 08c1b87..c75a738 100644 (file)
@@ -1016,7 +1016,7 @@ _edje_key_down_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, v
    Eina_Bool control, alt, shift;
    Eina_Bool multiline;
    Eina_Bool cursor_changed;
-   Evas_Textblock_Cursor *tc;
+   int old_cur_pos;
    if (!rp) return;
    en = rp->entry_data;
    if ((!en) || (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK) ||
@@ -1036,8 +1036,7 @@ _edje_key_down_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, v
      }
 #endif
 
-   tc = evas_object_textblock_cursor_new(rp->object);
-   evas_textblock_cursor_copy(en->cursor, tc);
+   old_cur_pos = evas_textblock_cursor_pos_get(en->cursor);
 
    control = evas_key_modifier_is_set(ev->modifiers, "Control");
    alt = evas_key_modifier_is_set(ev->modifiers, "Alt");
@@ -1343,9 +1342,8 @@ _edje_key_down_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, v
              ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
           }
      }
-   if ((evas_textblock_cursor_compare(tc, en->cursor)) && (!cursor_changed))
+   if ((old_cur_pos != evas_textblock_cursor_pos_get(en->cursor)) && (!cursor_changed))
       _edje_emit(ed, "cursor,changed", rp->part->name);
-   evas_textblock_cursor_free(tc);
 
 #ifdef HAVE_ECORE_IMF
    if (en->imf_context)