Eolian: Integration of Gengrid and Gengrid Pan
authorDaniel Zaoui <daniel.zaoui@samsung.com>
Tue, 1 Apr 2014 11:50:40 +0000 (14:50 +0300)
committerDaniel Zaoui <daniel.zaoui@samsung.com>
Tue, 1 Apr 2014 11:52:14 +0000 (14:52 +0300)
src/lib/Makefile.am
src/lib/elm_gengrid.c
src/lib/elm_gengrid.eo [new file with mode: 0644]
src/lib/elm_gengrid_eo.h
src/lib/elm_gengrid_pan.eo [new file with mode: 0644]
src/lib/elm_widget_gengrid.h

index e3c48cf..aab7716 100644 (file)
@@ -595,6 +595,10 @@ BUILT_SOURCES = \
                elm_flipselector.eo.h \
                elm_flip.eo.c \
                elm_flip.eo.h \
+               elm_gengrid.eo.c \
+               elm_gengrid.eo.h \
+               elm_gengrid_pan.eo.c \
+               elm_gengrid_pan.eo.h \
                elm_genlist.eo.c \
                elm_genlist.eo.h \
                elm_genlist_pan.eo.c \
@@ -724,6 +728,8 @@ EXTRA_DIST += \
             elc_fileselector_entry.eo \
             elm_flipselector.eo \
             elm_flip.eo \
+            elm_gengrid.eo \
+            elm_gengrid_pan.eo \
             elm_genlist.eo \
             elm_genlist_pan.eo \
             elm_gesture_layer.eo \
@@ -807,6 +813,8 @@ nodist_includesunstable_HEADERS = \
                                  elc_fileselector_entry.eo.h \
                                  elm_flipselector.eo.h \
                                  elm_flip.eo.h \
+                                 elm_gengrid.eo.h \
+                                 elm_gengrid_pan.eo.h \
                                  elm_genlist.eo.h \
                                  elm_genlist_pan.eo.h \
                                  elm_gesture_layer.eo.h \
index 0f359f5..71cfed4 100644 (file)
@@ -8,15 +8,11 @@
 #include "elm_widget_gengrid.h"
 #include "elm_interface_scrollable.h"
 
-EAPI Eo_Op ELM_OBJ_GENGRID_PAN_BASE_ID = EO_NOOP;
-
 #define MY_PAN_CLASS ELM_OBJ_GENGRID_PAN_CLASS
 
 #define MY_PAN_CLASS_NAME "Elm_Gengrid_Pan"
 #define MY_PAN_CLASS_NAME_LEGACY "elm_gengrid_pan"
 
-EAPI Eo_Op ELM_OBJ_GENGRID_BASE_ID = EO_NOOP;
-
 #define MY_CLASS ELM_OBJ_GENGRID_CLASS
 
 #define MY_CLASS_NAME "Elm_Gengrid"
