From 95dbfd86b8adb4a52227c71765426d927cba59ec Mon Sep 17 00:00:00 2001 From: leerang song Date: Mon, 20 May 2013 14:38:54 +0900 Subject: [PATCH] When list is used in popup, sound playing. [Issue#] PLM(130509-5588) [Problem] When list is used in popup, sound not playing. [Cause] When popup is deleted in idler callback, sounds events are also getting deleted [Solution] Add a ecore_idler_add("callback", "data") API [SCMRequest] N/A Change-Id: I22722321bc3076a87d3f14b7dcec16f649374d7b --- src/Core/Service/CMakeLists.txt | 1 + src/Core/Service/PeriodChanger.cpp | 17 ++++++++++++----- src/Core/Service/PeriodChanger.h | 2 ++ 3 files changed, 15 insertions(+), 5 deletions(-) mode change 100644 => 100755 src/Core/Service/CMakeLists.txt diff --git a/src/Core/Service/CMakeLists.txt b/src/Core/Service/CMakeLists.txt old mode 100644 new mode 100755 index 0a4c9a4..abc3c72 --- a/src/Core/Service/CMakeLists.txt +++ b/src/Core/Service/CMakeLists.txt @@ -26,6 +26,7 @@ PKG_CHECK_MODULES(${DEPS} ecore-x elementary provider + ecore REQUIRED ) ADD_DEFINITIONS(${${DEPS}_CFLAGS}) diff --git a/src/Core/Service/PeriodChanger.cpp b/src/Core/Service/PeriodChanger.cpp index c754fb5..b58719e 100755 --- a/src/Core/Service/PeriodChanger.cpp +++ b/src/Core/Service/PeriodChanger.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -101,7 +102,6 @@ void PeriodChanger::showPeriodPopup() Evas_Object* window = createWindow(); Evas_Object* periodList = elm_list_add(window); - Evas_Object* radio; if (!periodList) { LogD("failed to add elm_list_add"); @@ -111,12 +111,12 @@ void PeriodChanger::showPeriodPopup() setPopupListData(); // TODO Language ID should be used, not static string for(int i = 0 ; i < sizeof(m_hour) / sizeof(PopupListData); i++) { - radio = elm_radio_add(periodList); - elm_radio_state_value_set(radio, + m_hour[i].radio = elm_radio_add(periodList); + elm_radio_state_value_set(m_hour[i].radio, m_currentPeriod == m_hour[i].newPeriod ? EINA_FALSE : EINA_TRUE); elm_list_item_append(periodList, m_hour[i].period, - radio, + m_hour[i].radio, NULL, selectPeriodCallback, &m_hour[i]); } @@ -248,7 +248,7 @@ void PeriodChanger::selectPeriodCallback(void *data, Evas_Object *obj, void *eve LogD("Update period is set to %f", popupData->newPeriod); popupData->periodChanger->requestToPlatform(popupData->newPeriod); - popupData->periodChanger->destroyPeriodPopup(obj); + ecore_idler_add(popupDestroyIdlerCallback, popupData); } void PeriodChanger::cancelButtonCallback(void *data, Evas_Object *obj, void *event_info) @@ -258,4 +258,11 @@ void PeriodChanger::cancelButtonCallback(void *data, Evas_Object *obj, void *eve This->destroyPeriodPopup(obj); } +Eina_Bool PeriodChanger::popupDestroyIdlerCallback(void *data) +{ + LogD("enter"); + PopupListData* popupData = static_cast(data); + popupData->periodChanger->destroyPeriodPopup(popupData->radio); + return ECORE_CALLBACK_CANCEL; +} } // Service diff --git a/src/Core/Service/PeriodChanger.h b/src/Core/Service/PeriodChanger.h index 06cfbfb..aabf1e7 100755 --- a/src/Core/Service/PeriodChanger.h +++ b/src/Core/Service/PeriodChanger.h @@ -50,6 +50,7 @@ class PeriodChanger { static void selectPeriodCallback(void *data, Evas_Object *obj, void *event_info); static void cancelButtonCallback(void *data, Evas_Object *obj, void *event_info); + static Eina_Bool popupDestroyIdlerCallback(void *data); PeriodChanger( std::string& boxId, std::string& instanceId, @@ -66,6 +67,7 @@ class PeriodChanger { PeriodChanger* periodChanger; float newPeriod; const char* period; + Evas_Object* radio; }; PopupListData m_hour[5]; -- 2.7.4