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

-- 


Reply via email to