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.
This commit is contained in:
Daniel Juyung Seo 2014-03-23 16:48:10 +09:00
parent 5b07498ba1
commit fad3a2dfc4
3 changed files with 6 additions and 6 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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);