From: Hyoyoung Chang <hyoyoung.chang@samsung.com>
authorraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 3 Aug 2011 05:39:13 +0000 (05:39 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 3 Aug 2011 05:39:13 +0000 (05:39 +0000)
Subject: [E-devel] [patch] elm_genlist - bugfix evas_object_del at
selected callback

This patch is about elm_genlist.
When a user delete genlist object at selected callback,
Genlist don't proper handle it.
Before genlist clearing, genlist delete its widget data.
So sometimes, it's crashed.

I made two point diffs
1. add genlist clearning at _del_hook
2. checking at _item_select, whether it's deleted or not.

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

src/lib/elm_genlist.c

index 2145459..23c2a39 100644 (file)
@@ -540,6 +540,12 @@ _del_hook(Evas_Object *obj)
    if (wd->multi_timer) ecore_timer_del(wd->multi_timer);
    if (wd->mode_type) eina_stringshare_del(wd->mode_type);
    if (wd->scr_hold_timer) ecore_timer_del(wd->scr_hold_timer);
+   if (wd->walking > 0)
+     {
+        wd->walking = 0;
+        elm_genlist_clear(obj);
+     }
+
    free(wd);
 }
 
@@ -829,7 +835,14 @@ _item_select(Elm_Genlist_Item *it)
 call:
    it->walking++;
    it->wd->walking++;
-   if (it->func.func) it->func.func((void *)it->func.data, it->base.widget, it);
+   if (it->func.func)
+     {
+        Evas_Object *baseobj = it->base.widget;
+        const char *objtype = NULL;
+        it->func.func((void *)it->func.data, it->base.widget, it);
+        objtype = evas_object_type_get(baseobj);
+        if ((!objtype) || (!strcmp(objtype,""))) return;
+     }
    if (!it->delete_me)
      evas_object_smart_callback_call(it->base.widget, SIG_SELECTED, it);
    it->walking--;