elementary/genlist, gengrid - added itc version checking.
authorhermet <hermet@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 29 Feb 2012 07:51:23 +0000 (07:51 +0000)
committerhermet <hermet@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 29 Feb 2012 07:51:23 +0000 (07:51 +0000)
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/elementary@68539 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

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

index 4083dc8..0971330 100644 (file)
@@ -11,7 +11,6 @@ struct _Elm_Gen_Item_Class
 {
    int version;
    unsigned int refcount;
-   Eina_Bool delete_me : 1;
    const char *item_style;
    const char *mode_item_style;
    const char *edit_item_style;
@@ -22,4 +21,5 @@ struct _Elm_Gen_Item_Class
       Elm_Gen_Item_State_Get_Cb   state_get;
       Elm_Gen_Item_Del_Cb         del;
    } func;
+   Eina_Bool delete_me : 1;
 };
index 4de2885..c4c009e 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;
@@ -2782,42 +2799,35 @@ elm_gengrid_item_class_new(void)
    return itc;
 }
 
-//XXX: notify class version to user if it is mismatched
 EAPI void
 elm_gengrid_item_class_free(Elm_Gengrid_Item_Class *itc)
 {
-   if (itc && (itc->version == ELM_GENGRID_ITEM_CLASS_VERSION))
+   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->delete_me) itc->delete_me = EINA_TRUE;
-        if (itc->refcount > 0) elm_gengrid_item_class_unref(itc);
-        else
-          {
-             itc->version = 0;
-             free(itc);
-          }
+        itc->version = 0;
+        free(itc);
      }
 }
 
-//XXX: notify class version to user if it is mismatched
 EAPI void
 elm_gengrid_item_class_ref(Elm_Gengrid_Item_Class *itc)
 {
-   if (itc && (itc->version == ELM_GENGRID_ITEM_CLASS_VERSION))
-     {
-        itc->refcount++;
-        if (itc->refcount == 0) itc->refcount--;
-     }
+   ELM_GENGRID_CHECK_ITC_VER(itc);
+
+   itc->refcount++;
+   if (itc->refcount == 0) itc->refcount--;
 }
 
-//XXX: notify class version to user if it is mismatched
 EAPI void
 elm_gengrid_item_class_unref(Elm_Gengrid_Item_Class *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);
-     }
+   ELM_GENGRID_CHECK_ITC_VER(itc);
+
+   if (itc->refcount > 0) itc->refcount--;
+   if (itc->delete_me && (!itc->refcount))
+     elm_gengrid_item_class_free(itc);
 }
 
index 39fa0ed..b1fefb8 100644 (file)
    (it)->unhighlight_cb = (Ecore_Cb)_item_unhighlight; \
    (it)->unrealize_cb = (Ecore_Cb)_item_unrealize_cb
 
+#define ELM_GENLIST_CHECK_ITC_VER(itc) \
+   do \
+     { \
+        if (!itc) \
+          { \
+             ERR("Genlist_Item_Class(itc) is NULL"); \
+             return; \
+          } \
+        if (itc->version != ELM_GENLIST_ITEM_CLASS_VERSION) \
+          { \
+             ERR("Genlist_Item_Class version mismatched! required = (%d), current  = (%d)", itc->version, ELM_GENLIST_ITEM_CLASS_VERSION); \
+             return; \
+          } \
+     } \
+   while(0)
+
+
+
 typedef struct _Item_Block  Item_Block;
 typedef struct _Item_Cache  Item_Cache;
 
@@ -5603,43 +5621,36 @@ elm_genlist_item_class_new(void)
    return itc;
 }
 
-//XXX: notify the class version if it is mismatched
 EAPI void
 elm_genlist_item_class_free(Elm_Genlist_Item_Class *itc)
 {
-   if (itc && (itc->version == ELM_GENLIST_ITEM_CLASS_VERSION))
+   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->delete_me) itc->delete_me = EINA_TRUE;
-        if (itc->refcount > 0) elm_genlist_item_class_unref(itc);
-        else
-          {
-             itc->version = 0;
-             free(itc);
-          }
+        itc->version = 0;
+        free(itc);
      }
 }
 
-//XXX: notify the class version if it is mismatched
 EAPI void
 elm_genlist_item_class_ref(Elm_Genlist_Item_Class *itc)
 {
-   if (itc && (itc->version == ELM_GENLIST_ITEM_CLASS_VERSION))
-     {
-        itc->refcount++;
-        if (itc->refcount == 0) itc->refcount--;
-     }
+   ELM_GENLIST_CHECK_ITC_VER(itc);
+
+   itc->refcount++;
+   if (itc->refcount == 0) itc->refcount--;
 }
 
-//XXX: notify the class version if it is mismatched
 EAPI void
 elm_genlist_item_class_unref(Elm_Genlist_Item_Class *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);
-     }
+   ELM_GENLIST_CHECK_ITC_VER(itc);
+
+   if (itc->refcount > 0) itc->refcount--;
+   if (itc->delete_me && (!itc->refcount))
+     elm_genlist_item_class_free(itc);
 }
 
 /* for gengrid as of now */