}
}
-static int WidgetLifeCycleCallback(const char *appid, widget_lifecycle_event event, const char *instance_id, void *data)
-{
- Dali::WidgetView::Internal::WidgetView* widgetView = static_cast< Dali::WidgetView::Internal::WidgetView* >( data );
- if( event == WIDGET_LIFE_CYCLE_EVENT_APP_DEAD )
- {
- widgetView->ReloadWidget();
- }
- return 0;
-}
-
} // unnamed namespace
Dali::WidgetView::WidgetView WidgetView::New( const std::string& widgetId, const std::string& contentInfo, int width, int height, float updatePeriod )
ops.added_cb = OnBufferAdded;
mWatcherHandle = screen_connector_toolkit_add(&ops, (char *)instanceId, SCREEN_CONNECTOR_SCREEN_TYPE_WIDGET, this);
DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_launch is called. [%s, mPid = %d]\n", mWidgetId.c_str(), mPid );
- widget_service_set_lifecycle_event_cb( mWidgetId.c_str(), WidgetLifeCycleCallback, this );
-
}
void WidgetView::OnSceneConnection( int depth )
// Add to map
mWidgetViewContainer.insert( std::pair<std::string, Dali::WidgetView::WidgetView>( instanceId, widgetView ) );
+ mInstanceIdContainer.push_back( InstanceIdPair( widgetId, instanceId ) );
}
+ // Add lifecycle callback for reload
+ widget_service_set_lifecycle_event_cb( widgetId.c_str(), WidgetLifeCycleCallback, this );
+
DALI_LOG_INFO( gWidgetViewManagerLogging, Debug::Verbose, "WidgetViewManager::AddWidget: success [%s]\n", widgetId.c_str() );
return widgetView;
{
mWidgetViewContainer.erase( iter );
}
+
+ // Delete WidgetInstance
+ auto widgetInstance = std::find_if( mInstanceIdContainer.begin(),
+ mInstanceIdContainer.end(),
+ [instanceId]( InstanceIdPair pair )
+ { return (pair.second == instanceId); } );
+
+ if(widgetInstance != mInstanceIdContainer.end())
+ {
+ mInstanceIdContainer.erase(widgetInstance);
+ }
}
DALI_LOG_INFO( gWidgetViewManagerLogging, Debug::Verbose, "WidgetViewManager::OnTerminatedWidget: Widget is deleted!\n" );
return 0;
}
+int WidgetViewManager::WidgetLifeCycleCallback(const char *appid, widget_lifecycle_event event, const char *instance_id, void *data)
+{
+ WidgetViewManager* widgetViewManager = static_cast< WidgetViewManager* >( data );
+
+ if( event == WIDGET_LIFE_CYCLE_EVENT_APP_DEAD )
+ {
+ for( auto&& instanceIter : widgetViewManager->mInstanceIdContainer )
+ {
+ if( ((instanceIter).first).compare(appid) == 0)
+ {
+ DALI_LOG_INFO( gWidgetViewManagerLogging, Debug::Verbose, "WidgetViewManager::WidgetLifeCycleCallback: Call ReloadWidget [%s, %s]\n",appid, instanceIter.second);
+ WidgetViewIter iter = widgetViewManager->mWidgetViewContainer.find( std::string((instanceIter).second ) );
+ Dali::WidgetView::WidgetView widgetView = iter->second;
+ Dali::WidgetView::GetImplementation( widgetView ).ReloadWidget();
+ }
+ }
+ }
+ return 0;
+}
+
} // namespace Internal
} // namespace WidgetView
// EXTERNAL INCLUDES
#include <dali/public-api/object/base-object.h>
#include <map>
+#include <vector>
+#include <widget_service.h>
namespace Dali
{
*/
int Initialize( Application application, const std::string& name );
+ /**
+ * Callback for event
+ */
static int WidgetEventCallback( const char* widgetId, const char* instanceId, int event, void* data );
+ /**
+ * Callback for life-cycle
+ */
+ static int WidgetLifeCycleCallback( const char *widgetId, widget_lifecycle_event event, const char *instance_id, void *data);
+
/**
* The widgetView is removed from WidgetViewContainer
*/
typedef std::map<std::string, Dali::WidgetView::WidgetView> WidgetViewContainer;
typedef WidgetViewContainer::iterator WidgetViewIter;
+ typedef std::pair< std::string, std::string > InstanceIdPair;
+ typedef std::vector< InstanceIdPair > InstanceIdContainer;
+
WidgetViewContainer mWidgetViewContainer;
+ InstanceIdContainer mInstanceIdContainer;
};
} // namespace Internal