[access][gengrid] add activate callback
[framework/uifw/elementary.git] / src / lib / elm_gengrid.c
index 663fb43..62e9989 100644 (file)
@@ -749,6 +749,18 @@ _access_on_highlight_cb(void *data)
 }
 
 static void
+_access_activate_cb(void *data __UNUSED__,
+                    Evas_Object *part_obj __UNUSED__,
+                    Elm_Object_Item *item)
+{
+   Elm_Gen_Item *it = (Elm_Gen_Item *)item;
+   ELM_GENGRID_ITEM_CHECK_OR_RETURN(it);
+
+   _item_highlight(it);
+   it->sel_cb(it);
+}
+
+static void
 _access_widget_item_register(Elm_Gen_Item *it)
 {
    Elm_Access_Info *ai;
@@ -761,6 +773,7 @@ _access_widget_item_register(Elm_Gen_Item *it)
    _elm_access_callback_set(ai, ELM_ACCESS_INFO, _access_info_cb, it);
    _elm_access_callback_set(ai, ELM_ACCESS_STATE, _access_state_cb, it);
    _elm_access_on_highlight_hook_set(ai, _access_on_highlight_cb, it);
+   _elm_access_activate_callback_set(ai, _access_activate_cb, it);
 }
 
 static void
@@ -1006,6 +1019,9 @@ _item_place(Elm_Gen_Item *it,
 
    it->x = cx;
    it->y = cy;
+   if (wsd->horizontal) it->position = cx;
+   else it->position = cy;
+
    evas_object_geometry_get(wsd->pan_obj, &ox, &oy, &vw, &vh);
 
    /* Preload rows/columns at each side of the Gengrid */
@@ -3776,7 +3792,11 @@ _elm_gengrid_proxy_item_new(const Elm_Object_Item *item)
 
    pi->proxy = evas_object_image_filled_add
       (evas_object_evas_get(ELM_WIDGET_DATA(GG_IT(it)->wsd)->obj));
-   if (!pi->proxy) return EINA_FALSE;
+   if (!pi->proxy)
+     {
+        free(pi);
+        return NULL;
+     }
    evas_object_clip_set(pi->proxy, evas_object_clip_get(GG_IT(it)->wsd->pan_obj));
    evas_object_smart_member_add(pi->proxy, GG_IT(it)->wsd->pan_obj);
    evas_object_hide(pi->proxy);
@@ -3961,9 +3981,12 @@ static void
 _item_fx_done(Elm_Transit_Effect *data, Elm_Transit *transit __UNUSED__)
 {
    Elm_Gen_FX_Item *fx_done_it = data;
-   Elm_Gengrid_Smart_Data *sd = GG_IT(fx_done_it->it)->wsd;
+   Elm_Gengrid_Smart_Data *sd;
+
+   if ((!fx_done_it) || (!fx_done_it->it)) return;
 
-   if ((!fx_done_it) || (!fx_done_it->it) || (!sd)) return;
+   sd = GG_IT(fx_done_it->it)->wsd;
+   if (!sd) return;
 
    evas_object_image_source_visible_set(fx_done_it->proxy, EINA_TRUE);
    evas_object_lower(fx_done_it->proxy);
@@ -3981,9 +4004,12 @@ _item_fx_del_cb(void *data, Elm_Transit *transit __UNUSED__)
    Elm_Gen_Item *it = NULL;
    Proxy_Item *pi = NULL;
    Eina_List *l;
-   Elm_Gengrid_Smart_Data *sd = GG_IT(fx_done_it->it)->wsd;
+   Elm_Gengrid_Smart_Data *sd;
+
+   if ((!fx_done_it) || (!fx_done_it->it)) return;
 
-   if ((!fx_done_it) || (!fx_done_it->it) || (!sd)) return;
+   sd = GG_IT(fx_done_it->it)->wsd;
+   if (!sd) return;
 
    sd->fx_items = eina_list_remove(sd->fx_items, fx_done_it);
    free(fx_done_it);