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;
};
}
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;
};
}
{
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);
}
#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)
{
}
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)
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,
{
onCanceled();
}
+
+void Popup::onDismissed(Evas_Object *obj, void *eventInfo)
+{
+ delete this;
+}