seoz pushed a commit to branch master. http://git.enlightenment.org/core/elementary.git/commit/?id=5b370256d64d1728a07da1f65a5147e08fa80e37
commit 5b370256d64d1728a07da1f65a5147e08fa80e37 Author: Daniel Juyung Seo <[email protected]> Date: Sun Mar 23 16:48:10 2014 +0900 list/genlist/gengrid: Handle on_focus event on focus set only for key event. When you use mouse(touch) that triggers mouse up event, the focus/selection movement is done by mouse up callback, so don't need to handle on_focus event when mouse(touch) is used. You can reproduce the bug by the following step. 1. launch elementary_test -> list focus, genlist focus, gengrid focus 2. focus an item (by touch, by key) 3. move focus to left button (by touch, by key) 4. click an another item (by touch) 5. previously focused item will be unfocused again even it was unfocused at step #3/ Special thanks to Amitesh for the report. --- src/lib/elm_gengrid.c | 4 ++-- src/lib/elm_genlist.c | 4 ++-- src/lib/elm_list.c | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/lib/elm_gengrid.c b/src/lib/elm_gengrid.c index 26443ab..177d6b5 100644 --- a/src/lib/elm_gengrid.c +++ b/src/lib/elm_gengrid.c @@ -2123,13 +2123,13 @@ _elm_gengrid_smart_on_focus(Eo *obj, void *_pd EINA_UNUSED, va_list *list) (!sd->last_selected_item)) sd->last_selected_item = eina_list_data_get(sd->selected); - if (elm_widget_focus_get(obj)) + if (elm_widget_focus_get(obj) && !sd->mouse_down) { if (sd->last_focused_item) it = sd->last_focused_item; else if (sd->last_selected_item) it = sd->last_selected_item; - else if (!sd->mouse_down) + else { it = elm_gengrid_first_item_get(obj); is_sel = EINA_TRUE; diff --git a/src/lib/elm_genlist.c b/src/lib/elm_genlist.c index 888c904..bc3f089 100644 --- a/src/lib/elm_genlist.c +++ b/src/lib/elm_genlist.c @@ -2876,13 +2876,13 @@ _elm_genlist_smart_on_focus(Eo *obj, void *_pd EINA_UNUSED, va_list *list) (!sd->last_selected_item)) sd->last_selected_item = eina_list_data_get(sd->selected); - if (elm_widget_focus_get(obj)) + if (elm_widget_focus_get(obj) && !sd->mouse_down) { if (sd->last_focused_item) it = sd->last_focused_item; else if (sd->last_selected_item) it = sd->last_selected_item; - else if (!sd->mouse_down) + else { it = elm_genlist_first_item_get(obj); is_sel = EINA_TRUE; diff --git a/src/lib/elm_list.c b/src/lib/elm_list.c index 6443fef..06ae8d6 100644 --- a/src/lib/elm_list.c +++ b/src/lib/elm_list.c @@ -1071,13 +1071,13 @@ _elm_list_smart_on_focus(Eo *obj, void *_pd, va_list *list) if (!sd->items) return; - if (elm_widget_focus_get(obj)) + if (elm_widget_focus_get(obj) && !sd->mouse_down) { if (sd->last_focused_item) _elm_list_item_focused((Elm_List_Item *)sd->last_focused_item); else if (sd->last_selected_item) _elm_list_item_focused((Elm_List_Item *)sd->last_selected_item); - else if (!sd->mouse_down) + else elm_list_item_selected_set( eina_list_data_get(sd->items), EINA_TRUE); _elm_widget_focus_highlight_start(obj); --
