[Apps Common] Refactored popup close() method. 56/99356/5
authorEugene Kurzberg <i.kurtsberg@samsung.com>
Thu, 24 Nov 2016 14:53:13 +0000 (16:53 +0200)
committerEugene Kurzberg <i.kurtsberg@samsung.com>
Thu, 24 Nov 2016 14:53:13 +0000 (16:53 +0200)
Change-Id: I72d7a380361f89c47ed9911a61dfbde518b75c4b
Signed-off-by: Eugene Kurzberg <i.kurtsberg@samsung.com>
lib-apps-common/inc/Ui/ListPopup.h
lib-apps-common/inc/Ui/Popup.h
lib-apps-common/src/Ui/ListPopup.cpp
lib-apps-common/src/Ui/Popup.cpp

index 32aebe4..e99f172 100644 (file)
@@ -109,7 +109,7 @@ namespace Ui
 
                Evas_Object *m_Window;
                Evas_Object *m_Genlist;
-               Elm_Genlist_Item_Class m_ItemClass;
+               Elm_Genlist_Item_Class *m_ItemClass;
                SelectCallback m_OnSelected;
        };
 }
index 369b2e0..71662de 100644 (file)
@@ -103,10 +103,10 @@ namespace Ui
                void onButtonDestroy(Evas *e, Evas_Object *obj, void *eventInfo);
                void onBackPressed(Evas_Object *obj, void *eventInfo);
                void onBlockPressed(Evas_Object *obj, void *eventInfo);
+               void onDismissed(Evas_Object *obj, void *eventInfo);
 
                size_t m_ButtonCount;
                ButtonCallback m_OnCanceled;
-               Ecore_Timer *m_CloseTimer;
        };
 }
 
index b96e525..b276f39 100644 (file)
@@ -31,12 +31,13 @@ struct ListPopup::ItemData
 
 ListPopup::ListPopup(const char *itemStyle)
        : m_GenlistSize{0}, m_MaxHeight(0), m_IsResizing(false),
-         m_Window(nullptr), m_Genlist(nullptr), m_ItemClass{ ELM_GEN_ITEM_CLASS_HEADER, 0 }
+         m_Window(nullptr), m_Genlist(nullptr)
 {
-       m_ItemClass.item_style = itemStyle;
-       m_ItemClass.func.text_get = (Elm_Gen_Item_Text_Get_Cb) &ListPopup::getText;
-       m_ItemClass.func.content_get = (Elm_Gen_Item_Content_Get_Cb) &ListPopup::getContent;
-       m_ItemClass.func.del = [](void *data, Evas_Object *obj) {
+       m_ItemClass = elm_genlist_item_class_new();
+       m_ItemClass->item_style = itemStyle;
+       m_ItemClass->func.text_get = (Elm_Gen_Item_Text_Get_Cb) &ListPopup::getText;
+       m_ItemClass->func.content_get = (Elm_Gen_Item_Content_Get_Cb) &ListPopup::getContent;
+       m_ItemClass->func.del = [](void *data, Evas_Object *obj) {
                delete (ItemData *) data;
        };
 }
@@ -45,12 +46,13 @@ ListPopup::~ListPopup()
 {
        evas_object_event_callback_del_full(m_Window, EVAS_CALLBACK_RESIZE,
                        makeCallback(&ListPopup::onWindowResized), this);
+       elm_genlist_item_class_free(m_ItemClass);
 }
 
 Elm_Object_Item *ListPopup::addItem(std::string text, void *data, ItemSelectCallback callback)
 {
        ItemData *itemData = new ItemData{ std::move(text), data, std::move(callback) };
-       return elm_genlist_item_append(m_Genlist, &m_ItemClass, itemData,
+       return elm_genlist_item_append(m_Genlist, m_ItemClass, itemData,
                        nullptr, ELM_GENLIST_ITEM_NONE, nullptr, nullptr);
 }
 
index ef8bf49..7c8c850 100644 (file)
 #include <efl_extension.h>
 
 #define BUTTON_DATA_KEY "callback"
-#define POPUP_ANIM_TIME 0.5
 
 using namespace Ui;
 
 Popup::Popup()
-       : m_ButtonCount(0), m_CloseTimer(nullptr)
+       : m_ButtonCount(0)
 {
 }
 
@@ -92,13 +91,7 @@ void Popup::show()
 
 void Popup::close()
 {
-       if (!m_CloseTimer) {
-               evas_object_hide(getEvasObject());
-               m_CloseTimer = ecore_timer_add(POPUP_ANIM_TIME, [](void *data) {
-                       delete (Popup *) data;
-                       return EINA_FALSE;
-               }, this);
-       }
+       elm_popup_dismiss(getEvasObject());
 }
 
 Evas_Object *Popup::onCreate(Evas_Object *parent)
@@ -110,6 +103,8 @@ Evas_Object *Popup::onCreate(Evas_Object *parent)
 
        Evas_Object *popup = elm_popup_add(parent);
        elm_popup_align_set(popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
+       evas_object_smart_callback_add(popup, "dismissed",
+                       makeCallback(&Popup::onDismissed), this);
        evas_object_smart_callback_add(popup, "block,clicked",
                        makeCallback(&Popup::onBlockPressed), this);
        eext_object_event_callback_add(popup, EEXT_CALLBACK_BACK,
@@ -153,3 +148,8 @@ void Popup::onBackPressed(Evas_Object *obj, void *eventInfo)
 {
        onCanceled();
 }
+
+void Popup::onDismissed(Evas_Object *obj, void *eventInfo)
+{
+       delete this;
+}