ctxpopup: enable ctxpopup item prepend for mobile_lib 79/138079/1
authorJEONGHYUN YUN <jh0506.yun@samsung.com>
Tue, 11 Jul 2017 04:39:42 +0000 (13:39 +0900)
committerJEONGHYUN YUN <jh0506.yun@samsung.com>
Tue, 11 Jul 2017 04:41:39 +0000 (13:41 +0900)
Change-Id: I476ec842631e8e7d34073f97ec18e1b780f1b2ee
Signed-off-by: JEONGHYUN YUN <jh0506.yun@samsung.com>
src/mobile_lib/elc_ctxpopup.c

index fc2054b87d4b60cf8ea4942be82c3815119109bb..61bfd1b5ee53e11eb14c203690c13a82a235b375 100644 (file)
@@ -373,7 +373,7 @@ _multi_up_cb(void *data,
 }
 
 static void
-_item_new(Elm_Ctxpopup_Item_Data *item,
+_item_theme_set(Elm_Ctxpopup_Item_Data *item,
           char *group_name)
 {
    ELM_CTXPOPUP_DATA_GET(WIDGET(item), sd);
@@ -495,6 +495,29 @@ _items_remove(Elm_Ctxpopup_Data *sd)
    sd->items = NULL;
 }
 
+static void
+_items_sizing_eval(Evas_Object *obj,
+                   Elm_Ctxpopup_Data *sd)
+{
+   Elm_Ctxpopup_Item_Data *it;
+   Eina_List *elist;
+   int idx = 0;
+
+   sd->dir = ELM_CTXPOPUP_DIRECTION_UNKNOWN;
+
+   if (sd->visible)
+     {
+        EINA_LIST_FOREACH(sd->items, elist, it)
+          {
+             if (idx++ == 0)
+               edje_object_signal_emit(VIEW(it), "elm,state,default", "elm");
+             else
+               edje_object_signal_emit(VIEW(it), "elm,state,separator", "elm");
+          }
+        elm_layout_sizing_eval(obj);
+     }
+}
+
 static void
 _item_sizing_eval(Elm_Ctxpopup_Item_Data *item)
 {
@@ -2154,13 +2177,15 @@ _elm_ctxpopup_item_eo_base_destructor(Eo *eo_ctxpopup_it,
    eo_do_super(eo_ctxpopup_it, ELM_CTXPOPUP_ITEM_CLASS, eo_destructor());
 }
 
-EOLIAN static Elm_Object_Item*
-_elm_ctxpopup_item_append(Eo *obj, Elm_Ctxpopup_Data *sd, const char *label, Evas_Object *icon, Evas_Smart_Cb func, const void *data)
+static Elm_Ctxpopup_Item_Data *
+_item_new(Evas_Object *obj,
+          Elm_Ctxpopup_Data *sd,
+          const char *label,
+          Evas_Object *icon,
+          Evas_Smart_Cb func,
+          const void *data)
 {
-   Elm_Ctxpopup_Item_Data *it;
    Evas_Object *content, *focus_bt;
-   int idx = 0;
-   Eina_List *elist;
    Eo *eo_item;
 
    eo_item = eo_add(ELM_CTXPOPUP_ITEM_CLASS, obj, elm_obj_ctxpopup_item_init(func, data));
@@ -2178,48 +2203,64 @@ _elm_ctxpopup_item_append(Eo *obj, Elm_Ctxpopup_Data *sd, const char *label, Eva
    if (icon && label)
      {
         if (!sd->horizontal)
-          _item_new(item, "icon_text_style_item");
+          _item_theme_set(item, "icon_text_style_item");
         else
-          _item_new(item, "icon_text_style_item_horizontal");
+          _item_theme_set(item, "icon_text_style_item_horizontal");
      }
    else if (label)
      {
         if (!sd->horizontal)
-          _item_new(item, "text_style_item");
+          _item_theme_set(item, "text_style_item");
         else
-          _item_new(item, "text_style_item_horizontal");
+          _item_theme_set(item, "text_style_item_horizontal");
      }
    else
      {
         if (!sd->horizontal)
-          _item_new(item, "icon_style_item");
+          _item_theme_set(item, "icon_style_item");
         else
-          _item_new(item, "icon_style_item_horizontal");
+          _item_theme_set(item, "icon_style_item_horizontal");
      }
 
    _item_icon_set(item, icon);
    _item_label_set(item, label);
    focus_bt = _item_in_focusable_button(item);
-   elm_box_pack_end(sd->box, focus_bt);
-   sd->items = eina_list_append(sd->items, item);
    item->btn = focus_bt;
    _elm_widget_color_class_parent_set(VIEW(item), obj);
 
-   sd->dir = ELM_CTXPOPUP_DIRECTION_UNKNOWN;
+   if (_elm_config->access_mode) _access_focusable_button_register(focus_bt, item);
 
-   if (sd->visible)
-     {
-        EINA_LIST_FOREACH(sd->items, elist, it)
-          {
-             if (idx++ == 0)
-               edje_object_signal_emit(VIEW(it), "elm,state,default", "elm");
-             else
-               edje_object_signal_emit(VIEW(it), "elm,state,separator", "elm");
-          }
-        elm_layout_sizing_eval(obj);
-     }
+   return item;
+}
 
-   if (_elm_config->access_mode) _access_focusable_button_register(focus_bt, item);
+EOLIAN static Elm_Object_Item*
+_elm_ctxpopup_item_append(Eo *obj, Elm_Ctxpopup_Data *sd, const char *label, Evas_Object *icon, Evas_Smart_Cb func, const void *data)
+{
+   Elm_Ctxpopup_Item_Data *item;
+
+   item = _item_new(obj, sd, label, icon, func, data);
+   if (!item) return NULL;
+
+   elm_box_pack_end(sd->box, item->btn);
+   sd->items = eina_list_append(sd->items, item);
+
+   _items_sizing_eval(obj, sd);
+
+   return EO_OBJ(item);
+}
+
+EOLIAN static Elm_Object_Item*
+_elm_ctxpopup_item_prepend(Eo *obj EINA_UNUSED, Elm_Ctxpopup_Data *sd EINA_UNUSED, const char *label EINA_UNUSED, Evas_Object *icon EINA_UNUSED, Evas_Smart_Cb func EINA_UNUSED, const void *data EINA_UNUSED)
+{
+   Elm_Ctxpopup_Item_Data *item;
+
+   item = _item_new(obj, sd, label, icon, func, data);
+   if (!item) return NULL;
+
+   elm_box_pack_start(sd->box, item->btn);
+   sd->items = eina_list_prepend(sd->items, item);
+
+   _items_sizing_eval(obj, sd);
 
    return EO_OBJ(item);
 }
@@ -2305,13 +2346,6 @@ _elm_ctxpopup_last_item_get(Eo *obj EINA_UNUSED, Elm_Ctxpopup_Data *sd)
    return eina_list_data_get(eina_list_last(sd->items));
 }
 
-EOLIAN static Elm_Object_Item*
-_elm_ctxpopup_item_prepend(Eo *obj EINA_UNUSED, Elm_Ctxpopup_Data *sd EINA_UNUSED, const char *label EINA_UNUSED, Evas_Object *icon EINA_UNUSED, Evas_Smart_Cb func EINA_UNUSED, const void *data EINA_UNUSED)
-{
-   // the feature not provided for mobile or wearable profile
-   return NULL;
-}
-
 EOLIAN static Elm_Object_Item *
 _elm_ctxpopup_item_prev_get(Eo *eo_item EINA_UNUSED, Elm_Ctxpopup_Item_Data *item)
 {