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.
devs/felipealmeida/promises
Daniel Juyung Seo 10 years ago
parent 5b07498ba1
commit fad3a2dfc4
  1. 4
      legacy/elementary/src/lib/elm_gengrid.c
  2. 4
      legacy/elementary/src/lib/elm_genlist.c
  3. 4
      legacy/elementary/src/lib/elm_list.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;

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

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

Loading…
Cancel
Save