From: taeyoon0.lee Date: Wed, 15 Feb 2017 11:15:28 +0000 (+0900) Subject: Modified deleted signal X-Git-Tag: accepted/tizen/4.0/unified/20170920.081503~1^2~14 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fwidget-viewer-dali.git;a=commitdiff_plain;h=36d72e386041646f344e6803b7851c6a9756a765 Modified deleted signal - Added internal api for deleted signal - When deleted, widget view manager removes the widget form container Change-Id: Ia4e388bf4a81d629c628e0cea3c13f34ba2fcbb6 --- diff --git a/internal/widget_view/widget_view_impl.cpp b/internal/widget_view/widget_view_impl.cpp index 02b6873..2158c97 100644 --- a/internal/widget_view/widget_view_impl.cpp +++ b/internal/widget_view/widget_view_impl.cpp @@ -83,6 +83,7 @@ DALI_SIGNAL_REGISTRATION( Dali::WidgetView, WidgetView, "widgetCreationAborted", 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 ); @@ -137,7 +138,7 @@ static void OnSurfaceRemoved( const char *appid, const char *instance_id, const { Dali::WidgetView::Internal::WidgetView* widgetView = static_cast< Dali::WidgetView::Internal::WidgetView* >( data ); - if( widgetView ) + if( widgetView && !widgetView->GetInstanceId().empty() ) { widgetView->CloseRemoteSurface(); widgetView->RemoveWidgetImage(); @@ -201,15 +202,7 @@ WidgetView::WidgetView( const std::string& widgetId, const std::string& contentI 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() @@ -364,7 +357,6 @@ void WidgetView::ActivateFaultedWidget() Dali::WidgetView::WidgetView handle( GetOwner() ); mWidgetCreationAbortedSignal.Emit( handle ); - return; } @@ -416,18 +408,40 @@ void WidgetView::CreateWidgetImageView() 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() ); @@ -575,10 +589,10 @@ void WidgetView::SetProperty( BaseObject* object, Property::Index index, const P } 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; } @@ -678,6 +692,11 @@ Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetFaultedSig return mWidgetFaultedSignal; } +Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetView::WidgetTerminatedSignal() +{ + return mWidgetTerminatedSignal; +} + void WidgetView::OnInitialize() { char* instanceId = NULL; diff --git a/internal/widget_view/widget_view_impl.h b/internal/widget_view/widget_view_impl.h index 40aec7e..c43f929 100644 --- a/internal/widget_view/widget_view_impl.h +++ b/internal/widget_view/widget_view_impl.h @@ -148,6 +148,8 @@ public: // Internal API void ShowTapWidgetState( bool show ); + void TerminateWidget(); + public: //Signals /** @@ -180,6 +182,8 @@ public: //Signals */ Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetFaultedSignal(); + Dali::WidgetView::WidgetView::WidgetViewSignalType& WidgetTerminatedSignal(); + protected: /** @@ -277,6 +281,9 @@ private: Dali::WidgetView::WidgetView::WidgetViewSignalType mWidgetContentUpdatedSignal; Dali::WidgetView::WidgetView::WidgetViewSignalType mWidgetUpdatePeriodChangedSignal; Dali::WidgetView::WidgetView::WidgetViewSignalType mWidgetFaultedSignal; + + // Internal signal + Dali::WidgetView::WidgetView::WidgetViewSignalType mWidgetTerminatedSignal; }; } // namespace Internal diff --git a/internal/widget_view_manager/widget_view_manager_impl.cpp b/internal/widget_view_manager/widget_view_manager_impl.cpp index 4a48de3..ee15f79 100644 --- a/internal/widget_view_manager/widget_view_manager_impl.cpp +++ b/internal/widget_view_manager/widget_view_manager_impl.cpp @@ -198,6 +198,8 @@ Dali::WidgetView::WidgetView WidgetViewManager::AddWidget( const std::string& wi if( !instanceId.empty() ) { + Dali::WidgetView::GetImplementation( widgetView ).WidgetTerminatedSignal().Connect( this, &WidgetViewManager::OnTerminatedWidget ); + // Add to map mWidgetViewContainer.insert( std::pair( instanceId, widgetView ) ); } @@ -207,6 +209,23 @@ Dali::WidgetView::WidgetView WidgetViewManager::AddWidget( const std::string& wi 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 ); diff --git a/internal/widget_view_manager/widget_view_manager_impl.h b/internal/widget_view_manager/widget_view_manager_impl.h index 1fb0786..24f79df 100644 --- a/internal/widget_view_manager/widget_view_manager_impl.h +++ b/internal/widget_view_manager/widget_view_manager_impl.h @@ -71,6 +71,11 @@ private: static int WidgetEventCallback( const char* widgetId, const char* instanceId, int event, void* data ); + /** + * The widgetView is removed from WidgetViewContainer + */ + void OnTerminatedWidget( Dali::WidgetView::WidgetView widgetView ); + private: // Undefined