@@ -90,7 +86,7 @@ static const Evas_Smart_Cb_Description _smart_callbacks[] = {
 static void
 _item_show_region(void *data)
 {
-   Elm_Gengrid_Smart_Data *sd = data;
+   Elm_Gengrid_Data *sd = data;
    Evas_Coord cvw, cvh, it_xpos = 0, it_ypos = 0, col = 0, row = 0, minx = 0, miny = 0;
    Evas_Coord vw = 0, vh = 0;
    Elm_Gen_Item *it = NULL;
@@ -248,33 +244,24 @@ _calc_job(void *data)
    sd->calc_job = NULL;
 }
 
-static void
-_elm_gengrid_pan_destructor(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
+EOLIAN static void
+_elm_gengrid_pan_eo_base_destructor(Eo *obj, Elm_Gengrid_Pan_Data *psd)
 {
-   Elm_Gengrid_Pan_Smart_Data *psd = _pd;
    eo_data_unref(psd->wobj, psd->wsd);
    eo_do_super(obj, MY_PAN_CLASS, eo_destructor());
 }
 
-static void
-_elm_gengrid_pan_smart_move(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static void
+_elm_gengrid_pan_evas_smart_move(Eo *obj EINA_UNUSED, Elm_Gengrid_Pan_Data *psd, Evas_Coord _gen_param2 EINA_UNUSED, Evas_Coord _gen_param3 EINA_UNUSED)
 {
-   Elm_Gengrid_Pan_Smart_Data *psd = _pd;
-   va_arg(*list, Evas_Coord);
-   va_arg(*list, Evas_Coord);
-
    ecore_job_del(psd->wsd->calc_job);
    psd->wsd->calc_job = ecore_job_add(_calc_job, psd->wobj);
 }
 
-static void
-_elm_gengrid_pan_smart_resize(Eo *obj, void *_pd, va_list *list)
+EOLIAN static void
+_elm_gengrid_pan_evas_smart_resize(Eo *obj, Elm_Gengrid_Pan_Data *psd, Evas_Coord w, Evas_Coord h)
 {
    Evas_Coord ow, oh;
-   Evas_Coord w = va_arg(*list, Evas_Coord);
-   Evas_Coord h = va_arg(*list, Evas_Coord);
-
-   Elm_Gengrid_Pan_Smart_Data *psd = _pd;
 
    evas_object_geometry_get(obj, NULL, NULL, &ow, &oh);
    if ((ow == w) && (oh == h)) return;
@@ -286,7 +273,7 @@ static void
 _item_unselect(Elm_Gen_Item *it)
 {
    Elm_Gen_Item_Type *item = GG_IT(it);
-   Elm_Gengrid_Smart_Data *sd = item->wsd;
+   Elm_Gengrid_Data *sd = item->wsd;
 
    if ((it->generation < sd->generation) || (!it->highlighted))
      return;
@@ -326,7 +313,7 @@ _item_mouse_move_cb(void *data,
    Evas_Event_Mouse_Move *ev = event_info;
    Evas_Coord ox, oy, ow, oh, it_scrl_x, it_scrl_y;
    Evas_Coord minw = 0, minh = 0, x, y, dx, dy, adx, ady;
-   Elm_Gengrid_Smart_Data *sd = GG_IT(it)->wsd;
+   Elm_Gengrid_Data *sd = GG_IT(it)->wsd;
 
    if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
      {
@@ -441,7 +428,7 @@ static Eina_Bool
 _long_press_cb(void *data)
 {
    Elm_Gen_Item *it = data;
-   Elm_Gengrid_Smart_Data *sd = GG_IT(it)->wsd;
+   Elm_Gengrid_Data *sd = GG_IT(it)->wsd;
 
    it->long_timer = NULL;
    if (elm_widget_item_disabled_get(it) || (it->dragging))
@@ -469,7 +456,7 @@ static void
 _item_highlight(Elm_Gen_Item *it)
 {
    const char *selectraise = NULL;
-   Elm_Gengrid_Smart_Data *sd = GG_IT(it)->wsd;
+   Elm_Gengrid_Data *sd = GG_IT(it)->wsd;
 
    if ((sd->select_mode == ELM_OBJECT_SELECT_MODE_NONE)
        || (!sd->highlight) || (it->highlighted) ||
@@ -495,7 +482,7 @@ _item_mouse_down_cb(void *data,
    Evas_Event_Mouse_Down *ev = event_info;
    Elm_Gen_Item *it = data;
    Evas_Coord x, y;
-   Elm_Gengrid_Smart_Data *sd = GG_IT(it)->wsd;
+   Elm_Gengrid_Data *sd = GG_IT(it)->wsd;
 
    if (ev->button != 1) return;
 
@@ -569,7 +556,7 @@ _item_mouse_up_cb(void *data,
 {
    Evas_Event_Mouse_Up *ev = event_info;
    Eina_Bool dragged = EINA_FALSE;
-   Elm_Gengrid_Smart_Data *sd;
+   Elm_Gengrid_Data *sd;
    Elm_Gen_Item *it = data;
 
    if (ev->button != 1) return;
@@ -753,7 +740,7 @@ _item_realize(Elm_Gen_Item *it)
 {
    char buf[1024];
    char style[1024];
-   Elm_Gengrid_Smart_Data *sd = GG_IT(it)->wsd;
+   Elm_Gengrid_Data *sd = GG_IT(it)->wsd;
 
    if ((it->realized) ||
        (it->generation < sd->generation))
@@ -919,7 +906,7 @@ _reorder_item_move_animator_cb(void *data)
    Elm_Gen_Item *it = data;
    Evas_Coord dx, dy;
    double tt, t;
-   Elm_Gengrid_Smart_Data *sd = GG_IT(it)->wsd;
+   Elm_Gengrid_Data *sd = GG_IT(it)->wsd;
 
    tt = REORDER_EFFECT_TIME;
    t = ((0.0 > (t = ecore_loop_time_get() -
@@ -992,7 +979,7 @@ _item_place(Elm_Gen_Item *it,
    Evas_Coord x, y, ox, oy, cvx, cvy, cvw, cvh, iw, ih, ww;
    Evas_Coord tch, tcw, alignw = 0, alignh = 0, vw, vh;
    Eina_Bool reorder_item_move_forward = EINA_FALSE;
-   Elm_Gengrid_Smart_Data *wsd;
+   Elm_Gengrid_Data *wsd;
    Eina_Bool was_realized;
    Elm_Gen_Item_Type *item;
    long items_count;
@@ -1293,7 +1280,7 @@ _item_place(Elm_Gen_Item *it,
 }
 
 static void
-_group_item_place(Elm_Gengrid_Pan_Smart_Data *psd)
+_group_item_place(Elm_Gengrid_Pan_Data *psd)
 {
    Evas_Coord iw, ih, vw, vh;
    Eina_Bool was_realized;
@@ -1330,14 +1317,13 @@ _group_item_place(Elm_Gengrid_Pan_Smart_Data *psd)
      }
 }
 
-static void
-_elm_gengrid_pan_smart_calculate(Eo *obj EINA_UNUSED, void *_pd, va_list *list EINA_UNUSED)
+EOLIAN static void
+_elm_gengrid_pan_evas_smart_calculate(Eo *obj EINA_UNUSED, Elm_Gengrid_Pan_Data *psd)
 {
    Evas_Coord cx = 0, cy = 0;
    Elm_Gen_Item *it;
 
-   Elm_Gengrid_Pan_Smart_Data *psd = _pd;
-   Elm_Gengrid_Smart_Data *sd = psd->wsd;
+   Elm_Gengrid_Data *sd = psd->wsd;
 
    if (!sd->nmax) return;
 
@@ -1413,49 +1399,33 @@ _elm_gengrid_pan_smart_calculate(Eo *obj EINA_UNUSED, void *_pd, va_list *list E
      _elm_widget_focus_highlight_start(psd->wobj);
 }
 
-static void
-_elm_gengrid_pan_smart_pos_set(Eo *obj, void *_pd, va_list *list)
+EOLIAN static void
+_elm_gengrid_pan_elm_pan_pos_set(Eo *obj, Elm_Gengrid_Pan_Data *psd, Evas_Coord x, Evas_Coord y)
 {
-   Evas_Coord x = va_arg(*list, Evas_Coord);
-   Evas_Coord y = va_arg(*list, Evas_Coord);
-   Elm_Gengrid_Pan_Smart_Data *psd = _pd;
-
    if ((x == psd->wsd->pan_x) && (y == psd->wsd->pan_y)) return;
    psd->wsd->pan_x = x;
    psd->wsd->pan_y = y;
    evas_object_smart_changed(obj);
 }
 
-static void
-_elm_gengrid_pan_smart_pos_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static void
+_elm_gengrid_pan_elm_pan_pos_get(Eo *obj EINA_UNUSED, Elm_Gengrid_Pan_Data *psd, Evas_Coord *x, Evas_Coord *y)
 {
-   Evas_Coord *x = va_arg(*list, Evas_Coord *);
-   Evas_Coord *y = va_arg(*list, Evas_Coord *);
-   Elm_Gengrid_Pan_Smart_Data *psd = _pd;
-
    if (x) *x = psd->wsd->pan_x;
    if (y) *y = psd->wsd->pan_y;
 }
 
-static void
-_elm_gengrid_pan_smart_content_size_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static void
+_elm_gengrid_pan_elm_pan_content_size_get(Eo *obj EINA_UNUSED, Elm_Gengrid_Pan_Data *psd, Evas_Coord *w, Evas_Coord *h)
 {
-   Evas_Coord *w = va_arg(*list, Evas_Coord *);
-   Evas_Coord *h = va_arg(*list, Evas_Coord *);
-   Elm_Gengrid_Pan_Smart_Data *psd = _pd;
-
    if (w) *w = psd->wsd->minw;
    if (h) *h = psd->wsd->minh;
 }
 
-static void
-_elm_gengrid_pan_smart_pos_max_get(Eo *obj, void *_pd, va_list *list)
+EOLIAN static void
+_elm_gengrid_pan_elm_pan_pos_max_get(Eo *obj, Elm_Gengrid_Pan_Data *psd, Evas_Coord *x, Evas_Coord *y)
 {
    Evas_Coord ow, oh;
-   Evas_Coord *x = va_arg(*list, Evas_Coord *);
-   Evas_Coord *y = va_arg(*list, Evas_Coord *);
-
-   Elm_Gengrid_Pan_Smart_Data *psd = _pd;
 
    evas_object_geometry_get(obj, NULL, NULL, &ow, &oh);
    if (x)
@@ -1464,14 +1434,10 @@ _elm_gengrid_pan_smart_pos_max_get(Eo *obj, void *_pd, va_list *list)
      *y = (oh < psd->wsd->minh) ? psd->wsd->minh - oh : 0;
 }
 
-static void
-_elm_gengrid_pan_smart_pos_min_get(Eo *obj, void *_pd, va_list *list)
+EOLIAN static void
+_elm_gengrid_pan_elm_pan_pos_min_get(Eo *obj, Elm_Gengrid_Pan_Data *psd, Evas_Coord *x, Evas_Coord *y)
 {
    Evas_Coord mx = 0, my = 0;
-   Evas_Coord *x = va_arg(*list, Evas_Coord *);
-   Evas_Coord *y = va_arg(*list, Evas_Coord *);
-
-   Elm_Gengrid_Pan_Smart_Data *psd = _pd;
 
    eo_do(obj, elm_obj_pan_pos_max_get(&mx, &my));
    if (x)
@@ -1480,39 +1446,13 @@ _elm_gengrid_pan_smart_pos_min_get(Eo *obj, void *_pd, va_list *list)
      *y = -my * psd->wsd->align_y;
 }
 
-static void
-_gengrid_pan_class_constructor(Eo_Class *klass)
-{
-      const Eo_Op_Func_Description func_desc[] = {
-           EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_DESTRUCTOR), _elm_gengrid_pan_destructor),
-
-           EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_RESIZE), _elm_gengrid_pan_smart_resize),
-           EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_MOVE), _elm_gengrid_pan_smart_move),
-           EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_CALCULATE), _elm_gengrid_pan_smart_calculate),
-           EO_OP_FUNC(ELM_OBJ_PAN_ID(ELM_OBJ_PAN_SUB_ID_POS_SET), _elm_gengrid_pan_smart_pos_set),
-           EO_OP_FUNC(ELM_OBJ_PAN_ID(ELM_OBJ_PAN_SUB_ID_POS_GET), _elm_gengrid_pan_smart_pos_get),
-           EO_OP_FUNC(ELM_OBJ_PAN_ID(ELM_OBJ_PAN_SUB_ID_POS_MAX_GET), _elm_gengrid_pan_smart_pos_max_get),
-           EO_OP_FUNC(ELM_OBJ_PAN_ID(ELM_OBJ_PAN_SUB_ID_POS_MIN_GET), _elm_gengrid_pan_smart_pos_min_get),
-           EO_OP_FUNC(ELM_OBJ_PAN_ID(ELM_OBJ_PAN_SUB_ID_CONTENT_SIZE_GET), _elm_gengrid_pan_smart_content_size_get),
-           EO_OP_FUNC_SENTINEL
-      };
-      eo_class_funcs_set(klass, func_desc);
-
-      evas_smart_legacy_type_register(MY_PAN_CLASS_NAME_LEGACY, klass);
-}
-
-static const Eo_Class_Description _elm_obj_gengrid_pan_class_desc = {
-     EO_VERSION,
-     MY_PAN_CLASS_NAME,
-     EO_CLASS_TYPE_REGULAR,
-     EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0),
-     NULL,
-     sizeof(Elm_Gengrid_Pan_Smart_Data),
-     _gengrid_pan_class_constructor,
-     NULL
-};
+EOLIAN static void
+_elm_gengrid_pan_class_constructor(Eo_Class *klass)
+{
+   evas_smart_legacy_type_register(MY_PAN_CLASS_NAME_LEGACY, klass);
+}
 
-EO_DEFINE_CLASS(elm_obj_gengrid_pan_class_get, &_elm_obj_gengrid_pan_class_desc, ELM_OBJ_PAN_CLASS, NULL);
+#include "elm_gengrid_pan.eo.c"
 
 static void
 _elm_gengrid_item_focused(Elm_Gen_Item *it)
@@ -1578,7 +1518,7 @@ _elm_gengrid_item_unfocused(Elm_Gen_Item *it)
 /* NOTE: this code will be used later when the item selection on key press
    becomes optional. So do not remove this.
 static Eina_Bool
-_item_focus_up(Elm_Gengrid_Smart_Data *sd)
+_item_focus_up(Elm_Gengrid_Data *sd)
 {
    unsigned int i;
    Elm_Gen_Item *prev;
@@ -1612,7 +1552,7 @@ _item_focus_up(Elm_Gengrid_Smart_Data *sd)
 }
 
 static Eina_Bool
-_item_focus_down(Elm_Gengrid_Smart_Data *sd)
+_item_focus_down(Elm_Gengrid_Data *sd)
 {
    unsigned int i;
    Elm_Gen_Item *next;
@@ -1647,7 +1587,7 @@ _item_focus_down(Elm_Gengrid_Smart_Data *sd)
 }
 
 static Eina_Bool
-_item_focus_left(Elm_Gengrid_Smart_Data *sd)
+_item_focus_left(Elm_Gengrid_Data *sd)
 {
    Elm_Gen_Item *prev;
 
@@ -1670,7 +1610,7 @@ _item_focus_left(Elm_Gengrid_Smart_Data *sd)
 }
 
 static Eina_Bool
-_item_focus_right(Elm_Gengrid_Smart_Data *sd)
+_item_focus_right(Elm_Gengrid_Data *sd)
 {
    Elm_Gen_Item *next;
 
@@ -1694,7 +1634,7 @@ _item_focus_right(Elm_Gengrid_Smart_Data *sd)
 */
 
 static Eina_Bool
-_item_multi_select_left(Elm_Gengrid_Smart_Data *sd)
+_item_multi_select_left(Elm_Gengrid_Data *sd)
 {
    Elm_Object_Item *prev;
 
@@ -1720,7 +1660,7 @@ _item_multi_select_left(Elm_Gengrid_Smart_Data *sd)
 }
 
 static Eina_Bool
-_item_multi_select_right(Elm_Gengrid_Smart_Data *sd)
+_item_multi_select_right(Elm_Gengrid_Data *sd)
 {
    Elm_Object_Item *next;
 
@@ -1746,7 +1686,7 @@ _item_multi_select_right(Elm_Gengrid_Smart_Data *sd)
 }
 
 static Eina_Bool
-_item_multi_select_up(Elm_Gengrid_Smart_Data *sd)
+_item_multi_select_up(Elm_Gengrid_Data *sd)
 {
    unsigned int i;
    Eina_Bool r = EINA_TRUE;
@@ -1760,7 +1700,7 @@ _item_multi_select_up(Elm_Gengrid_Smart_Data *sd)
 }
 
 static Eina_Bool
-_item_multi_select_down(Elm_Gengrid_Smart_Data *sd)
+_item_multi_select_down(Elm_Gengrid_Data *sd)
 {
    unsigned int i;
    Eina_Bool r = EINA_TRUE;
@@ -1774,7 +1714,7 @@ _item_multi_select_down(Elm_Gengrid_Smart_Data *sd)
 }
 
 static Eina_Bool
-_all_items_deselect(Elm_Gengrid_Smart_Data *sd)
+_all_items_deselect(Elm_Gengrid_Data *sd)
 {
    if (!sd->selected) return EINA_FALSE;
 
@@ -1786,7 +1726,7 @@ _all_items_deselect(Elm_Gengrid_Smart_Data *sd)
 }
 
 static Eina_Bool
-_item_single_select_up(Elm_Gengrid_Smart_Data *sd)
+_item_single_select_up(Elm_Gengrid_Data *sd)
 {
    unsigned int i;
    Elm_Gen_Item *prev;
@@ -1820,7 +1760,7 @@ _item_single_select_up(Elm_Gengrid_Smart_Data *sd)
 }
 
 static Eina_Bool
-_item_single_select_down(Elm_Gengrid_Smart_Data *sd)
+_item_single_select_down(Elm_Gengrid_Data *sd)
 {
    unsigned int i;
    Elm_Gen_Item *next;
@@ -1854,7 +1794,7 @@ _item_single_select_down(Elm_Gengrid_Smart_Data *sd)
 }
 
 static Eina_Bool
-_item_single_select_left(Elm_Gengrid_Smart_Data *sd)
+_item_single_select_left(Elm_Gengrid_Data *sd)
 {
    Elm_Gen_Item *prev;
 
@@ -1877,7 +1817,7 @@ _item_single_select_left(Elm_Gengrid_Smart_Data *sd)
 }
 
 static Eina_Bool
-_item_single_select_right(Elm_Gengrid_Smart_Data *sd)
+_item_single_select_right(Elm_Gengrid_Data *sd)
 {
    Elm_Gen_Item *next;
 
@@ -1899,16 +1839,10 @@ _item_single_select_right(Elm_Gengrid_Smart_Data *sd)
    return EINA_TRUE;
 }
 
-static void
-_elm_gengrid_smart_event(Eo *obj, void *_pd, va_list *list)
+EOLIAN static Eina_Bool
+_elm_gengrid_elm_widget_event(Eo *obj, Elm_Gengrid_Data *sd, Evas_Object *src, Evas_Callback_Type type, void *event_info)
 {
-   Evas_Object *src = va_arg(*list, Evas_Object *);
-   Evas_Callback_Type type = va_arg(*list, Evas_Callback_Type);
-   Evas_Event_Key_Down *ev = va_arg(*list, void *);
-   Eina_Bool *ret = va_arg(*list, Eina_Bool *);
-   Elm_Gengrid_Smart_Data *sd = _pd;
-
-   if (ret) *ret = EINA_FALSE;
+   Evas_Event_Key_Down *ev = event_info;
    (void) src;
 
    Evas_Coord x = 0;
@@ -1922,10 +1856,10 @@ _elm_gengrid_smart_event(Eo *obj, void *_pd, va_list *list)
    Elm_Object_Item *it = NULL;
    Eina_Bool sel_ret = EINA_FALSE;
 
-   if (elm_widget_disabled_get(obj)) return;
-   if (type != EVAS_CALLBACK_KEY_DOWN) return;
-   if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
-   if (!sd->items) return;
+   if (elm_widget_disabled_get(obj)) return EINA_FALSE;
+   if (type != EVAS_CALLBACK_KEY_DOWN) return EINA_FALSE;
+   if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return EINA_FALSE;
+   if (!sd->items) return EINA_FALSE;
 
    eo_do(obj,
          elm_interface_scrollable_content_pos_get(&x, &y),
@@ -1954,12 +1888,10 @@ _elm_gengrid_smart_event(Eo *obj, void *_pd, va_list *list)
         if (sel_ret)
           {
              ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
-             if (ret) *ret = EINA_TRUE;
-             return;
+             return EINA_TRUE;
           }
 
-        if (ret) *ret = EINA_FALSE;
-        return;
+        return EINA_FALSE;
      }
    else if ((!strcmp(ev->key, "Right")) ||
             ((!strcmp(ev->key, "KP_Right")) && (!ev->string)))
@@ -1982,12 +1914,10 @@ _elm_gengrid_smart_event(Eo *obj, void *_pd, va_list *list)
         if (sel_ret)
           {
              ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
-             if (ret) *ret = EINA_TRUE;
-             return;
+             return EINA_TRUE;
           }
 
-        if (ret) *ret = EINA_FALSE;
-        return;
+        return EINA_FALSE;
      }
    else if ((!strcmp(ev->key, "Up")) ||
             ((!strcmp(ev->key, "KP_Up")) && (!ev->string)))
@@ -2010,12 +1940,10 @@ _elm_gengrid_smart_event(Eo *obj, void *_pd, va_list *list)
         if (sel_ret)
           {
              ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
-             if (ret) *ret = EINA_TRUE;
-             return;
+             return EINA_TRUE;
           }
 
-        if (ret) *ret = EINA_FALSE;
-        return;
+        return EINA_FALSE;
      }
    else if ((!strcmp(ev->key, "Down")) ||
             ((!strcmp(ev->key, "KP_Down")) && (!ev->string)))
@@ -2038,12 +1966,10 @@ _elm_gengrid_smart_event(Eo *obj, void *_pd, va_list *list)
         if (sel_ret)
           {
              ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
-             if (ret) *ret = EINA_TRUE;
-             return;
+             return EINA_TRUE;
           }
 
-        if (ret) *ret = EINA_FALSE;
-        return;
+        return EINA_FALSE;
      }
    else if ((!strcmp(ev->key, "Home")) ||
             ((!strcmp(ev->key, "KP_Home")) && (!ev->string)))
@@ -2051,8 +1977,7 @@ _elm_gengrid_smart_event(Eo *obj, void *_pd, va_list *list)
         it = elm_gengrid_first_item_get(obj);
         elm_gengrid_item_selected_set(it, EINA_TRUE);
         ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
-        if (ret) *ret = EINA_TRUE;
-        return;
+        return EINA_TRUE;
      }
    else if ((!strcmp(ev->key, "End")) ||
             ((!strcmp(ev->key, "KP_End")) && (!ev->string)))
@@ -2060,8 +1985,7 @@ _elm_gengrid_smart_event(Eo *obj, void *_pd, va_list *list)
         it = elm_gengrid_last_item_get(obj);
         elm_gengrid_item_selected_set(it, EINA_TRUE);
         ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
-        if (ret) *ret = EINA_TRUE;
-        return;
+        return EINA_TRUE;
      }
    else if ((!strcmp(ev->key, "Prior")) ||
             ((!strcmp(ev->key, "KP_Prior")) && (!ev->string)))
@@ -2101,10 +2025,9 @@ _elm_gengrid_smart_event(Eo *obj, void *_pd, va_list *list)
      }
    else if (!strcmp(ev->key, "Escape"))
      {
-        if (!_all_items_deselect(sd)) return;
+        if (!_all_items_deselect(sd)) return EINA_FALSE;
         ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
-        if (ret) *ret = EINA_TRUE;
-        return;
+        return EINA_TRUE;
      }
    else if (((!strcmp(ev->key, "Return")) ||
              (!strcmp(ev->key, "KP_Enter")) ||
@@ -2114,11 +2037,11 @@ _elm_gengrid_smart_event(Eo *obj, void *_pd, va_list *list)
         it = elm_gengrid_selected_item_get(obj);
         evas_object_smart_callback_call(WIDGET(it), SIG_ACTIVATED, it);
      }
-   else return;
+   else return EINA_FALSE;
 
    ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
    eo_do(obj, elm_interface_scrollable_content_pos_set(x, y, EINA_TRUE));
-   if (ret) *ret = EINA_TRUE;
+   return EINA_TRUE;
 }
 
 /*
@@ -2176,18 +2099,15 @@ _elm_gengrid_nearest_visible_item_get(Evas_Object *obj, Elm_Object_Item *it)
    return NULL;
 }
 
-static void
-_elm_gengrid_smart_on_focus(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
+EOLIAN static Eina_Bool
+_elm_gengrid_elm_widget_on_focus(Eo *obj, Elm_Gengrid_Data *sd)
 {
-   Eina_Bool *ret = va_arg(*list, Eina_Bool *);
-   if (ret) *ret = EINA_FALSE;
    Eina_Bool int_ret = EINA_FALSE;
-   Elm_Gengrid_Smart_Data *sd = _pd;
    Elm_Object_Item *it = NULL;
    Eina_Bool is_sel = EINA_FALSE;
 
    eo_do_super(obj, MY_CLASS, elm_obj_widget_on_focus(&int_ret));
-   if (!int_ret) return;
+   if (!int_ret) return EINA_FALSE;
 
    if (elm_widget_focus_get(obj) && (sd->selected) &&
        (!sd->last_selected_item))
@@ -2228,48 +2148,37 @@ _elm_gengrid_smart_on_focus(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
           }
      }
 
-   if (ret) *ret = EINA_TRUE;
+   return EINA_TRUE;
 }
 
 static Eina_Bool _elm_gengrid_smart_focus_next_enable = EINA_FALSE;
 
-static void
-_elm_gengrid_smart_focus_next_manager_is(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list)
+EOLIAN static Eina_Bool
+_elm_gengrid_elm_widget_focus_next_manager_is(Eo *obj EINA_UNUSED, Elm_Gengrid_Data *_pd EINA_UNUSED)
 {
-   Eina_Bool *ret = va_arg(*list, Eina_Bool *);
-   *ret = _elm_gengrid_smart_focus_next_enable;
+   return _elm_gengrid_smart_focus_next_enable;
 }
 
-static void
-_elm_gengrid_smart_focus_direction_manager_is(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list)
+EOLIAN static Eina_Bool
+_elm_gengrid_elm_widget_focus_direction_manager_is(Eo *obj EINA_UNUSED, Elm_Gengrid_Data *_pd EINA_UNUSED)
 {
-   Eina_Bool *ret = va_arg(*list, Eina_Bool *);
-   *ret = EINA_FALSE;
+   return EINA_FALSE;
 }
 
-static void
-_elm_gengrid_smart_focus_next(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
+EOLIAN static Eina_Bool
+_elm_gengrid_elm_widget_focus_next(Eo *obj, Elm_Gengrid_Data *sd, Elm_Focus_Direction dir, Evas_Object **next)
 {
-   Elm_Focus_Direction dir = va_arg(*list, Elm_Focus_Direction);
-   Evas_Object **next = va_arg(*list, Evas_Object **);
-   Eina_Bool *ret = va_arg(*list, Eina_Bool *);
-   if (ret) *ret = EINA_FALSE;
-   Eina_Bool int_ret;
-
    Eina_List *items = NULL;
    Elm_Gen_Item *it;
 
-   Elm_Gengrid_Smart_Data *sd = _pd;
-
    EINA_INLIST_FOREACH(sd->items, it)
      {
         if (it->realized)
           items = eina_list_append(items, it->base.access_obj);
      }
 
-   int_ret = elm_widget_focus_list_next_get
+   return elm_widget_focus_list_next_get
             (obj, items, eina_list_data_get, dir, next);
-   if (ret) *ret = int_ret;
 }
 
 static void
@@ -2293,19 +2202,16 @@ _mirrored_set(Evas_Object *obj,
      }
 }
 
-static void
-_elm_gengrid_smart_theme(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
+EOLIAN static Eina_Bool
+_elm_gengrid_elm_widget_theme_apply(Eo *obj, Elm_Gengrid_Data *sd EINA_UNUSED)
 {
-   Eina_Bool *ret = va_arg(*list, Eina_Bool *);
-   if (ret) *ret = EINA_FALSE;
    Eina_Bool int_ret;
-
    eo_do_super(obj, MY_CLASS, elm_obj_widget_theme_apply(&int_ret));
-   if (!int_ret) return;
+   if (!int_ret) return EINA_FALSE;
 
    _mirrored_set(obj, elm_widget_mirrored_get(obj));
 
-   if (ret) *ret = EINA_TRUE;
+   return EINA_TRUE;
 }
 
 static void
@@ -2324,7 +2230,7 @@ _item_position_update(Eina_Inlist *list,
 static void
 _elm_gengrid_item_del_not_serious(Elm_Gen_Item *it)
 {
-   Elm_Gengrid_Smart_Data *sd = GG_IT(it)->wsd;
+   Elm_Gengrid_Data *sd = GG_IT(it)->wsd;
 
    elm_widget_item_pre_notify_del(it);
    it->generation = sd->generation - 1; /* This means that the item is deleted */
@@ -2349,7 +2255,7 @@ _elm_gengrid_item_del_not_serious(Elm_Gen_Item *it)
 static void
 _elm_gengrid_item_del_serious(Elm_Gen_Item *it)
 {
-   Elm_Gengrid_Smart_Data *sd = GG_IT(it)->wsd;
+   Elm_Gengrid_Data *sd = GG_IT(it)->wsd;
 
    _elm_gengrid_item_del_not_serious(it);
    sd->items = eina_inlist_remove(sd->items, EINA_INLIST_GET(it));
@@ -2565,7 +2471,7 @@ _item_focus_get_hook(Elm_Object_Item *it)
 }
 
 static void
-_elm_gengrid_clear(Evas_Object *obj,
+_internal_elm_gengrid_clear(Evas_Object *obj,
                    Eina_Bool standby)
 {
    Eina_Inlist *next, *l;
@@ -2624,7 +2530,7 @@ static void
 _item_select(Elm_Gen_Item *it)
 {
    Evas_Object *obj = WIDGET(it);
-   Elm_Gengrid_Smart_Data *sd = GG_IT(it)->wsd;
+   Elm_Gengrid_Data *sd = GG_IT(it)->wsd;
 
    if ((it->generation < sd->generation) || (it->decorate_it_set) ||
        (it->select_mode == ELM_OBJECT_SELECT_MODE_NONE) ||
@@ -2651,7 +2557,7 @@ _item_select(Elm_Gen_Item *it)
    it->walking--;
    sd->walking--;
    if ((sd->clear_me) && (!sd->walking))
-     _elm_gengrid_clear(WIDGET(it), EINA_TRUE);
+     _internal_elm_gengrid_clear(WIDGET(it), EINA_TRUE);
    else
      {
         if ((!it->walking) && (it->generation < sd->generation))
@@ -2666,7 +2572,7 @@ _item_select(Elm_Gen_Item *it)
 }
 
 static Elm_Gen_Item *
-_elm_gengrid_item_new(Elm_Gengrid_Smart_Data *sd,
+_elm_gengrid_item_new(Elm_Gengrid_Data *sd,
                       const Elm_Gen_Item_Class *itc,
                       const void *data,
                       Evas_Smart_Cb func,
@@ -2714,18 +2620,17 @@ _elm_gengrid_item_new(Elm_Gengrid_Smart_Data *sd,
 }
 
 /* common layout sizing won't apply here */
-static void
-_elm_gengrid_smart_sizing_eval(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED)
+EOLIAN static void
+_elm_gengrid_elm_layout_sizing_eval(Eo *obj EINA_UNUSED, Elm_Gengrid_Data *_pd EINA_UNUSED)
 {
    return;  /* no-op */
 }
 
-static void
-_elm_gengrid_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
+EOLIAN static void
+_elm_gengrid_evas_smart_add(Eo *obj, Elm_Gengrid_Data *priv)
 {
    Eina_Bool bounce = _elm_config->thumbscroll_bounce_enable;
-   Elm_Gengrid_Pan_Smart_Data *pan_data;
-   Elm_Gengrid_Smart_Data *priv = _pd;
+   Elm_Gengrid_Pan_Data *pan_data;
    ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
 
    eo_do_super(obj, MY_CLASS, evas_obj_smart_add());
@@ -2787,11 +2692,9 @@ _elm_gengrid_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
    eo_do(obj, elm_interface_scrollable_extern_pan_set(priv->pan_obj));
 }
 
-static void
-_elm_gengrid_smart_del(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
+EOLIAN static void
+_elm_gengrid_evas_smart_del(Eo *obj, Elm_Gengrid_Data *sd)
 {
-   Elm_Gengrid_Smart_Data *sd = _pd;
-
    elm_gengrid_clear(obj);
    eo_unref(sd->pan_obj);
    ELM_SAFE_FREE(sd->pan_obj, evas_object_del);
@@ -2802,36 +2705,25 @@ _elm_gengrid_smart_del(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
    eo_do_super(obj, MY_CLASS, evas_obj_smart_del());
 }
 
-static void
-_elm_gengrid_smart_move(Eo *obj, void *_pd, va_list *list)
+EOLIAN static void
+_elm_gengrid_evas_smart_move(Eo *obj, Elm_Gengrid_Data *sd, Evas_Coord x, Evas_Coord y)
 {
-   Evas_Coord x = va_arg(*list, Evas_Coord);
-   Evas_Coord y = va_arg(*list, Evas_Coord);
-   Elm_Gengrid_Smart_Data *sd = _pd;
-
    eo_do_super(obj, MY_CLASS, evas_obj_smart_move(x, y));
 
    evas_object_move(sd->hit_rect, x, y);
 }
 
-static void
-_elm_gengrid_smart_resize(Eo *obj, void *_pd, va_list *list)
+EOLIAN static void
+_elm_gengrid_evas_smart_resize(Eo *obj, Elm_Gengrid_Data *sd, Evas_Coord w, Evas_Coord h)
 {
-   Evas_Coord w = va_arg(*list, Evas_Coord);
-   Evas_Coord h = va_arg(*list, Evas_Coord);
-   Elm_Gengrid_Smart_Data *sd = _pd;
-
    eo_do_super(obj, MY_CLASS, evas_obj_smart_resize(w, h));
 
    evas_object_resize(sd->hit_rect, w, h);
 }
 
-static void
-_elm_gengrid_smart_member_add(Eo *obj, void *_pd, va_list *list)
+EOLIAN static void
+_elm_gengrid_evas_smart_member_add(Eo *obj, Elm_Gengrid_Data *sd, Evas_Object *member)
 {
-   Evas_Object *member = va_arg(*list, Evas_Object *);
-   Elm_Gengrid_Smart_Data *sd = _pd;
-
    eo_do_super(obj, MY_CLASS, evas_obj_smart_member_add(member));
 
    if (sd->hit_rect)
@@ -2839,7 +2731,7 @@ _elm_gengrid_smart_member_add(Eo *obj, void *_pd, va_list *list)
 }
 
 static void
-_access_obj_process(Elm_Gengrid_Smart_Data * sd, Eina_Bool is_access)
+_access_obj_process(Elm_Gengrid_Data * sd, Eina_Bool is_access)
 {
    Elm_Gen_Item *it;
 
@@ -2853,11 +2745,10 @@ _access_obj_process(Elm_Gengrid_Smart_Data * sd, Eina_Bool is_access)
      }
 }
 
-static void
-_elm_gengrid_smart_access(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static void
+_elm_gengrid_elm_widget_access(Eo *obj EINA_UNUSED, Elm_Gengrid_Data *sd, Eina_Bool acs)
 {
-   Elm_Gengrid_Smart_Data *sd = _pd;
-   _elm_gengrid_smart_focus_next_enable = va_arg(*list, int);
+   _elm_gengrid_smart_focus_next_enable = acs;
    _access_obj_process(sd, _elm_gengrid_smart_focus_next_enable);
 }
 
@@ -2870,10 +2761,9 @@ elm_gengrid_add(Evas_Object *parent)
    return obj;
 }
 
-static void
-_constructor(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
+EOLIAN static void
+_elm_gengrid_eo_base_constructor(Eo *obj, Elm_Gengrid_Data *sd)
 {
-   Elm_Gengrid_Smart_Data *sd = _pd;
    sd->obj = obj;
 
    eo_do_super(obj, MY_CLASS, eo_constructor());
@@ -2882,22 +2772,9 @@ _constructor(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
          evas_obj_smart_callbacks_descriptions_set(_smart_callbacks, NULL));
 }
 
-EAPI void
-elm_gengrid_item_size_set(Evas_Object *obj,
-                          Evas_Coord w,
-                          Evas_Coord h)
-{
-   ELM_GENGRID_CHECK(obj);
-   eo_do(obj, elm_obj_gengrid_item_size_set(w, h));
-}
-
-static void
-_item_size_set(Eo *obj, void *_pd, va_list *list)
+EOLIAN static void
+_elm_gengrid_item_size_set(Eo *obj, Elm_Gengrid_Data *sd, Evas_Coord w, Evas_Coord h)
 {
-   Evas_Coord w = va_arg(*list, Evas_Coord);
-   Evas_Coord h = va_arg(*list, Evas_Coord);
-   Elm_Gengrid_Smart_Data *sd = _pd;
-
    if ((sd->item_width == w) && (sd->item_height == h)) return;
    sd->item_width = w;
    sd->item_height = h;
@@ -2905,42 +2782,16 @@ _item_size_set(Eo *obj, void *_pd, va_list *list)
    sd->calc_job = ecore_job_add(_calc_job, obj);
 }
 
-EAPI void
-elm_gengrid_item_size_get(const Evas_Object *obj,
-                          Evas_Coord *w,
-                          Evas_Coord *h)
+EOLIAN static void
+_elm_gengrid_item_size_get(Eo *obj EINA_UNUSED, Elm_Gengrid_Data *sd, Evas_Coord *w, Evas_Coord *h)
 {
-   ELM_GENGRID_CHECK(obj);
-   eo_do((Eo *) obj, elm_obj_gengrid_item_size_get(w, h));
-}
-
-static void
-_item_size_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
-{
-   Evas_Coord *w = va_arg(*list, Evas_Coord *);
-   Evas_Coord *h = va_arg(*list, Evas_Coord *);
-   Elm_Gengrid_Smart_Data *sd = _pd;
-
    if (w) *w = sd->item_width;
    if (h) *h = sd->item_height;
 }
 
-EAPI void
-elm_gengrid_group_item_size_set(Evas_Object *obj,
-                                Evas_Coord w,
-                                Evas_Coord h)
+EOLIAN static void
+_elm_gengrid_group_item_size_set(Eo *obj, Elm_Gengrid_Data *sd, Evas_Coord w, Evas_Coord h)
 {
-   ELM_GENGRID_CHECK(obj);
-   eo_do(obj, elm_obj_gengrid_group_item_size_set(w, h));
-}
-
-static void
-_group_item_size_set(Eo *obj, void *_pd, va_list *list)
-{
-   Evas_Coord w = va_arg(*list, Evas_Coord);
-   Evas_Coord h = va_arg(*list, Evas_Coord);
-   Elm_Gengrid_Smart_Data *sd = _pd;
-
    if ((sd->group_item_width == w) && (sd->group_item_height == h)) return;
    sd->group_item_width = w;
    sd->group_item_height = h;
@@ -2948,44 +2799,18 @@ _group_item_size_set(Eo *obj, void *_pd, va_list *list)
    sd->calc_job = ecore_job_add(_calc_job, obj);
 }
 
-EAPI void
-elm_gengrid_group_item_size_get(const Evas_Object *obj,
-                                Evas_Coord *w,
-                                Evas_Coord *h)
-{
-   ELM_GENGRID_CHECK(obj);
-   eo_do((Eo *) obj, elm_obj_gengrid_group_item_size_get(w, h));
-}
-
-static void
-_group_item_size_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static void
+_elm_gengrid_group_item_size_get(Eo *obj EINA_UNUSED, Elm_Gengrid_Data *sd, Evas_Coord *w, Evas_Coord *h)
 {
-   Evas_Coord *w = va_arg(*list, Evas_Coord *);
-   Evas_Coord *h = va_arg(*list, Evas_Coord *);
-   Elm_Gengrid_Smart_Data *sd = _pd;
-
    if (w) *w = sd->group_item_width;
    if (h) *h = sd->group_item_height;
 }
 
-EAPI void
-elm_gengrid_align_set(Evas_Object *obj,
-                      double align_x,
-                      double align_y)
-{
-   ELM_GENGRID_CHECK(obj);
-   eo_do(obj, elm_obj_gengrid_align_set(align_x, align_y));
-}
-
-static void
-_align_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static void
+_elm_gengrid_align_set(Eo *obj EINA_UNUSED, Elm_Gengrid_Data *sd, double align_x, double align_y)
 {
    double old_h, old_y;
 
-   double align_x = va_arg(*list, double);
-   double align_y = va_arg(*list, double);
-   Elm_Gengrid_Smart_Data *sd = _pd;
-
    old_h = sd->align_x;
    old_y = sd->align_y;
 
@@ -3005,54 +2830,20 @@ _align_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
      evas_object_smart_calculate(sd->pan_obj);
 }
 
-EAPI void
-elm_gengrid_align_get(const Evas_Object *obj,
-                      double *align_x,
-                      double *align_y)
-{
-   ELM_GENGRID_CHECK(obj);
-   eo_do((Eo *) obj, elm_obj_gengrid_align_get(align_x, align_y));
-}
-
-static void
-_align_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static void
+_elm_gengrid_align_get(Eo *obj EINA_UNUSED, Elm_Gengrid_Data *sd, double *align_x, double *align_y)
 {
-   double *align_x = va_arg(*list, double *);
-   double *align_y = va_arg(*list, double *);
-   Elm_Gengrid_Smart_Data *sd = _pd;
-
    if (align_x) *align_x = sd->align_x;
    if (align_y) *align_y = sd->align_y;
 }
 
-EAPI Elm_Object_Item *
-elm_gengrid_item_append(Evas_Object *obj,
-                        const Elm_Gengrid_Item_Class *itc,
-                        const void *data,
-                        Evas_Smart_Cb func,
-                        const void *func_data)
-{
-   ELM_GENGRID_CHECK(obj) NULL;
-   Elm_Object_Item *ret = NULL;
-   eo_do(obj, elm_obj_gengrid_item_append(itc, data, func, func_data, &ret));
-   return ret;
-}
-
-static void
-_item_append(Eo *obj, void *_pd, va_list *list)
+EOLIAN static Elm_Object_Item*
+_elm_gengrid_item_append(Eo *obj, Elm_Gengrid_Data *sd, const Elm_Gengrid_Item_Class *itc, const void *data, Evas_Smart_Cb func, const void *func_data)
 {
    Elm_Gen_Item *it;
 
-   const Elm_Gengrid_Item_Class *itc = va_arg(*list, const Elm_Gengrid_Item_Class *);
-   const void *data = va_arg(*list, const void *);
-   Evas_Smart_Cb func = va_arg(*list, Evas_Smart_Cb);
-   const void *func_data = va_arg(*list, const void *);
-   Elm_Object_Item **ret = va_arg(*list, Elm_Object_Item **);
-   Elm_Gengrid_Smart_Data *sd = _pd;
-   *ret = NULL;
-
    it = _elm_gengrid_item_new(sd, itc, data, func, func_data);
-   if (!it) return;
+   if (!it) return NULL;
 
    sd->items = eina_inlist_append(sd->items, EINA_INLIST_GET(it));
    it->position = sd->item_count;
@@ -3064,37 +2855,16 @@ _item_append(Eo *obj, void *_pd, va_list *list)
    ecore_job_del(sd->calc_job);
    sd->calc_job = ecore_job_add(_calc_job, obj);
 
-   *ret = (Elm_Object_Item *)it;
-}
-
-EAPI Elm_Object_Item *
-elm_gengrid_item_prepend(Evas_Object *obj,
-                         const Elm_Gengrid_Item_Class *itc,
-                         const void *data,
-                         Evas_Smart_Cb func,
-                         const void *func_data)
-{
-   ELM_GENGRID_CHECK(obj) NULL;
-   Elm_Object_Item *ret = NULL;
-   eo_do(obj, elm_obj_gengrid_item_prepend(itc, data, func, func_data, &ret));
-   return ret;
+   return (Elm_Object_Item *)it;
 }
 
-static void
-_item_prepend(Eo *obj, void *_pd, va_list *list)
+EOLIAN static Elm_Object_Item*
+_elm_gengrid_item_prepend(Eo *obj, Elm_Gengrid_Data *sd, const Elm_Gengrid_Item_Class *itc, const void *data, Evas_Smart_Cb func, const void *func_data)
 {
    Elm_Gen_Item *it;
 
-   const Elm_Gengrid_Item_Class *itc = va_arg(*list, const Elm_Gengrid_Item_Class *);
-   const void *data = va_arg(*list, const void *);
-   Evas_Smart_Cb func = va_arg(*list, Evas_Smart_Cb);
-   const void *func_data = va_arg(*list, const void *);
-   Elm_Object_Item **ret = va_arg(*list, Elm_Object_Item **);
-   *ret = NULL;
-   Elm_Gengrid_Smart_Data *sd = _pd;
-
    it = _elm_gengrid_item_new(sd, itc, data, func, func_data);
-   if (!it) return;
+   if (!it) return NULL;
 
    sd->items = eina_inlist_prepend(sd->items, EINA_INLIST_GET(it));
    _item_position_update(sd->items, 0);
@@ -3105,41 +2875,19 @@ _item_prepend(Eo *obj, void *_pd, va_list *list)
    ecore_job_del(sd->calc_job);
    sd->calc_job = ecore_job_add(_calc_job, obj);
 
-   *ret = (Elm_Object_Item *)it;
-}
-
-EAPI Elm_Object_Item *
-elm_gengrid_item_insert_before(Evas_Object *obj,
-                               const Elm_Gengrid_Item_Class *itc,
-                               const void *data,
-                               Elm_Object_Item *relative,
-                               Evas_Smart_Cb func,
-                               const void *func_data)
-{
-   ELM_GENGRID_CHECK(obj) NULL;
-   Elm_Object_Item *ret = NULL;
-   eo_do(obj, elm_obj_gengrid_item_insert_before(itc, data, relative, func, func_data, &ret));
-   return ret;
+   return (Elm_Object_Item *)it;
 }
 
-static void
-_item_insert_before(Eo *obj, void *_pd, va_list *list)
+EOLIAN static Elm_Object_Item*
+_elm_gengrid_item_insert_before(Eo *obj, Elm_Gengrid_Data *sd, const Elm_Gengrid_Item_Class *itc, const void *data, Elm_Object_Item *relative, Evas_Smart_Cb func, const void *func_data)
 {
    Elm_Gen_Item *it;
    Eina_Inlist *tmp;
 
-   const Elm_Gengrid_Item_Class *itc = va_arg(*list, const Elm_Gengrid_Item_Class *);
-   const void *data = va_arg(*list, const void *);
-   Elm_Object_Item *relative = va_arg(*list, Elm_Object_Item *);
-   Evas_Smart_Cb func = va_arg(*list, Evas_Smart_Cb);
-   const void *func_data = va_arg(*list, const void *);
-   Elm_Object_Item **ret = va_arg(*list, Elm_Object_Item **);
-   *ret = NULL;
-   ELM_GENGRID_ITEM_CHECK(relative);
-   Elm_Gengrid_Smart_Data *sd = _pd;
+   ELM_GENGRID_ITEM_CHECK_OR_RETURN(relative, NULL);
 
    it = _elm_gengrid_item_new(sd, itc, data, func, func_data);
-   if (!it) return;
+   if (!it) return NULL;
    sd->items = eina_inlist_prepend_relative
        (sd->items, EINA_INLIST_GET(it),
        EINA_INLIST_GET((Elm_Gen_Item *)relative));
@@ -3153,41 +2901,19 @@ _item_insert_before(Eo *obj, void *_pd, va_list *list)
    ecore_job_del(sd->calc_job);
    sd->calc_job = ecore_job_add(_calc_job, obj);
 
-   *ret = (Elm_Object_Item *)it;
-}
-
-EAPI Elm_Object_Item *
-elm_gengrid_item_insert_after(Evas_Object *obj,
-                              const Elm_Gengrid_Item_Class *itc,
-                              const void *data,
-                              Elm_Object_Item *relative,
-                              Evas_Smart_Cb func,
-                              const void *func_data)
-{
-   ELM_GENGRID_CHECK(obj) NULL;
-   Elm_Object_Item *ret = NULL;
-   eo_do(obj, elm_obj_gengrid_item_insert_after(itc, data, relative, func, func_data, &ret));
-   return ret;
+   return (Elm_Object_Item *)it;
 }
 
-static void
-_item_insert_after(Eo *obj, void *_pd, va_list *list)
+EOLIAN static Elm_Object_Item*
+_elm_gengrid_item_insert_after(Eo *obj, Elm_Gengrid_Data *sd, const Elm_Gengrid_Item_Class *itc, const void *data, Elm_Object_Item *relative, Evas_Smart_Cb func, const void *func_data)
 {
    Elm_Gen_Item *it;
    Eina_Inlist *tmp;
 
-   const Elm_Gengrid_Item_Class *itc = va_arg(*list, const Elm_Gengrid_Item_Class *);
-   const void *data = va_arg(*list, const void *);
-   Elm_Object_Item *relative = va_arg(*list, Elm_Object_Item *);
-   Evas_Smart_Cb func = va_arg(*list, Evas_Smart_Cb);
-   const void *func_data = va_arg(*list, const void *);
-   Elm_Object_Item **ret = va_arg(*list, Elm_Object_Item **);
-   *ret = NULL;
-   ELM_GENGRID_ITEM_CHECK(relative);
-   Elm_Gengrid_Smart_Data *sd = _pd;
+   ELM_GENGRID_ITEM_CHECK_OR_RETURN(relative, NULL);
 
    it = _elm_gengrid_item_new(sd, itc, data, func, func_data);
-   if (!it) return;
+   if (!it) return NULL;
    sd->items = eina_inlist_append_relative
        (sd->items, EINA_INLIST_GET(it),
        EINA_INLIST_GET((Elm_Gen_Item *)relative));
@@ -3201,39 +2927,16 @@ _item_insert_after(Eo *obj, void *_pd, va_list *list)
    ecore_job_del(sd->calc_job);
    sd->calc_job = ecore_job_add(_calc_job, obj);
 
-   *ret = (Elm_Object_Item *)it;
-}
-
-EAPI Elm_Object_Item *
-elm_gengrid_item_sorted_insert(Evas_Object *obj,
-                               const Elm_Gengrid_Item_Class *itc,
-                               const void *data,
-                               Eina_Compare_Cb comp,
-                               Evas_Smart_Cb func,
-                               const void *func_data)
-{
-   ELM_GENGRID_CHECK(obj) NULL;
-   Elm_Object_Item *ret = NULL;
-   eo_do(obj, elm_obj_gengrid_item_sorted_insert(itc, data, comp, func, func_data, &ret));
-   return ret;
+   return (Elm_Object_Item *)it;
 }
 
-static void
-_item_sorted_insert(Eo *obj, void *_pd, va_list *list)
+EOLIAN static Elm_Object_Item*
+_elm_gengrid_item_sorted_insert(Eo *obj, Elm_Gengrid_Data *sd, const Elm_Gengrid_Item_Class *itc, const void *data, Eina_Compare_Cb comp, Evas_Smart_Cb func, const void *func_data)
 {
    Elm_Gen_Item *it;
 
-   const Elm_Gengrid_Item_Class *itc = va_arg(*list, const Elm_Gengrid_Item_Class *);
-   const void *data = va_arg(*list, const void *);
-   Eina_Compare_Cb comp = va_arg(*list, Eina_Compare_Cb);
-   Evas_Smart_Cb func = va_arg(*list, Evas_Smart_Cb);
-   const void *func_data = va_arg(*list, const void *);
-   Elm_Object_Item **ret = va_arg(*list, Elm_Object_Item **);
-   *ret = NULL;
-   Elm_Gengrid_Smart_Data *sd = _pd;
-
    it = _elm_gengrid_item_new(sd, itc, data, func, func_data);
-   if (!it) return;
+   if (!it) return NULL;
 
    if (!sd->state)
      {
@@ -3249,23 +2952,12 @@ _item_sorted_insert(Eo *obj, void *_pd, va_list *list)
    ecore_job_del(sd->calc_job);
    sd->calc_job = ecore_job_add(_calc_job, obj);
 
-   *ret = (Elm_Object_Item *)it;
-}
-
-EAPI void
-elm_gengrid_horizontal_set(Evas_Object *obj,
-                           Eina_Bool horizontal)
-{
-   ELM_GENGRID_CHECK(obj);
-   eo_do(obj, elm_obj_gengrid_horizontal_set(horizontal));
+   return (Elm_Object_Item *)it;
 }
 
-static void
-_horizontal_set(Eo *obj, void *_pd, va_list *list)
+EOLIAN static void
+_elm_gengrid_horizontal_set(Eo *obj, Elm_Gengrid_Data *sd, Eina_Bool horizontal)
 {
-   Eina_Bool horizontal = va_arg(*list, int);
-   Elm_Gengrid_Smart_Data *sd = _pd;
-
    horizontal = !!horizontal;
    if (horizontal == sd->horizontal) return;
    sd->horizontal = horizontal;
@@ -3275,35 +2967,16 @@ _horizontal_set(Eo *obj, void *_pd, va_list *list)
    sd->calc_job = ecore_job_add(_calc_job, obj);
 }
 
-EAPI Eina_Bool
-elm_gengrid_horizontal_get(const Evas_Object *obj)
+EOLIAN static Eina_Bool
+_elm_gengrid_horizontal_get(Eo *obj EINA_UNUSED, Elm_Gengrid_Data *sd)
 {
-   ELM_GENGRID_CHECK(obj) EINA_FALSE;
-   Eina_Bool ret = EINA_FALSE;
-   eo_do((Eo *) obj, elm_obj_gengrid_horizontal_get(&ret));
-   return ret;
+   return sd->horizontal;
 }
 
-static void
-_horizontal_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static void
+_elm_gengrid_clear(Eo *obj, Elm_Gengrid_Data *_pd EINA_UNUSED)
 {
-   Eina_Bool *ret = va_arg(*list, Eina_Bool *);
-   Elm_Gengrid_Smart_Data *sd = _pd;
-
-   *ret = sd->horizontal;
-}
-
-EAPI void
-elm_gengrid_clear(Evas_Object *obj)
-{
-   ELM_GENGRID_CHECK(obj);
-   eo_do(obj, elm_obj_gengrid_clear());
-}
-
-static void
-_clear(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED)
-{
-   _elm_gengrid_clear(obj, EINA_FALSE);
+   _internal_elm_gengrid_clear(obj, EINA_FALSE);
 }
 
 EINA_DEPRECATED EAPI const Evas_Object *
@@ -3365,55 +3038,21 @@ elm_gengrid_item_pos_get(const Elm_Object_Item *it,
    if (y) *y = ((Elm_Gen_Item *)it)->y;
 }
 
-EAPI void
-elm_gengrid_multi_select_set(Evas_Object *obj,
-                             Eina_Bool multi)
+EOLIAN static void
+_elm_gengrid_multi_select_set(Eo *obj EINA_UNUSED, Elm_Gengrid_Data *sd, Eina_Bool multi)
 {
-   ELM_GENGRID_CHECK(obj);
-   eo_do(obj, elm_obj_gengrid_multi_select_set(multi));
-}
-
-static void
-_multi_select_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
-{
-   Eina_Bool multi = va_arg(*list, int);
-   Elm_Gengrid_Smart_Data *sd = _pd;
-
    sd->multi = !!multi;
 }
 
-EAPI Eina_Bool
-elm_gengrid_multi_select_get(const Evas_Object *obj)
+EOLIAN static Eina_Bool
+_elm_gengrid_multi_select_get(Eo *obj EINA_UNUSED, Elm_Gengrid_Data *sd)
 {
-   ELM_GENGRID_CHECK(obj) EINA_FALSE;
-   Eina_Bool ret = EINA_FALSE;
-   eo_do((Eo *) obj, elm_obj_gengrid_multi_select_get(&ret));
-   return ret;
+   return sd->multi;
 }
 
-static void
-_multi_select_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static void
+_elm_gengrid_multi_select_mode_set(Eo *obj EINA_UNUSED, Elm_Gengrid_Data *sd, Elm_Object_Multi_Select_Mode mode)
 {
-   Eina_Bool *ret = va_arg(*list, Eina_Bool *);
-   Elm_Gengrid_Smart_Data *sd = _pd;
-
-   *ret = sd->multi;
-}
-
-EAPI void
-elm_gengrid_multi_select_mode_set(Evas_Object *obj,
-                                  Elm_Object_Multi_Select_Mode mode)
-{
-   ELM_GENGRID_CHECK(obj);
-   eo_do(obj, elm_obj_gengrid_multi_select_mode_set(mode));
-}
-
-static void
-_multi_select_mode_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
-{
-   Elm_Object_Multi_Select_Mode mode = va_arg(*list, Elm_Object_Multi_Select_Mode);
-   Elm_Gengrid_Smart_Data *sd = _pd;
-
    if (mode >= ELM_OBJECT_MULTI_SELECT_MODE_MAX)
      return;
 
@@ -3421,59 +3060,23 @@ _multi_select_mode_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
      sd->multi_select_mode = mode;
 }
 
-EAPI Elm_Object_Multi_Select_Mode
-elm_gengrid_multi_select_mode_get(const Evas_Object *obj)
-{
-   ELM_GENGRID_CHECK(obj) ELM_OBJECT_MULTI_SELECT_MODE_MAX;
-   Elm_Object_Multi_Select_Mode ret = ELM_OBJECT_MULTI_SELECT_MODE_MAX;
-   eo_do((Eo *)obj, elm_obj_gengrid_multi_select_mode_get(&ret));
-   return ret;
-}
-
-static void
-_multi_select_mode_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static Elm_Object_Multi_Select_Mode
+_elm_gengrid_multi_select_mode_get(Eo *obj EINA_UNUSED, Elm_Gengrid_Data *sd)
 {
-   Elm_Object_Multi_Select_Mode *ret = va_arg(*list, Elm_Object_Multi_Select_Mode *);
-   Elm_Gengrid_Smart_Data *sd = _pd;
-
-   *ret = sd->multi_select_mode;
+   return sd->multi_select_mode;
 }
 
-EAPI Elm_Object_Item *
-elm_gengrid_selected_item_get(const Evas_Object *obj)
-{
-   ELM_GENGRID_CHECK(obj) NULL;
-   Elm_Object_Item *ret = NULL;
-   eo_do((Eo *) obj, elm_obj_gengrid_selected_item_get(&ret));
-   return ret;
-}
-
-static void
-_selected_item_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static Elm_Object_Item*
+_elm_gengrid_selected_item_get(Eo *obj EINA_UNUSED, Elm_Gengrid_Data *sd)
 {
-   Elm_Object_Item **ret = va_arg(*list, Elm_Object_Item **);
-   Elm_Gengrid_Smart_Data *sd = _pd;
-   *ret = NULL;
-
-   if (sd->selected) *ret = sd->selected->data;
+   if (sd->selected) return sd->selected->data;
+   return NULL;
 }
 
-EAPI const Eina_List *
-elm_gengrid_selected_items_get(const Evas_Object *obj)
+EOLIAN static const Eina_List*
+_elm_gengrid_selected_items_get(Eo *obj EINA_UNUSED, Elm_Gengrid_Data *sd)
 {
-   ELM_GENGRID_CHECK(obj) NULL;
-   const Eina_List *ret = NULL;
-   eo_do((Eo *) obj, elm_obj_gengrid_selected_items_get(&ret));
-   return ret;
-}
-
-static void
-_selected_items_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
-{
-   const Eina_List **ret = va_arg(*list, const Eina_List **);
-   Elm_Gengrid_Smart_Data *sd = _pd;
-
-   *ret = sd->selected;
+   return sd->selected;
 }
 
 EAPI void
@@ -3481,7 +3084,7 @@ elm_gengrid_item_selected_set(Elm_Object_Item *item,
                               Eina_Bool selected)
 {
    Elm_Gen_Item *it = (Elm_Gen_Item *)item;
-   Elm_Gengrid_Smart_Data *sd;
+   Elm_Gengrid_Data *sd;
 
    ELM_GENGRID_ITEM_CHECK_OR_RETURN(it);
 
@@ -3518,39 +3121,23 @@ elm_gengrid_item_selected_get(const Elm_Object_Item *it)
    return ((Elm_Gen_Item *)it)->selected;
 }
 
-EAPI Eina_List *
-elm_gengrid_realized_items_get(const Evas_Object *obj)
-{
-   ELM_GENGRID_CHECK(obj) NULL;
-   Eina_List *ret = NULL;
-   eo_do((Eo *) obj, elm_obj_gengrid_realized_items_get(&ret));
-   return ret;
-}
-
-static void
-_realized_items_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static Eina_List*
+_elm_gengrid_realized_items_get(Eo *obj EINA_UNUSED, Elm_Gengrid_Data *sd)
 {
    Elm_Gen_Item *it;
 
-   Eina_List **ret = va_arg(*list, Eina_List **);
-   Elm_Gengrid_Smart_Data *sd = _pd;
-   *ret = NULL;
+   Eina_List *ret = NULL;
 
    EINA_INLIST_FOREACH(sd->items, it)
      {
-        if (it->realized) *ret = eina_list_append(*ret, (Elm_Object_Item *)it);
+        if (it->realized) ret = eina_list_append(ret, (Elm_Object_Item *)it);
      }
-}
 
-EAPI void
-elm_gengrid_realized_items_update(Evas_Object *obj)
-{
-   ELM_GENGRID_CHECK(obj);
-   eo_do(obj, elm_obj_gengrid_realized_items_update());
+   return ret;
 }
 
-static void
-_realized_items_update(Eo *obj, void *_pd EINA_UNUSED, va_list *list_unused EINA_UNUSED)
+EOLIAN static void
+_elm_gengrid_realized_items_update(Eo *obj, Elm_Gengrid_Data *_pd EINA_UNUSED)
 {
    Eina_List *list, *l;
    Elm_Object_Item *it;
@@ -3741,39 +3328,16 @@ elm_gengrid_item_cursor_engine_only_get(const Elm_Object_Item *it)
    return elm_widget_item_cursor_engine_only_get(it);
 }
 
-EAPI void
-elm_gengrid_reorder_mode_set(Evas_Object *obj,
-                             Eina_Bool reorder_mode)
-{
-   ELM_GENGRID_CHECK(obj);
-   eo_do(obj, elm_obj_gengrid_reorder_mode_set(reorder_mode));
-}
-
-static void
-_reorder_mode_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static void
+_elm_gengrid_reorder_mode_set(Eo *obj EINA_UNUSED, Elm_Gengrid_Data *sd, Eina_Bool reorder_mode)
 {
-   Eina_Bool reorder_mode = va_arg(*list, int);
-   Elm_Gengrid_Smart_Data *sd = _pd;
-
    sd->reorder_mode = !!reorder_mode;
 }
 
-EAPI Eina_Bool
-elm_gengrid_reorder_mode_get(const Evas_Object *obj)
-{
-   ELM_GENGRID_CHECK(obj) EINA_FALSE;
-   Eina_Bool ret = EINA_FALSE;
-   eo_do((Eo *) obj, elm_obj_gengrid_reorder_mode_get(&ret));
-   return ret;
-}
-
-static void
-_reorder_mode_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static Eina_Bool
+_elm_gengrid_reorder_mode_get(Eo *obj EINA_UNUSED, Elm_Gengrid_Data *sd)
 {
-   Eina_Bool *ret = va_arg(*list, Eina_Bool *);
-   Elm_Gengrid_Smart_Data *sd = _pd;
-
-   *ret = sd->reorder_mode;
+   return sd->reorder_mode;
 }
 
 EAPI void
@@ -3785,11 +3349,9 @@ elm_gengrid_bounce_set(Evas_Object *obj,
    eo_do(obj, elm_interface_scrollable_bounce_allow_set(h_bounce, v_bounce));
 }
 
-static void
-_bounce_set(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
+EOLIAN static void
+_elm_gengrid_elm_interface_scrollable_bounce_allow_set(Eo *obj, Elm_Gengrid_Data *sd EINA_UNUSED, Eina_Bool h_bounce, Eina_Bool v_bounce)
 {
-   Eina_Bool h_bounce = va_arg(*list, int);
-   Eina_Bool v_bounce = va_arg(*list, int);
    eo_do_super(obj, MY_CLASS, elm_interface_scrollable_bounce_allow_set(!!h_bounce, !!v_bounce));
 }
 
@@ -3802,65 +3364,29 @@ elm_gengrid_bounce_get(const Evas_Object *obj,
    eo_do((Eo *) obj, elm_interface_scrollable_bounce_allow_get(h_bounce, v_bounce));
 }
 
-EAPI void
-elm_gengrid_page_relative_set(Evas_Object *obj,
-                              double h_pagerel,
-                              double v_pagerel)
-{
-   ELM_GENGRID_CHECK(obj);
-   eo_do(obj, elm_obj_gengrid_page_relative_set(h_pagerel, v_pagerel));
-}
-
-static void
-_page_relative_set(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
+EOLIAN static void
+_elm_gengrid_page_relative_set(Eo *obj, Elm_Gengrid_Data *_pd EINA_UNUSED, double h_pagerel, double v_pagerel)
 {
    Evas_Coord pagesize_h;
    Evas_Coord pagesize_v;
 
-   double h_pagerel = va_arg(*list, double);
-   double v_pagerel = va_arg(*list, double);
-
    eo_do((Eo *) obj, elm_interface_scrollable_paging_get(NULL, NULL, &pagesize_h, &pagesize_v));
    eo_do((Eo *) obj, elm_interface_scrollable_paging_set
      (h_pagerel, v_pagerel, pagesize_h, pagesize_v));
 }
 
-EAPI void
-elm_gengrid_page_relative_get(const Evas_Object *obj,
-                              double *h_pagerel,
-                              double *v_pagerel)
+EOLIAN static void
+_elm_gengrid_page_relative_get(Eo *obj, Elm_Gengrid_Data *_pd EINA_UNUSED, double *h_pagerel, double *v_pagerel)
 {
-   ELM_GENGRID_CHECK(obj);
-   eo_do((Eo *) obj, elm_obj_gengrid_page_relative_get(h_pagerel, v_pagerel));
-}
-
-static void
-_page_relative_get(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
-{
-   double *h_pagerel = va_arg(*list, double *);
-   double *v_pagerel = va_arg(*list, double *);
-
    eo_do((Eo *) obj, elm_interface_scrollable_paging_get(h_pagerel, v_pagerel, NULL, NULL));
 }
 
-EAPI void
-elm_gengrid_page_size_set(Evas_Object *obj,
-                          Evas_Coord h_pagesize,
-                          Evas_Coord v_pagesize)
-{
-   ELM_GENGRID_CHECK(obj);
-   eo_do(obj, elm_obj_gengrid_page_size_set(h_pagesize, v_pagesize));
-}
-
-static void
-_page_size_set(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
+EOLIAN static void
+_elm_gengrid_page_size_set(Eo *obj, Elm_Gengrid_Data *_pd EINA_UNUSED, Evas_Coord h_pagesize, Evas_Coord v_pagesize)
 {
    double pagerel_h;
    double pagerel_v;
 
-   Evas_Coord h_pagesize = va_arg(*list, Evas_Coord);
-   Evas_Coord v_pagesize = va_arg(*list, Evas_Coord);
-
    eo_do((Eo *) obj, elm_interface_scrollable_paging_get(&pagerel_h, &pagerel_v, NULL, NULL));
    eo_do((Eo *) obj, elm_interface_scrollable_paging_set
      (pagerel_h, pagerel_v, h_pagesize, v_pagesize));
@@ -3911,12 +3437,9 @@ elm_gengrid_scroller_policy_set(Evas_Object *obj,
    eo_do(obj, elm_interface_scrollable_policy_set(policy_h, policy_v));
 }
 
-static void
-_scroller_policy_set(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
+EOLIAN static void
+_elm_gengrid_elm_interface_scrollable_policy_set(Eo *obj, Elm_Gengrid_Data *sd EINA_UNUSED, Elm_Scroller_Policy policy_h, Elm_Scroller_Policy policy_v)
 {
-   Elm_Scroller_Policy policy_h = va_arg(*list, Elm_Scroller_Policy);
-   Elm_Scroller_Policy policy_v = va_arg(*list, Elm_Scroller_Policy);
-
    if ((policy_h >= ELM_SCROLLER_POLICY_LAST) ||
        (policy_v >= ELM_SCROLLER_POLICY_LAST))
      return;
@@ -3933,70 +3456,32 @@ elm_gengrid_scroller_policy_get(const Evas_Object *obj,
    eo_do((Eo *) obj, elm_interface_scrollable_policy_get(policy_h, policy_v));
 }
 
-static void
-_scroller_policy_get(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
+EOLIAN static void
+_elm_gengrid_elm_interface_scrollable_policy_get(Eo *obj, Elm_Gengrid_Data *sd EINA_UNUSED, Elm_Scroller_Policy *policy_h, Elm_Scroller_Policy *policy_v)
 {
    Elm_Scroller_Policy s_policy_h, s_policy_v;
 
-   Elm_Scroller_Policy *policy_h = va_arg(*list, Elm_Scroller_Policy *);
-   Elm_Scroller_Policy *policy_v = va_arg(*list, Elm_Scroller_Policy *);
-
    eo_do_super((Eo *)obj, MY_CLASS, elm_interface_scrollable_policy_get(&s_policy_h, &s_policy_v));
    if (policy_h) *policy_h = (Elm_Scroller_Policy)s_policy_h;
    if (policy_v) *policy_v = (Elm_Scroller_Policy)s_policy_v;
 }
 
-EAPI Elm_Object_Item *
-elm_gengrid_first_item_get(const Evas_Object *obj)
-{
-   ELM_GENGRID_CHECK(obj) NULL;
-   Elm_Object_Item *ret = NULL;
-   eo_do((Eo *) obj, elm_obj_gengrid_first_item_get(&ret));
-   return ret;
-}
-
-static void
-_first_item_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static Elm_Object_Item*
+_elm_gengrid_first_item_get(Eo *obj EINA_UNUSED, Elm_Gengrid_Data *sd)
 {
-   Elm_Object_Item **ret = va_arg(*list, Elm_Object_Item **);
-   *ret = NULL;
-   Elm_Gengrid_Smart_Data *sd = _pd;
-
-   if (!sd->items) return;
+   if (!sd->items) return NULL;
 
    Elm_Gen_Item *it = ELM_GEN_ITEM_FROM_INLIST(sd->items);
 
    while ((it) && (it->generation < sd->generation))
      it = ELM_GEN_ITEM_FROM_INLIST(EINA_INLIST_GET(it)->next);
 
-   *ret = (Elm_Object_Item *)it;
-}
-
-EAPI Elm_Object_Item *
-elm_gengrid_at_xy_item_get(const Evas_Object *obj,
-                           Evas_Coord x,
-                           Evas_Coord y,
-                           int *xposret,
-                           int *yposret)
-{
-   ELM_GENGRID_CHECK(obj) NULL;
-   Elm_Object_Item *ret = NULL;
-   eo_do((Eo *) obj, elm_obj_gengrid_at_xy_item_get(x, y,
-            xposret, yposret, &ret));
-
-   return ret;
+   return (Elm_Object_Item *)it;
 }
 
-static void
-_at_xy_item_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static Elm_Object_Item*
+_elm_gengrid_at_xy_item_get(Eo *obj EINA_UNUSED, Elm_Gengrid_Data *sd, Evas_Coord x, Evas_Coord y, int *xposret, int *yposret)
 {
-   Evas_Coord x = va_arg(*list, Evas_Coord);
-   Evas_Coord y = va_arg(*list, Evas_Coord);
-   int *xposret = va_arg(*list, int *);
-   int *yposret = va_arg(*list, int *);
-   Elm_Object_Item **ret = va_arg(*list, Elm_Object_Item **);
-
-   Elm_Gengrid_Smart_Data *sd = _pd;
    Elm_Gen_Item *it = ELM_GEN_ITEM_FROM_INLIST(sd->items);
 
    Evas_Coord l = 0, r = 0, t = 0, b = 0; /* left, right, top, bottom */
@@ -4055,8 +3540,7 @@ _at_xy_item_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
                     else *xposret = 0;
                  }
 
-               *ret = (Elm_Object_Item *) it;
-               return;
+               return (Elm_Object_Item *) it;
             }
 
        } while ((it = ELM_GEN_ITEM_FROM_INLIST(EINA_INLIST_GET(it)->next)));
@@ -4080,32 +3564,19 @@ _at_xy_item_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
           *yposret = (1);
      }
 
-   *ret = NULL;
+   return NULL;
 }
 
-EAPI Elm_Object_Item *
-elm_gengrid_last_item_get(const Evas_Object *obj)
+EOLIAN static Elm_Object_Item*
+_elm_gengrid_last_item_get(Eo *obj EINA_UNUSED, Elm_Gengrid_Data *sd)
 {
-   ELM_GENGRID_CHECK(obj) NULL;
-   Elm_Object_Item *ret = NULL;
-   eo_do((Eo *) obj, elm_obj_gengrid_last_item_get(&ret));
-   return ret;
-}
-
-static void
-_last_item_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
-{
-   Elm_Object_Item **ret = va_arg(*list, Elm_Object_Item **);
-   Elm_Gengrid_Smart_Data *sd = _pd;
-   *ret = NULL;
-
-   if (!sd->items) return;
+   if (!sd->items) return NULL;
 
    Elm_Gen_Item *it = ELM_GEN_ITEM_FROM_INLIST(sd->items->last);
    while ((it) && (it->generation < sd->generation))
      it = ELM_GEN_ITEM_FROM_INLIST(EINA_INLIST_GET(it)->prev);
 
-   *ret = (Elm_Object_Item *)it;
+   return (Elm_Object_Item *)it;
 }
 
 EAPI Elm_Object_Item *
@@ -4145,7 +3616,7 @@ elm_gengrid_item_show(Elm_Object_Item *item,
                       Elm_Gengrid_Item_Scrollto_Type type)
 {
    Elm_Gen_Item *it = (Elm_Gen_Item *)item;
-   Elm_Gengrid_Smart_Data *sd;
+   Elm_Gengrid_Data *sd;
 
    ELM_GENGRID_ITEM_CHECK_OR_RETURN(it);
    sd = GG_IT(it)->wsd;
@@ -4163,7 +3634,7 @@ EAPI void
 elm_gengrid_item_bring_in(Elm_Object_Item *item,
                           Elm_Gengrid_Item_Scrollto_Type type)
 {
-   Elm_Gengrid_Smart_Data *sd;
+   Elm_Gengrid_Data *sd;
    Elm_Gen_Item *it = (Elm_Gen_Item *)item;
 
    ELM_GENGRID_ITEM_CHECK_OR_RETURN(it);
@@ -4178,59 +3649,24 @@ elm_gengrid_item_bring_in(Elm_Object_Item *item,
    _item_show_region(sd);
 }
 
-EAPI void
-elm_gengrid_filled_set(Evas_Object *obj,
-                       Eina_Bool fill)
-{
-   ELM_GENGRID_CHECK(obj);
-   eo_do(obj, elm_obj_gengrid_filled_set(fill));
-}
-
-static void
-_filled_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static void
+_elm_gengrid_filled_set(Eo *obj EINA_UNUSED, Elm_Gengrid_Data *sd, Eina_Bool fill)
 {
-   Eina_Bool fill = va_arg(*list, int);
-   Elm_Gengrid_Smart_Data *sd = _pd;
-
    fill = !!fill;
    if (sd->filled != fill)
      sd->filled = fill;
 }
 
-EAPI Eina_Bool
-elm_gengrid_filled_get(const Evas_Object *obj)
-{
-   ELM_GENGRID_CHECK(obj) EINA_FALSE;
-   Eina_Bool ret = EINA_FALSE;
-   eo_do((Eo *) obj, elm_obj_gengrid_filled_get(&ret));
-   return ret;
-}
-
-static void
-_filled_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
-{
-   Eina_Bool *ret = va_arg(*list, Eina_Bool *);
-   Elm_Gengrid_Smart_Data *sd = _pd;
-
-   *ret = sd->filled;
-}
-
-EAPI unsigned int
-elm_gengrid_items_count(const Evas_Object *obj)
+EOLIAN static Eina_Bool
+_elm_gengrid_filled_get(Eo *obj EINA_UNUSED, Elm_Gengrid_Data *sd)
 {
-   ELM_GENGRID_CHECK(obj) 0;
-   unsigned int ret = 0;
-   eo_do((Eo *) obj, elm_obj_gengrid_items_count(&ret));
-   return ret;
+   return sd->filled;
 }
 
-static void
-_items_count(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static unsigned int
+_elm_gengrid_items_count(Eo *obj EINA_UNUSED, Elm_Gengrid_Data *sd)
 {
-   unsigned int *ret = va_arg(*list, unsigned int *);
-   Elm_Gengrid_Smart_Data *sd = _pd;
-
-   *ret = sd->item_count;
+   return sd->item_count;
 }
 
 EAPI Elm_Gengrid_Item_Class *
@@ -4283,20 +3719,9 @@ elm_gengrid_item_class_unref(Elm_Gengrid_Item_Class *itc)
      }
 }
 
-EAPI void
-elm_gengrid_select_mode_set(Evas_Object *obj,
-                            Elm_Object_Select_Mode mode)
-{
-   ELM_GENGRID_CHECK(obj);
-   eo_do(obj, elm_obj_gengrid_select_mode_set(mode));
-}
-
-static void
-_select_mode_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static void
+_elm_gengrid_select_mode_set(Eo *obj EINA_UNUSED, Elm_Gengrid_Data *sd, Elm_Object_Select_Mode mode)
 {
-   Elm_Object_Select_Mode mode = va_arg(*list, Elm_Object_Select_Mode);
-   Elm_Gengrid_Smart_Data *sd = _pd;
-
    if (mode >= ELM_OBJECT_SELECT_MODE_MAX)
      return;
 
@@ -4304,57 +3729,22 @@ _select_mode_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
      sd->select_mode = mode;
 }
 
-EAPI Elm_Object_Select_Mode
-elm_gengrid_select_mode_get(const Evas_Object *obj)
+EOLIAN static Elm_Object_Select_Mode
+_elm_gengrid_select_mode_get(Eo *obj EINA_UNUSED, Elm_Gengrid_Data *sd)
 {
-   ELM_GENGRID_CHECK(obj) ELM_OBJECT_SELECT_MODE_MAX;
-   Elm_Object_Select_Mode ret = ELM_OBJECT_SELECT_MODE_MAX;
-   eo_do((Eo *) obj, elm_obj_gengrid_select_mode_get(&ret));
-   return ret;
+   return sd->select_mode;
 }
 
-static void
-_select_mode_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static void
+_elm_gengrid_highlight_mode_set(Eo *obj EINA_UNUSED, Elm_Gengrid_Data *sd, Eina_Bool highlight)
 {
-   Elm_Object_Select_Mode *ret = va_arg(*list, Elm_Object_Select_Mode *);
-   Elm_Gengrid_Smart_Data *sd = _pd;
-
-   *ret = sd->select_mode;
-}
-
-EAPI void
-elm_gengrid_highlight_mode_set(Evas_Object *obj,
-                               Eina_Bool highlight)
-{
-   ELM_GENGRID_CHECK(obj);
-   eo_do(obj, elm_obj_gengrid_highlight_mode_set(highlight));
-}
-
-static void
-_highlight_mode_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
-{
-   Eina_Bool highlight = va_arg(*list, int);
-   Elm_Gengrid_Smart_Data *sd = _pd;
-
    sd->highlight = !!highlight;
 }
 
-EAPI Eina_Bool
-elm_gengrid_highlight_mode_get(const Evas_Object *obj)
+EOLIAN static Eina_Bool
+_elm_gengrid_highlight_mode_get(Eo *obj EINA_UNUSED, Elm_Gengrid_Data *sd)
 {
-   ELM_GENGRID_CHECK(obj) EINA_FALSE;
-   Eina_Bool ret = EINA_FALSE;
-   eo_do((Eo *) obj, elm_obj_gengrid_highlight_mode_get(&ret));
-   return ret;
-}
-
-static void
-_highlight_mode_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
-{
-   Eina_Bool *ret = va_arg(*list, Eina_Bool *);
-   Elm_Gengrid_Smart_Data *sd = _pd;
-
-   *ret = sd->highlight;
+   return sd->highlight;
 }
 
 EAPI int
@@ -4414,17 +3804,11 @@ elm_gengrid_nth_item_get(const Evas_Object *obj, unsigned int nth)
    return (Elm_Object_Item *)it;
 }
 
-static void
-_elm_gengrid_focus_highlight_geometry_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static void
+_elm_gengrid_elm_widget_focus_highlight_geometry_get(Eo *obj, Elm_Gengrid_Data *sd, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h, Eina_Bool is_next)
 {
-   Evas_Coord *x = va_arg(*list, Evas_Coord *);
-   Evas_Coord *y = va_arg(*list, Evas_Coord *);
-   Evas_Coord *w = va_arg(*list, Evas_Coord *);
-   Evas_Coord *h = va_arg(*list, Evas_Coord *);
-   Eina_Bool  is_next = va_arg(*list, int);
    Evas_Coord ox, oy, oh, item_x = 0, item_y = 0, item_w = 0, item_h = 0;
 
-   Elm_Gengrid_Smart_Data *sd = _pd;
    evas_object_geometry_get(obj, &ox, &oy, NULL, &oh);
 
    if (is_next)
@@ -4467,139 +3851,19 @@ _elm_gengrid_focus_highlight_geometry_get(Eo *obj EINA_UNUSED, void *_pd, va_lis
      }
 }
 
-static void
-_elm_gengrid_focused_item_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static Elm_Object_Item *
+_elm_gengrid_elm_widget_focused_item_get(Eo *obj EINA_UNUSED, Elm_Gengrid_Data *sd)
 {
-   Elm_Object_Item **ret = va_arg(*list, Elm_Object_Item **);
-   Elm_Gengrid_Smart_Data *sd = _pd;
-
-   if (ret) *ret = sd->focused_item;
+   return sd->focused_item;
 }
 
-static void
-_class_constructor(Eo_Class *klass)
-{
-   const Eo_Op_Func_Description func_desc[] = {
-        EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_CONSTRUCTOR), _constructor),
-
-        EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_MEMBER_ADD), _elm_gengrid_smart_member_add),
-        EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_ADD), _elm_gengrid_smart_add),
-        EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_DEL), _elm_gengrid_smart_del),
-        EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_RESIZE), _elm_gengrid_smart_resize),
-        EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_MOVE), _elm_gengrid_smart_move),
-
-        EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_THEME_APPLY), _elm_gengrid_smart_theme),
-        EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_EVENT), _elm_gengrid_smart_event),
-        EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_ON_FOCUS), _elm_gengrid_smart_on_focus),
-        EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_FOCUS_NEXT_MANAGER_IS), _elm_gengrid_smart_focus_next_manager_is),
-        EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_FOCUS_NEXT), _elm_gengrid_smart_focus_next),
-        EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_ACCESS), _elm_gengrid_smart_access),
-        EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_FOCUS_DIRECTION_MANAGER_IS), _elm_gengrid_smart_focus_direction_manager_is),
-        EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_FOCUS_HIGHLIGHT_GEOMETRY_GET), _elm_gengrid_focus_highlight_geometry_get),
-        EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_FOCUSED_ITEM_GET), _elm_gengrid_focused_item_get),
-
-        EO_OP_FUNC(ELM_OBJ_LAYOUT_ID(ELM_OBJ_LAYOUT_SUB_ID_SIZING_EVAL), _elm_gengrid_smart_sizing_eval),
-
-        EO_OP_FUNC(ELM_INTERFACE_SCROLLABLE_ID(ELM_INTERFACE_SCROLLABLE_SUB_ID_BOUNCE_ALLOW_SET), _bounce_set),
-        EO_OP_FUNC(ELM_INTERFACE_SCROLLABLE_ID(ELM_INTERFACE_SCROLLABLE_SUB_ID_POLICY_SET), _scroller_policy_set),
-        EO_OP_FUNC(ELM_INTERFACE_SCROLLABLE_ID(ELM_INTERFACE_SCROLLABLE_SUB_ID_POLICY_GET), _scroller_policy_get),
-
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_ITEM_SIZE_SET), _item_size_set),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_ITEM_SIZE_GET), _item_size_get),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_GROUP_ITEM_SIZE_SET), _group_item_size_set),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_GROUP_ITEM_SIZE_GET), _group_item_size_get),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_ALIGN_SET), _align_set),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_ALIGN_GET), _align_get),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_ITEM_APPEND), _item_append),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_ITEM_PREPEND), _item_prepend),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_ITEM_INSERT_BEFORE), _item_insert_before),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_ITEM_INSERT_AFTER), _item_insert_after),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_ITEM_SORTED_INSERT), _item_sorted_insert),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_HORIZONTAL_SET), _horizontal_set),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_HORIZONTAL_GET), _horizontal_get),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_CLEAR), _clear),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_MULTI_SELECT_SET), _multi_select_set),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_MULTI_SELECT_GET), _multi_select_get),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_MULTI_SELECT_MODE_SET), _multi_select_mode_set),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_MULTI_SELECT_MODE_GET), _multi_select_mode_get),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_SELECTED_ITEM_GET), _selected_item_get),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_SELECTED_ITEMS_GET), _selected_items_get),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_REALIZED_ITEMS_GET), _realized_items_get),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_REALIZED_ITEMS_UPDATE), _realized_items_update),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_REORDER_MODE_SET), _reorder_mode_set),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_REORDER_MODE_GET), _reorder_mode_get),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_PAGE_RELATIVE_SET), _page_relative_set),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_PAGE_RELATIVE_GET), _page_relative_get),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_PAGE_SIZE_SET), _page_size_set),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_FIRST_ITEM_GET), _first_item_get),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_LAST_ITEM_GET), _last_item_get),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_FILLED_SET), _filled_set),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_FILLED_GET), _filled_get),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_ITEMS_COUNT), _items_count),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_SELECT_MODE_SET), _select_mode_set),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_SELECT_MODE_GET), _select_mode_get),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_HIGHLIGHT_MODE_SET), _highlight_mode_set),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_HIGHLIGHT_MODE_GET), _highlight_mode_get),
-        EO_OP_FUNC(ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_AT_XY_ITEM_GET), _at_xy_item_get),
-        EO_OP_FUNC_SENTINEL
-   };
-   eo_class_funcs_set(klass, func_desc);
-
+EOLIAN static void
+_elm_gengrid_class_constructor(Eo_Class *klass)
+{
    if (_elm_config->access_mode)
       _elm_gengrid_smart_focus_next_enable = EINA_TRUE;
 
    evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass);
 }
