[elm_stackedicon] 1. fix the bug that sometimes the icon is not shown. 2. when a...
authorHyunsil Park <hyunsil.park@samsung.com>
Mon, 6 Sep 2010 14:33:25 +0000 (23:33 +0900)
committerHyunsil Park <hyunsil.park@samsung.com>
Mon, 6 Sep 2010 14:33:25 +0000 (23:33 +0900)
src/lib/elm_stackedicon.c

index 0fc9437..d99b63a 100755 (executable)
@@ -26,7 +26,7 @@ struct _Stackedicon_Item {
        Evas_Coord x, y, w, h;\r
        Evas_Coord mw, mh;      \r
        Eina_Bool on_hold : 1;\r
-       Eina_Bool on_show : 1;  \r
+       Eina_Bool exist : 1;    \r
        int mdx, mdy, mmx, mmy; \r
 };\r
 \r
@@ -42,6 +42,7 @@ struct _Widget_Data {
        Eina_List *list;\r
        Evas_Coord x, y, w, h;\r
        Eina_Bool on_expanded : 1;\r
+       Eina_Bool visible: 1;\r
 };\r
 \r
 static const char *widtype = NULL;\r
@@ -141,7 +142,7 @@ static void _del_image(void *data)
                it->ly = NULL;\r
                it->ic = NULL;  \r
                it->pad = NULL;                 \r
-               it->on_show = EINA_FALSE;\r
+               it->exist = EINA_FALSE;\r
        }\r
 }\r
 \r
@@ -156,7 +157,7 @@ static void _del_all_image(void *data)
                it = (Elm_Stackedicon_Item *)eina_list_nth(wd->list, i);\r
 \r
                if(it != NULL){\r
-                       if(it->on_show == EINA_TRUE){   \r
+                       if(it->exist == EINA_TRUE){     \r
                                _del_image(it);\r
                        }\r
                }\r
@@ -172,7 +173,7 @@ static void _icon_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_inf
        \r
        Evas_Coord x, y;\r
        \r
-       if(it->on_show != EINA_FALSE){\r
+       if(it->exist == EINA_TRUE){\r
                if(it->ly) {\r
                        evas_object_geometry_get(obj, &x, &y, NULL, NULL);\r
                        _icon_map_pos(it, x, y);\r
@@ -184,11 +185,23 @@ static void _icon_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *eve
 {\r
        Elm_Stackedicon_Item *it = data;\r
        Evas_Event_Mouse_Down *ev = event_info;\r
+       Eina_List *l;\r
+       Elm_Stackedicon_Item *_it = NULL;\r
        if(!it) return;\r
+       Widget_Data *wd = elm_widget_data_get(it->parent);\r
+       if(!wd) return;\r
 \r
        it->on_hold = EINA_TRUE;        \r
        it->mdx = ev->output.x;\r
        it->mdy = ev->output.y;\r
+\r
+       EINA_LIST_REVERSE_FOREACH(wd->list, l, _it) {\r
+               if(_it != NULL){\r
+                       if(_it->exist == EINA_TRUE){    \r
+                               evas_object_raise(_it->ly);\r
+                       }\r
+               }\r
+       }\r
 }\r
 \r
 static void _icon_mouse_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)\r
@@ -328,7 +341,6 @@ static void _icon_map_pos(void *data, Evas_Coord x, Evas_Coord y)
        evas_map_alpha_set(m, 1);       \r
        evas_object_map_set(it->ly, m);\r
        evas_object_map_enable_set(it->ly, 1);\r
-       evas_object_show(it->ly);\r
        evas_map_free(m);       \r
 }\r
 \r
@@ -410,7 +422,7 @@ static void _add_image(Evas_Object *obj, void *data)
        it->ic = ic;            \r
        it->pad = pad;\r
        \r
-       it->on_show = EINA_TRUE;\r
+       it->exist = EINA_TRUE;\r
 }\r
 \r
 static void _update_stackedicon(Evas_Object *obj)\r
@@ -422,10 +434,11 @@ static void _update_stackedicon(Evas_Object *obj)
 \r
        EINA_LIST_REVERSE_FOREACH(wd->list, l, it) {\r
                if(it != NULL){\r
-                       if(it->on_show == EINA_FALSE){  \r
+                       if(it->exist == EINA_FALSE){    \r
                                _add_image(obj, it);\r
                        }\r
                        evas_object_move(it->ly, wd->x + wd->w/2 - it->mw/2, wd->y + wd->h/2 - it->mh/2);       \r
+                       if(wd->visible) evas_object_show(it->ly);\r
                }\r
        }\r
 }\r
@@ -442,10 +455,8 @@ static void _show_all_image(Evas_Object *obj)
                it = (Elm_Stackedicon_Item *)eina_list_nth(wd->list, i);\r
 \r
                if(it != NULL){\r
-                       if(it->on_show == EINA_TRUE){   \r
-                               evas_object_show(it->ly);\r
-                               //evas_object_show(it->ic);\r
-                               //evas_object_show(it->pad);                            \r
+                       if(it->exist == EINA_TRUE){     \r
+                               evas_object_show(it->ly);                       \r
                        }\r
                }\r
        }\r
@@ -463,10 +474,8 @@ static void _hide_all_image(Evas_Object *obj)
                it = (Elm_Stackedicon_Item *)eina_list_nth(wd->list, i);\r
 \r
                if(it != NULL){\r
-                       if(it->on_show == EINA_TRUE){   \r
-                               evas_object_hide(it->ly);\r
-                               //evas_object_hide(it->ic);\r
-                               //evas_object_hide(it->pad);                            \r
+                       if(it->exist == EINA_TRUE){     \r
+                               evas_object_hide(it->ly);                       \r
                        }\r
                }\r
        }\r
@@ -512,9 +521,10 @@ _show_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
        Widget_Data *wd = elm_widget_data_get(data);\r
        if (!wd) return;\r
 \r
+       wd->visible = EINA_TRUE;\r
        evas_object_show(wd->clip);\r
        _update_stackedicon(data);      \r
-       _show_all_image(data);\r
+       //_show_all_image(data);\r
 }\r
 \r
 static void\r
@@ -523,6 +533,7 @@ _hide_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
        Widget_Data *wd = elm_widget_data_get(data);\r
        if (!wd) return;\r
 \r
+       wd->visible = EINA_FALSE;\r
        evas_object_hide(wd->clip);\r
        _hide_all_image(data);\r
 }\r
@@ -604,7 +615,7 @@ EAPI Elm_Stackedicon_Item *elm_stackedicon_item_append(Evas_Object *obj, const c
        it->ly = NULL;\r
        it->ic = NULL;\r
        it->index = eina_list_count(wd->list);\r
-       it->on_show = EINA_FALSE;       \r
+       it->exist = EINA_FALSE; \r
        wd->list = eina_list_append(wd->list, it);\r
 \r
        _update_stackedicon(obj);\r
@@ -635,7 +646,7 @@ EAPI Elm_Stackedicon_Item *elm_stackedicon_item_prepend(Evas_Object *obj, const
        it->ly = NULL;\r
        it->ic = NULL;\r
        it->index = eina_list_count(wd->list);\r
-       it->on_show = EINA_FALSE;       \r
+       it->exist = EINA_FALSE; \r
        wd->list = eina_list_prepend(wd->list, it);\r
 \r
        _update_stackedicon(obj);\r