elementary/genlist, gengrid - reverted item_class version checking.
authorhermet <hermet@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 5 Mar 2012 02:46:29 +0000 (02:46 +0000)
committerhermet <hermet@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 5 Mar 2012 02:46:29 +0000 (02:46 +0000)
The version field is not for preventing ABI break but just for checking allocator (to not free the item class created by user)

git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/elementary@68670 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/elm_deprecated_before.h
src/lib/elm_gengrid.c
src/lib/elm_genlist.c

index 4872250..8625c3a 100644 (file)
@@ -9,12 +9,14 @@ typedef Eina_Bool                     (*Elm_Gen_Item_State_Get_Cb)(void *data, E
 typedef void                          (*Elm_Gen_Item_Del_Cb)(void *data, Evas_Object *obj); /**< Deletion class function for gen item classes. */
 struct _Elm_Gen_Item_Class
 {
+   //XXX: version name is not intuitive. 
+   //How about  Eina_Bool allocated_by_gen : 1 ?
    int version;
    unsigned int refcount;
+   Eina_Bool delete_me : 1;
    const char *item_style;
    const char *mode_item_style;
    const char *edit_item_style;
-   Eina_Bool delete_me : 1;
    struct _Elm_Gen_Item_Class_Func
    {
       Elm_Gen_Item_Text_Get_Cb    text_get;
index bbe69ef..956104d 100644 (file)
    (it)->unsel_cb = (Ecore_Cb)_item_unselect; \
    (it)->unrealize_cb = (Ecore_Cb)_item_unrealize_cb
 
-#define ELM_GENGRID_CHECK_ITC_VER(itc) \
-   do \
-     { \
-        if (!itc) \
-          { \
-             ERR("Gengrid_Item_Class(itc) is NULL"); \
-             return; \
-          } \
-        if (itc->version != ELM_GENGRID_ITEM_CLASS_VERSION) \
-          { \
-             ERR("Gengrid_Item_Class version mismatched! required = (%d), current  = (%d)", itc->version, ELM_GENGRID_ITEM_CLASS_VERSION); \
-             return; \
-          } \
-     } \
-   while(0)
-
-
 struct Elm_Gen_Item_Type
 {
    Elm_Gen_Item   *it;
@@ -2797,32 +2780,36 @@ elm_gengrid_item_class_new(void)
 EAPI void
 elm_gengrid_item_class_free(Elm_Gengrid_Item_Class *itc)
 {
-   ELM_GENGRID_CHECK_ITC_VER(itc);
-   if (!itc->delete_me) itc->delete_me = EINA_TRUE;
-   if (itc->refcount > 0) elm_gengrid_item_class_unref(itc);
-   else
+   if (itc && (itc->version == ELM_GENGRID_ITEM_CLASS_VERSION))
      {
-        itc->version = 0;
-        free(itc);
+        if (!itc->delete_me) itc->delete_me = EINA_TRUE;
+        if (itc->refcount > 0) elm_gengrid_item_class_unref(itc);
+        else
+          {
+             itc->version = 0;
+             free(itc);
+          }
      }
 }
 
 EAPI void
 elm_gengrid_item_class_ref(Elm_Gengrid_Item_Class *itc)
 {
-   ELM_GENGRID_CHECK_ITC_VER(itc);
-
-   itc->refcount++;
-   if (itc->refcount == 0) itc->refcount--;
+   if (itc && (itc->version == ELM_GENGRID_ITEM_CLASS_VERSION))
+     {
+        itc->refcount++;
+        if (itc->refcount == 0) itc->refcount--;
+     }
 }
 
 EAPI void
 elm_gengrid_item_class_unref(Elm_Gengrid_Item_Class *itc)
 {
-   ELM_GENGRID_CHECK_ITC_VER(itc);
-
-   if (itc->refcount > 0) itc->refcount--;
-   if (itc->delete_me && (!itc->refcount))
-     elm_gengrid_item_class_free(itc);
+   if (itc && (itc->version == ELM_GENGRID_ITEM_CLASS_VERSION))
+     {
+        if (itc->refcount > 0) itc->refcount--;
+        if (itc->delete_me && (!itc->refcount))
+          elm_gengrid_item_class_free(itc);
+     }
 }
 
index f6d4fb3..2c97995 100644 (file)
@@ -5620,33 +5620,37 @@ elm_genlist_item_class_new(void)
 EAPI void
 elm_genlist_item_class_free(Elm_Genlist_Item_Class *itc)
 {
-   ELM_GENLIST_CHECK_ITC_VER(itc);
-   if (!itc->delete_me) itc->delete_me = EINA_TRUE;
-   if (itc->refcount > 0) elm_genlist_item_class_unref(itc);
-   else
+   if (itc && (itc->version == ELM_GENLIST_ITEM_CLASS_VERSION))
      {
-        itc->version = 0;
-        free(itc);
+        if (!itc->delete_me) itc->delete_me = EINA_TRUE;
+        if (itc->refcount > 0) elm_genlist_item_class_unref(itc);
+        else
+          {
+             itc->version = 0;
+             free(itc);
+          }
      }
 }
 
 EAPI void
 elm_genlist_item_class_ref(Elm_Genlist_Item_Class *itc)
 {
-   ELM_GENLIST_CHECK_ITC_VER(itc);
-
-   itc->refcount++;
-   if (itc->refcount == 0) itc->refcount--;
+   if (itc && (itc->version == ELM_GENLIST_ITEM_CLASS_VERSION))
+     {
+        itc->refcount++;
+        if (itc->refcount == 0) itc->refcount--;
+     }
 }
 
 EAPI void
 elm_genlist_item_class_unref(Elm_Genlist_Item_Class *itc)
 {
-   ELM_GENLIST_CHECK_ITC_VER(itc);
-
-   if (itc->refcount > 0) itc->refcount--;
-   if (itc->delete_me && (!itc->refcount))
-     elm_genlist_item_class_free(itc);
+   if (itc && (itc->version == ELM_GENLIST_ITEM_CLASS_VERSION))
+     {
+        if (itc->refcount > 0) itc->refcount--;
+        if (itc->delete_me && (!itc->refcount))
+          elm_genlist_item_class_free(itc);
+     }
 }
 
 /* for gengrid as of now */