-static const Eo_Op_Description op_desc[] = {
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_ITEM_SIZE_SET, "Set the size for the items of a given gengrid widget."),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_ITEM_SIZE_GET, "Get the size set for the items of a given gengrid widget."),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_GROUP_ITEM_SIZE_SET, "Set the size for the group items of a given gengrid widget."),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_GROUP_ITEM_SIZE_GET, "Get the size set for the group items of a given gengrid widget."),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_ALIGN_SET, "Set the items grid's alignment within a given gengrid widget."),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_ALIGN_GET, "Get the items grid's alignment values within a given gengrid widget."),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_ITEM_APPEND, "Append a new item in a given gengrid widget."),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_ITEM_PREPEND, "Prepend a new item in a given gengrid widget."),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_ITEM_INSERT_BEFORE, "Insert an item before another in a gengrid widget."),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_ITEM_INSERT_AFTER, "Insert an item after another in a gengrid widget."),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_ITEM_SORTED_INSERT, "Insert an item in a gengrid widget using a user-defined sort function."),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_HORIZONTAL_SET, "Set the direction in which a given gengrid widget will expand while placing its items."),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_HORIZONTAL_GET, "Get for what direction a given gengrid widget will expand while placing its items."),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_CLEAR, "Remove all items from a given gengrid widget."),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_MULTI_SELECT_SET, "Enable or disable multi-selection in a given gengrid widget."),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_MULTI_SELECT_GET, "Get whether multi-selection is enabled or disabled for a given gengrid widget."),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_MULTI_SELECT_MODE_SET, "Set the gengrid multi select mode."),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_MULTI_SELECT_MODE_GET, "Get the gengrid multi select mode."),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_SELECTED_ITEM_GET, "Get the selected item in a given gengrid widget."),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_SELECTED_ITEMS_GET, "Get a list of selected items in a given gengrid."),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_REALIZED_ITEMS_GET, "Get a list of realized items in gengrid."),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_REALIZED_ITEMS_UPDATE, "Update the contents of all realized items."),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_REORDER_MODE_SET, "Set whether a given gengrid widget is or not able have items reordered."),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_REORDER_MODE_GET, "Get whether a given gengrid widget is or not able have items reordered."),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_PAGE_RELATIVE_SET, "EINA_DEPRECATED Set a given gengrid widget's scrolling page size, relative to its viewport size."),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_PAGE_RELATIVE_GET, "EINA_DEPRECATED Get a given gengrid widget's scrolling page size, relative to its viewport size."),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_PAGE_SIZE_SET, "EINA_DEPRECATED Set a given gengrid widget's scrolling page size"),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_FIRST_ITEM_GET, "Get the first item in a given gengrid widget."),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_LAST_ITEM_GET, "Get the last item in a given gengrid widget."),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_FILLED_SET, "Set how the items grid's filled within a given gengrid widget."),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_FILLED_GET, "Get how the items grid's filled within a given gengrid widget."),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_ITEMS_COUNT, "Return how many items are currently in a list."),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_SELECT_MODE_SET, "Set the gengrid select mode."),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_SELECT_MODE_GET, "Get the gengrid select mode."),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_HIGHLIGHT_MODE_SET, "Set whether the gengrid items should be highlighted when item selected."),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_HIGHLIGHT_MODE_GET, "Get whether the gengrid items should be highlighted when item selected."),
-     EO_OP_DESCRIPTION(ELM_OBJ_GENGRID_SUB_ID_AT_XY_ITEM_GET, "Get the item that is at the x, y canvas coords."),
-     EO_OP_DESCRIPTION_SENTINEL
-};
-
-static const Eo_Class_Description class_desc = {
-     EO_VERSION,
-     MY_CLASS_NAME,
-     EO_CLASS_TYPE_REGULAR,
-     EO_CLASS_DESCRIPTION_OPS(&ELM_OBJ_GENGRID_BASE_ID, op_desc, ELM_OBJ_GENGRID_SUB_ID_LAST),
-     NULL,
-     sizeof(Elm_Gengrid_Smart_Data),
-     _class_constructor,
-     NULL
-};
 
