From: ChunEon Park Date: Wed, 29 Feb 2012 07:51:23 +0000 (+0000) Subject: elementary/genlist, gengrid - added itc version checking. X-Git-Tag: v1.0.0~748 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5ff07dd6043ff5fdd3da3d7208b2d4fc322f02f6;p=platform%2Fupstream%2Felementary.git elementary/genlist, gengrid - added itc version checking. SVN revision: 68539 --- diff --git a/src/lib/elm_deprecated_before.h b/src/lib/elm_deprecated_before.h index 4083dc8..0971330 100644 --- a/src/lib/elm_deprecated_before.h +++ b/src/lib/elm_deprecated_before.h @@ -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; }; diff --git a/src/lib/elm_gengrid.c b/src/lib/elm_gengrid.c index 4de2885..c4c009e 100644 --- a/src/lib/elm_gengrid.c +++ b/src/lib/elm_gengrid.c @@ -21,6 +21,23 @@ (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); } diff --git a/src/lib/elm_genlist.c b/src/lib/elm_genlist.c index 39fa0ed..b1fefb8 100644 --- a/src/lib/elm_genlist.c +++ b/src/lib/elm_genlist.c @@ -21,6 +21,24 @@ (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 */