bu5hm4n pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=986264c55670da521ee960bea7adb7cfddf686cc

commit 986264c55670da521ee960bea7adb7cfddf686cc
Author: Woochan Lee <wc0917....@samsung.com>
Date:   Thu Oct 27 11:44:44 2016 +0200

    elm_multibuttonentry: Apply focus UI feature for the item.
    
    Summary:
    It was not implemented.
    
    Add focus_direct to give the internal box for focus UI feature.
    - Item will be deleted when got a focus highlighted then user press delete 
button.
    - Focus UI will not work if MBE shrunk.
    
    @feature
    
    Test Plan:
    Run elementary_test.
    multibuttonentry sample.
    
    Reviewers: woohyun, Hermet, bu5hm4n
    
    Subscribers: bu5hm4n, cedric, jpeg
    
    Differential Revision: https://phab.enlightenment.org/D4360
---
 src/lib/elementary/elc_multibuttonentry.c  | 43 +++++++++++++++++++++++++++---
 src/lib/elementary/elm_multibuttonentry.eo |  1 +
 2 files changed, 41 insertions(+), 3 deletions(-)

diff --git a/src/lib/elementary/elc_multibuttonentry.c 
b/src/lib/elementary/elc_multibuttonentry.c
index 472b71e..45773ab 100644
--- a/src/lib/elementary/elc_multibuttonentry.c
+++ b/src/lib/elementary/elc_multibuttonentry.c
@@ -45,6 +45,9 @@ static const Evas_Smart_Cb_Description _smart_callbacks[] = {
    {NULL, NULL}
 };
 
+static Eina_Bool _elm_multibuttonentry_smart_focus_next_enable = EINA_FALSE;
+static Eina_Bool _elm_multibuttonentry_smart_focus_direction_enable = 
EINA_TRUE;
+
 static void _entry_changed_cb(void *data, const Efl_Event *event);
 static void _entry_focus_in_cb(void *data, const Efl_Event *event);
 static void _entry_focus_out_cb(void *data, const Efl_Event *event);
@@ -301,6 +304,11 @@ _shrink_mode_set(Evas_Object *obj,
           (obj, ELM_MULTIBUTTONENTRY_EVENT_EXPAND_STATE_CHANGED, (void 
*)(uintptr_t)sd->shrink);
      }
 
+   if (sd->view_state == MULTIBUTTONENTRY_VIEW_SHRINK)
+     _elm_multibuttonentry_smart_focus_direction_enable = EINA_FALSE;
+   else
+     _elm_multibuttonentry_smart_focus_direction_enable = EINA_TRUE;
+
    if (sd->view_state != MULTIBUTTONENTRY_VIEW_SHRINK)
      _visual_guide_text_set(obj);
 }
@@ -538,13 +546,27 @@ _on_item_deleted(void *data,
 }
 
 static void
+_on_item_focused(void *data,
+                 Evas_Object *obj EINA_UNUSED,
+                 void *event_info EINA_UNUSED)
+{
+   Elm_Multibuttonentry_Item_Data *it = data;
+   ELM_MULTIBUTTONENTRY_DATA_GET_OR_RETURN(WIDGET(it), sd);
+
+   if (!it) return;
+   sd->selected_it = it;
+}
+
+static void
 _on_item_unfocused(void *data,
                    Evas_Object *obj EINA_UNUSED,
                    void *event_info EINA_UNUSED)
 {
    Elm_Multibuttonentry_Item_Data *it = data;
+   ELM_MULTIBUTTONENTRY_DATA_GET_OR_RETURN(WIDGET(it), sd);
 
    if (!it) return;
+   sd->selected_it = NULL;
    elm_layout_signal_emit(VIEW(it), "elm,state,unfocused", "elm");
 }
 
@@ -768,6 +790,8 @@ _item_new(Elm_Multibuttonentry_Data *sd,
    elm_layout_signal_callback_add
      (VIEW(item), "elm,deleted", "elm", _on_item_deleted, EO_OBJ(item));
    evas_object_smart_callback_add
+     (VIEW(item), "focused", _on_item_focused, item);
+   evas_object_smart_callback_add
      (VIEW(item), "unfocused", _on_item_unfocused, item);
    evas_object_event_callback_add
       (VIEW(item),
@@ -1602,12 +1626,25 @@ _elm_multibuttonentry_efl_canvas_group_group_del(Eo 
*obj, Elm_Multibuttonentry_D
    efl_canvas_group_del(efl_super(obj, MY_CLASS));
 }
 
-static Eina_Bool _elm_multibuttonentry_smart_focus_next_enable = EINA_FALSE;
-
 EOLIAN static Eina_Bool
 _elm_multibuttonentry_elm_widget_focus_direction_manager_is(Eo *obj 
EINA_UNUSED, Elm_Multibuttonentry_Data *sd EINA_UNUSED)
 {
-   return EINA_FALSE;
+   return _elm_multibuttonentry_smart_focus_direction_enable;
+}
+
+EOLIAN static Eina_Bool
+_elm_multibuttonentry_elm_widget_focus_direction(Eo *obj EINA_UNUSED, 
Elm_Multibuttonentry_Data *sd, const Evas_Object *base, double degree, 
Evas_Object **direction, Elm_Object_Item **direction_item, double *weight)
+{
+   Eina_Bool ret;
+   Eina_List *items = NULL;
+
+   items = eina_list_append(items, sd->box);
+
+   ret = elm_widget_focus_list_direction_get
+      (obj, base, items, eina_list_data_get, degree, direction, 
direction_item, weight);
+   eina_list_free(items);
+
+   return ret;
 }
 
 EOLIAN static Eina_Bool
diff --git a/src/lib/elementary/elm_multibuttonentry.eo 
b/src/lib/elementary/elm_multibuttonentry.eo
index d99662b..61492e9 100644
--- a/src/lib/elementary/elm_multibuttonentry.eo
+++ b/src/lib/elementary/elm_multibuttonentry.eo
@@ -182,6 +182,7 @@ class Elm.Multibuttonentry (Elm.Layout)
       Elm.Widget.focus_next_manager_is;
       Elm.Widget.focus_direction_manager_is;
       Elm.Widget.access;
+      Elm.Widget.focus_direction;
       Elm.Widget.focus_next;
       Elm.Widget.on_focus;
       Elm.Widget.translate;

-- 


Reply via email to