-EO_DEFINE_CLASS(elm_obj_gengrid_class_get, &class_desc, ELM_OBJ_LAYOUT_CLASS, ELM_INTERFACE_SCROLLABLE_CLASS, EVAS_SMART_CLICKABLE_INTERFACE, NULL);
+#include "elm_gengrid.eo.c"
diff --git a/src/lib/elm_gengrid.eo b/src/lib/elm_gengrid.eo
new file mode 100644 (file)
index 0000000..fe0380c
--- /dev/null
@@ -0,0 +1,661 @@
+class Elm_Gengrid (Elm_Layout, Elm_Interface_Scrollable, Evas_Clickable_Interface)
+{
+   eo_prefix: elm_obj_gengrid;
+   properties {
+      align {
+         set {
+            /*@
+            Set the items grid's alignment within a given gengrid widget
+
+            This sets the alignment of the whole grid of items of a gengrid
+            within its given viewport. By default, those values are both
+            0.5, meaning that the gengrid will have its items grid placed
+            exactly in the middle of its viewport.
+
+            @note If given alignment values are out of the cited ranges,
+            they'll be changed to the nearest boundary values on the valid
+            ranges.
+
+            @see elm_gengrid_align_get()
+
+            @ingroup Gengrid */
+         }
+         get {
+            /*@
+            Get the items grid's alignment values within a given gengrid
+            widget
+
+            @note Use @c NULL pointers on the alignment values you're not
+            interested in: they'll be ignored by the function.
+
+            @see elm_gengrid_align_set() for more details
+
+            @ingroup Gengrid */
+         }
+         values {
+            double align_x; /*@ Alignment in the horizontal axis (0 <= align_x <= 1). */
+            double align_y; /*@ Alignment in the vertical axis (0 <= align_y <= 1). */
+         }
+      }
+      filled {
+         set {
+            /*@
+            Set how the items grid's filled within a given gengrid widget
+
+            This sets the fill state of the whole grid of items of a gengrid
+            within its given viewport. By default, this value is false, meaning
+            that if the first line of items grid's isn't filled, the items are
+            centered with the alignment
+
+            @see elm_gengrid_filled_get()
+
+            @ingroup Gengrid */
+         }
+         get {
+            /*@
+            Get how the items grid's filled within a given gengrid widget
+
+            @return @c EINA_TRUE, if filled is on, @c EINA_FALSE if it's
+            off
+
+            @note Use @c NULL pointers on the alignment values you're not
+            interested in: they'll be ignored by the function.
+
+            @see elm_gengrid_align_set() for more details
+
+            @ingroup Gengrid */
+         }
+         values {
+            Eina_Bool fill; /*@ Filled if True */
+         }
+      }
+      page_relative {
+         set {
+            /*@ Set a given gengrid widget's scrolling page size, relative to its viewport size. */
+         }
+         get {
+            /*@ Get a given gengrid widget's scrolling page size, relative to its viewport size. */
+         }
+         values {
+            double h_pagerel;
+            double v_pagerel;
+         }
+      }
+      multi_select {
+         set {
+            /*@
+            Enable or disable multi-selection in a given gengrid widget
+
+            Multi-selection is the ability to have @b more than one
+            item selected, on a given gengrid, simultaneously. When it is
+            enabled, a sequence of clicks on different items will make them
+            all selected, progressively. A click on an already selected item
+            will unselect it. If interacting via the keyboard,
+            multi-selection is enabled while holding the "Shift" key.
+
+            @note By default, multi-selection is @b disabled on gengrids
+
+            @see elm_gengrid_multi_select_get()
+
+            @ingroup Gengrid */
+         }
+         get {
+            /*@
+            Get whether multi-selection is enabled or disabled for a given
+            gengrid widget
+
+            @return @c EINA_TRUE, if multi-selection is enabled, @c
+            EINA_FALSE otherwise
+
+            @see elm_gengrid_multi_select_set() for more details
+
+            @ingroup Gengrid */
+         }
+         values {
+            Eina_Bool multi; /*@ @c EINA_TRUE, to enable multi-selection,
+            @c EINA_FALSE to disable it. */
+         }
+      }
+      group_item_size {
+         set {
+            /*@
+            Set the size for the group items of a given gengrid widget
+
+            A gengrid, after creation, has still no information on the size
+            to give to each of its cells. So, you most probably will end up
+            with squares one @ref Fingers "finger" wide, the default
+            size. Use this function to force a custom size for you group items,
+            making them as big as you wish.
+
+            @see elm_gengrid_group_item_size_get()
+
+            @ingroup Gengrid */
+         }
+         get {
+            /*@
+            Get the size set for the group items of a given gengrid widget
+
+            @note Use @c NULL pointers on the size values you're not
+            interested in: they'll be ignored by the function.
+
+            @see elm_gengrid_group_item_size_get() for more details
+
+            @ingroup Gengrid */
+         }
+         values {
+            Evas_Coord w; /*@ The group items' width. */
+            Evas_Coord h; /*@ The group items' height. */
+         }
+      }
+      select_mode {
+         set {
+            /*@
+            Set the gengrid select mode.
+
+            elm_gengrid_select_mode_set() changes item select mode in the gengrid widget.
+            - ELM_OBJECT_SELECT_MODE_DEFAULT : Items will only call their selection func and
+            callback when first becoming selected. Any further clicks will
+            do nothing, unless you set always select mode.
+            - ELM_OBJECT_SELECT_MODE_ALWAYS :  This means that, even if selected,
+            every click will make the selected callbacks be called.
+            - ELM_OBJECT_SELECT_MODE_NONE : This will turn off the ability to select items
+            entirely and they will neither appear selected nor call selected
+            callback functions.
+
+            @see elm_gengrid_select_mode_get()
+
+            @ingroup Gengrid */
+         }
+         get {
+            /*@
+            Get the gengrid select mode.
+
+            @return The select mode
+            (If getting mode is failed, it returns ELM_OBJECT_SELECT_MODE_MAX)
+
+            @see elm_gengrid_select_mode_set()
+
+            @ingroup Gengrid */
+         }
+         values {
+            Elm_Object_Select_Mode mode; /*@ The select mode */
+         }
+      }
+      reorder_mode {
+         set {
+            /*@
+            Set whether a given gengrid widget is or not able have items
+            @b reordered
+
+            If a gengrid is set to allow reordering, a click held for more
+            than 0.5 over a given item will highlight it specially,
+            signaling the gengrid has entered the reordering state. From
+            that time on, the user will be able to, while still holding the
+            mouse button down, move the item freely in the gengrid's
+            viewport, replacing to said item to the locations it goes to.
+            The replacements will be animated and, whenever the user
+            releases the mouse button, the item being replaced gets a new
+            definitive place in the grid.
+
+            @see elm_gengrid_reorder_mode_get()
+
+            @ingroup Gengrid */
+         }
+         get {
+            /*@
+            Get whether a given gengrid widget is or not able have items
+            @b reordered
+
+            @return @c EINA_TRUE, if reordering is on, @c EINA_FALSE if it's
+            off
+
+            @see elm_gengrid_reorder_mode_set() for more details
+
+            @ingroup Gengrid */
+         }
+         values {
+            Eina_Bool reorder_mode; /*@ Use @c EINA_TRUE to turn reordering on,
+            @c EINA_FALSE to turn it off */
+         }
+      }
+      highlight_mode {
+         set {
+            /*@ Set whether the gengrid items' should be highlighted when item selected. */
+         }
+         get {
+            /*@ Get whether the gengrid items' should be highlighted when item selected. */
+         }
+         values {
+            Eina_Bool highlight;
+         }
+      }
+      item_size {
+         set {
+            /*@
+            Set the size for the items of a given gengrid widget
+
+            A gengrid, after creation, has still no information on the size
+            to give to each of its cells. So, you most probably will end up
+            with squares one @ref Fingers "finger" wide, the default
+            size. Use this function to force a custom size for you items,
+            making them as big as you wish.
+
+            @see elm_gengrid_item_size_get()
+
+            @ingroup Gengrid */
+         }
+         get {
+            /*@
+            Get the size set for the items of a given gengrid widget
+
+            @note Use @c NULL pointers on the size values you're not
+            interested in: they'll be ignored by the function.
+
+            @see elm_gengrid_item_size_get() for more details
+
+            @ingroup Gengrid */
+         }
+         values {
+            Evas_Coord w; /*@ The items' width. */
+            Evas_Coord h; /*@ The items' height. */
+         }
+      }
+      multi_select_mode {
+         set {
+            /*@
+            Set the gengrid multi select mode.
+
+            - ELM_OBJECT_MULTI_SELECT_MODE_DEFAULT : select/unselect items whenever each
+            item is clicked.
+            - ELM_OBJECT_MULTI_SELECT_MODE_WITH_CONTROL : Only one item will be selected
+            although multi-selection is enabled, if clicked without pressing control
+            key. This mode is only available with multi-selection.
+
+            @see elm_gengrid_multi_select_set()
+            @see elm_gengrid_multi_select_mode_get()
+
+            @ingroup Gengrid
+            @since 1.8 */
+         }
+         get {
+            /*@
+            Get the gengrid multi select mode.
+
+            @return The multi select mode
+            (If getting mode is failed, it returns ELM_OBJECT_MULTI_SELECT_MODE_MAX)
+
+            @see elm_gengrid_multi_select_set()
+            @see elm_gengrid_multi_select_mode_set()
+
+            @ingroup Gengrid
+            @since 1.8 */
+         }
+         values {
+            Elm_Object_Multi_Select_Mode mode; /*@ The multi select mode */
+         }
+      }
+      horizontal {
+         set {
+            /*@
+            Set the direction in which a given gengrid widget will expand while
+            placing its items.
+
+            When in "horizontal mode" (@c EINA_TRUE), items will be placed in @b columns,
+            from top to bottom and, when the space for a column is filled, another one is
+            started on the right, thus expanding the grid horizontally. When in
+            "vertical mode" (@c EINA_FALSE), though, items will be placed in @b rows,
+            from left to right and, when the space for a row is filled, another one is
+            started below, thus expanding the grid vertically.
+
+            @note By default, gengrid is in vertical mode, @c EINA_FALSE.
+
+            @see elm_gengrid_horizontal_get()
+
+            @ingroup Gengrid */
+         }
+         get {
+            /*@
+            Get for what direction a given gengrid widget will expand while
+            placing its items.
+
+            @return @c EINA_TRUE, if @p obj is set to expand horizontally,
+            @c EINA_FALSE if it's set to expand vertically.
+
+            @see elm_gengrid_horizontal_set() for more details
+
+            @ingroup Gengrid */
+         }
+         values {
+            Eina_Bool horizontal; /*@ @c EINA_TRUE to make the gengrid expand horizontally,
+            @c EINA_FALSE to expand vertically. */
+         }
+      }
+      page_size {
+         set {
+            /*@ Set a given gengrid widget's scrolling page size */
+         }
+         values {
+            Evas_Coord h_pagesize;
+            Evas_Coord v_pagesize;
+         }
+      }
+      selected_item {
+         get {
+            /*@
+            Get the selected item in a given gengrid widget
+
+            @return The selected item's handle or @c NULL, if none is
+            selected at the moment (and on errors)
+
+            This returns the selected item in @p obj. If multi selection is
+            enabled on @p obj (@see elm_gengrid_multi_select_set()), only
+            the first item in the list is selected, which might not be very
+            useful. For that case, see elm_gengrid_selected_items_get().
+
+            @ingroup Gengrid */
+            return Elm_Object_Item *;
+         }
+      }
+      realized_items {
+         get {
+            /*@
+            Get a list of realized items in gengrid
+
+            @return The list of realized items, nor NULL if none are realized.
+
+            This returns a list of the realized items in the gengrid. The list
+            contains gengrid item pointers. The list must be freed by the
+            caller when done with eina_list_free(). The item pointers in the
+            list are only valid so long as those items are not deleted or the
+            gengrid is not deleted.
+
+            @see elm_gengrid_realized_items_update()
+
+            @ingroup Gengrid */
+            return Eina_List *;
+         }
+      }
+      first_item {
+         get {
+            /*@
+            Get the first item in a given gengrid widget
+
+            @return The first item's handle or @c NULL, if there are no
+            items in @p obj (and on errors)
+
+            This returns the first item in the @p obj's internal list of
+            items.
+
+            @see elm_gengrid_last_item_get()
+
+            @ingroup Gengrid */
+            return Elm_Object_Item *;
+         }
+      }
+      selected_items {
+         get {
+            /*@
+            Get <b>a list</b> of selected items in a given gengrid
+
+            @return The list of selected items or @c NULL, if none is
+            selected at the moment (and on errors)
+
+            This returns a list of the selected items, in the order that
+            they appear in the grid. This list is only valid as long as no
+            more items are selected or unselected (or unselected implicitly
+            by deletion). The list contains Gengrid item pointers as
+            data, naturally.
+
+            @see elm_gengrid_selected_item_get()
+
+            @ingroup Gengrid */
+            return const Eina_List *;
+         }
+      }
+      last_item {
+         get {
+            /*@
+            Get the last item in a given gengrid widget
+
+            @return The last item's handle or @c NULL, if there are no
+            items in @p obj (and on errors)
+
+            This returns the last item in the @p obj's internal list of
+            items.
+
+            @see elm_gengrid_first_item_get()
+
+            @ingroup Gengrid */
+            return Elm_Object_Item *;
+         }
+      }
+   }
+   methods {
+      item_insert_before {
+         /*@
+         Insert an item before another in a gengrid widget
+
+         @return A handle to the item added or @c NULL, on errors.
+
+         This inserts an item before another in the gengrid.
+
+         @see elm_gengrid_item_append()
+         @see elm_gengrid_item_prepend()
+         @see elm_gengrid_item_insert_after()
+         @see elm_object_item_del()
+
+         @ingroup Gengrid */
+
+         return Elm_Object_Item *;
+         params {
+            @in const Elm_Gengrid_Item_Class *itc; /*@ The item class for the item. */
+            @in const void *data; /*@ The item data. */
+            @in Elm_Object_Item *relative; /*@ The item to place this new one before. */
+            @in Evas_Smart_Cb func; /*@ Convenience function called when the item is
+            selected. */
+            @in const void *func_data; /*@ Data to be passed to @p func. */
+         }
+      }
+      realized_items_update {
+         /*@
+         Update the contents of all realized items.
+
+         This updates all realized items by calling all the item class functions again
+         to get the contents, texts and states. Use this when the original
+         item data has changed and the changes are desired to be reflected.
+
+         To update just one item, use elm_gengrid_item_update().
+
+         @see elm_gengrid_realized_items_get()
+         @see elm_gengrid_item_update()
+
+         @ingroup Gengrid */
+
+      }
+      item_insert_after {
+         /*@
+         Insert an item after another in a gengrid widget
+
+         @return A handle to the item added or @c NULL, on errors.
+
+         This inserts an item after another in the gengrid.
+
+         @see elm_gengrid_item_append()
+         @see elm_gengrid_item_prepend()
+         @see elm_gengrid_item_insert_after()
+         @see elm_object_item_del()
+
+         @ingroup Gengrid */
+
+         return Elm_Object_Item *;
+         params {
+            @in const Elm_Gengrid_Item_Class *itc; /*@ The item class for the item. */
+            @in const void *data; /*@ The item data. */
+            @in Elm_Object_Item *relative; /*@ The item to place this new one after. */
+            @in Evas_Smart_Cb func; /*@ Convenience function called when the item is
+            selected. */
+            @in const void *func_data; /*@ Data to be passed to @p func. */
+         }
+      }
+      items_count {
+         /*@
+         Return how many items are currently in a list
+
+         @return The total number of list items in the list
+
+         This behavior is O(1) and includes items which may or may not be realized.
+
+         @ingroup Gengrid */
+
+         const;
+         return unsigned int;
+      }
+      at_xy_item_get {
+         /*@
+         Get the item that is at the x, y canvas coords.
+
+         @return The item at the coordinates or NULL if none
+
+         This returns the item at the given coordinates (which are canvas
+         relative, not object-relative). If an item is at that coordinate,
+         that item handle is returned, and if @p xposret is not NULL, the
+         integer pointed to is set to a value of -1, 0 or 1, depending if
+         the coordinate is on the left portion of that item (-1), on the
+         middle section (0) or on the right part (1).
+         if @p yposret is not NULL, the
+         integer pointed to is set to a value of -1, 0 or 1, depending if
+         the coordinate is on the upper portion of that item (-1), on the
+         middle section (0) or on the lower part (1). If NULL is returned as
+         an item (no item found there), then posret may indicate -1 or 1
+         based if the coordinate is above or below all items respectively in
+         the gengrid.
+
+         @ingroup Gengrid */
+
+         const;
+         return Elm_Object_Item *;
+         params {
+            @in Evas_Coord x; /*@ The input x coordinate */
+            @in Evas_Coord y; /*@ The input y coordinate */
+            @out int xposret; /*@ The position relative to the item returned here */
+            @out int yposret; /*@ The position relative to the item returned here */
+         }
+      }
+      item_append {
+         /*@
+         Append a new item in a given gengrid widget.
+
+         @return A handle to the item added or @c NULL, on errors.
+
+         This adds an item to the beginning of the gengrid.
+
+         @see elm_gengrid_item_prepend()
+         @see elm_gengrid_item_insert_before()
+         @see elm_gengrid_item_insert_after()
+         @see elm_object_item_del()
+
+         @ingroup Gengrid */
+
+         return Elm_Object_Item *;
+         params {
+            @in const Elm_Gengrid_Item_Class *itc; /*@ The item class for the item. */
+            @in const void *data; /*@ The item data. */
+            @in Evas_Smart_Cb func; /*@ Convenience function called when the item is
+            selected. */
+            @in const void *func_data; /*@ Data to be passed to @p func. */
+         }
+      }
+      item_prepend {
+         /*@
+         Prepend a new item in a given gengrid widget.
+
+         @return A handle to the item added or @c NULL, on errors.
+
+         This adds an item to the end of the gengrid.
+
+         @see elm_gengrid_item_append()
+         @see elm_gengrid_item_insert_before()
+         @see elm_gengrid_item_insert_after()
+         @see elm_object_item_del()
+
+         @ingroup Gengrid */
+
+         return Elm_Object_Item *;
+         params {
+            @in const Elm_Gengrid_Item_Class *itc; /*@ The item class for the item. */
+            @in const void *data; /*@ The item data. */
+            @in Evas_Smart_Cb func; /*@ Convenience function called when the item is
+            selected. */
+            @in const void *func_data; /*@ Data to be passed to @p func. */
+         }
+      }
+      clear {
+         /*@
+         Remove all items from a given gengrid widget
+
+         This removes (and deletes) all items in @p obj, leaving it
+         empty.
+
+         @see elm_object_item_del(), to remove just one item.
+
+         @ingroup Gengrid */
+
+      }
+      item_sorted_insert {
+         /*@
+         Insert an item in a gengrid widget using a user-defined sort function.
+
+         @return A handle to the item added or @c NULL, on errors.
+
+         This inserts an item in the gengrid based on user defined comparison
+         function. The two arguments passed to the function @p func are gengrid
+         item handles to compare.
+
+         @see elm_gengrid_item_append()
+         @see elm_gengrid_item_prepend()
+         @see elm_gengrid_item_insert_after()
+         @see elm_object_item_data_get()
+         @see elm_object_item_del()
+
+         @ingroup Gengrid */
+
+         return Elm_Object_Item *;
+         params {
+            @in const Elm_Gengrid_Item_Class *itc; /*@ The item class for the item. */
+            @in const void *data; /*@ The item data. */
+            @in Eina_Compare_Cb comp; /*@ User defined comparison function that defines the sort order
+            based on gengrid item and its data. */
+            @in Evas_Smart_Cb func; /*@ Convenience function called when the item is selected. */
+            @in const void *func_data; /*@ Data to be passed to @p func. */
+         }
+      }
+   }
+   implements {
+      class::constructor;
+      Eo_Base::constructor;
+      Evas_Smart::move;
+      Evas_Smart::add;
+      Evas_Smart::del;
+      Evas_Smart::member_add;
+      Evas_Smart::resize;
+      Elm_Widget::theme_apply;
+      Elm_Widget::focus_next_manager_is;
+      Elm_Widget::focus_direction_manager_is;
+      Elm_Widget::access;
+      Elm_Widget::focus_next;
+      Elm_Widget::on_focus;
+      Elm_Widget::event;
+      Elm_Widget::focus_highlight_geometry_get;
+      Elm_Widget::focused_item::get;
+      Elm_Layout::sizing_eval;
+      Elm_Interface_Scrollable::bounce_allow::set;
+      Elm_Interface_Scrollable::policy;
+   }
+   events {
+      language,changed;
+      access,changed;
+      focused;
+      unfocused;
+   }
+
+}
index 0ee1ed2..f78b92f 100644 (file)
@@ -3,6 +3,9 @@
  *
  * @{
  */
+#include "elm_gengrid_pan.eo.h"
+#include "elm_gengrid.eo.h"
+#if 0
 #define ELM_OBJ_GENGRID_PAN_CLASS elm_obj_gengrid_pan_class_get()
 
 const Eo_Class *elm_obj_gengrid_pan_class_get(void) EINA_CONST;
@@ -656,6 +659,7 @@ enum
  */
 #define elm_obj_gengrid_at_xy_item_get(x, y, xposret, yposret, ret) ELM_OBJ_GENGRID_ID(ELM_OBJ_GENGRID_SUB_ID_AT_XY_ITEM_GET), EO_TYPECHECK(Evas_Coord, x), EO_TYPECHECK(Evas_Coord, y), EO_TYPECHECK(int *, xposret), EO_TYPECHECK(int *, yposret), EO_TYPECHECK(Elm_Object_Item **, ret)
 
+#endif
 
 /**
  * @}
diff --git a/src/lib/elm_gengrid_pan.eo b/src/lib/elm_gengrid_pan.eo
new file mode 100644 (file)
index 0000000..5fe6fcc
--- /dev/null
@@ -0,0 +1,22 @@
+class Elm_Gengrid_Pan (Elm_Pan)
+{
+   eo_prefix: elm_obj_gengrid_pan;
+   implements {
+      class::constructor;
+      Eo_Base::destructor;
+      Evas_Smart::calculate;
+      Evas_Smart::move;
+      Evas_Smart::resize;
+      Elm_Pan::content_size::get;
+      Elm_Pan::pos;
+      Elm_Pan::pos_min::get;
+      Elm_Pan::pos_max::get;
+   }
+   events {
+      language,changed;
+      access,changed;
+      focused;
+      unfocused;
+   }
+
+}
index f551f84..477f494 100644 (file)
@@ -18,8 +18,8 @@
 /**
  * Base widget smart data extended with gengrid instance data.
  */
-typedef struct _Elm_Gengrid_Smart_Data Elm_Gengrid_Smart_Data;
-struct _Elm_Gengrid_Smart_Data
+typedef struct _Elm_Gengrid_Data Elm_Gengrid_Data;
+struct _Elm_Gengrid_Data
 {
    Eina_Inlist_Sorted_State             *state;
    Evas_Object                          *hit_rect;
@@ -116,7 +116,7 @@ struct Elm_Gen_Item_Type
 {
    Elm_Gen_Item           *it;
 
-   Elm_Gengrid_Smart_Data *wsd;
+   Elm_Gengrid_Data       *wsd;
 
    Ecore_Animator         *item_reorder_move_animator;
    Evas_Coord              gx, gy, ox, oy, tx, ty, rx, ry;
@@ -127,11 +127,11 @@ struct Elm_Gen_Item_Type
    Eina_Bool               moving : 1;
 };
 
-typedef struct _Elm_Gengrid_Pan_Smart_Data Elm_Gengrid_Pan_Smart_Data;
-struct _Elm_Gengrid_Pan_Smart_Data
+typedef struct _Elm_Gengrid_Pan_Data Elm_Gengrid_Pan_Data;
+struct _Elm_Gengrid_Pan_Data
 {
    Evas_Object            *wobj;
-   Elm_Gengrid_Smart_Data *wsd;
+   Elm_Gengrid_Data       *wsd;
    Ecore_Job              *resize_job;
 };
 
@@ -140,10 +140,10 @@ struct _Elm_Gengrid_Pan_Smart_Data
  */
 
 #define ELM_GENGRID_DATA_GET(o, sd) \
-  Elm_Gengrid_Smart_Data * sd = eo_data_scope_get(o, ELM_OBJ_GENGRID_CLASS)
+  Elm_Gengrid_Data * sd = eo_data_scope_get(o, ELM_OBJ_GENGRID_CLASS)
 
 #define ELM_GENGRID_PAN_DATA_GET(o, sd) \
-  Elm_Gengrid_Pan_Smart_Data * sd = eo_data_scope_get(o, ELM_OBJ_GENGRID_PAN_CLASS)
+  Elm_Gengrid_Pan_Data * sd = eo_data_scope_get(o, ELM_OBJ_GENGRID_PAN_CLASS)
 
 #define ELM_GENGRID_DATA_GET_OR_RETURN(o, ptr)       \
   ELM_GENGRID_DATA_GET(o, ptr);                      \