DALI_SIGNAL_REGISTRATION( Dali::WidgetView, WidgetView, "widgetContentUpdated", SIGNAL_WIDGET_CONTENT_UPDATED )
DALI_SIGNAL_REGISTRATION( Dali::WidgetView, WidgetView, "widgetUpdatePeriodChanged", SIGNAL_WIDGET_UPDATE_PERIOD_CHANGED )
DALI_SIGNAL_REGISTRATION( Dali::WidgetView, WidgetView, "widgetFaulted", SIGNAL_WIDGET_FAULTED )
+DALI_SIGNAL_REGISTRATION( Dali::WidgetView, WidgetView, "widgetTerminated", SIGNAL_WIDGET_TERMINATED )
// Actions
DALI_ACTION_REGISTRATION( Dali::WidgetView, WidgetView, "pauseWidget", ACTION_WIDGETVIEW_PAUSE_WIDGET );
{
Dali::WidgetView::Internal::WidgetView* widgetView = static_cast< Dali::WidgetView::Internal::WidgetView* >( data );
- if( widgetView )
+ if( widgetView && !widgetView->GetInstanceId().empty() )
{
widgetView->CloseRemoteSurface();
widgetView->RemoveWidgetImage();
WidgetView::~WidgetView()
{
- if( !mWidgetId.empty() && !mInstanceId.empty() )
- {
- widget_instance_terminate( mInstanceId.c_str() );
-
- if( mPermanentDelete )
- {
- widget_instance_destroy( mInstanceId.c_str() );
- }
- }
+ TerminateWidget();
}
bool WidgetView::PauseWidget()
Dali::WidgetView::WidgetView handle( GetOwner() );
mWidgetCreationAbortedSignal.Emit( handle );
-
return;
}
void WidgetView::RemoveWidgetImage()
{
- ShowTapWidgetState( true );
+ mWidgetImageView.SetVisible( false );
+ mWidgetImageView.Reset();
- // Emit signal
Dali::WidgetView::WidgetView handle( GetOwner() );
mWidgetDeletedSignal.Emit( handle );
- mWidgetImageView.SetVisible( false );
- mWidgetImageView.Reset();
-
DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::RemoveWidgetImage: Widget image is removed.\n" );
}
+void WidgetView::TerminateWidget()
+{
+ if( !mWidgetId.empty() && !mInstanceId.empty() )
+ {
+ widget_instance_terminate( mInstanceId.c_str() );
+
+ if( mPermanentDelete )
+ {
+ widget_instance_destroy( mInstanceId.c_str() );
+ }
+
+ Dali::WidgetView::WidgetView handle( GetOwner() );
+ mWidgetTerminatedSignal.Emit( handle );
+ mWidgetDeletedSignal.Emit( handle );
+
+ mWidgetId.clear();
+ mInstanceId.clear();
+
+ CloseRemoteSurface();
+ }
+
+ DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::TerminateWidget: Widget is terminated/destroyed and deleted signal is emitted.\n" );
+
+}
+
void WidgetView::SendWidgetEvent( int event )
{
Dali::WidgetView::WidgetView handle( GetOwner() );
}
case Dali::WidgetView::WidgetView::Property::PERMANENT_DELETE:
{
- bool del;
- if( value.Get( del ) )
+ bool permanent;
+ if( value.Get( permanent ) )
{
- impl.SetPermanentDelete( del );
+ impl.SetPermanentDelete( permanent );
}
break;
}
return mWidgetFaultedSignal;
}
+Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetTerminatedSignal()
+{
+ return mWidgetTerminatedSignal;
+}
+
void WidgetView::OnInitialize()
{
char* instanceId = NULL;
if( !instanceId.empty() )
{
+ Dali::WidgetView::GetImplementation( widgetView ).WidgetTerminatedSignal().Connect( this, &WidgetViewManager::OnTerminatedWidget );
+
// Add to map
mWidgetViewContainer.insert( std::pair<std::string, Dali::WidgetView::WidgetView>( instanceId, widgetView ) );
}
return widgetView;
}
+void WidgetViewManager::OnTerminatedWidget( Dali::WidgetView::WidgetView widgetView )
+{
+ std::string instanceId;
+ Dali::Property::Value value = widgetView.GetProperty( Dali::WidgetView::WidgetView::Property::INSTANCE_ID );
+
+ if( value.Get( instanceId ) && !instanceId.empty() && mWidgetViewContainer.size() > 0 )
+ {
+ WidgetViewIter iter = mWidgetViewContainer.find( instanceId );
+ if( iter != mWidgetViewContainer.end() )
+ {
+ mWidgetViewContainer.erase( iter );
+ }
+ }
+
+ DALI_LOG_INFO( gWidgetViewManagerLogging, Debug::Verbose, "WidgetViewManager::OnTerminatedWidget: Widget is deleted!\n" );
+}
+
int WidgetViewManager::WidgetEventCallback( const char* widgetId, const char* instanceId, int event, void* data )
{
WidgetViewManager* widgetViewManager = static_cast< WidgetViewManager* >( data );