From 40f0711872ae9889ee8a935a1ab7e35e96c74c92 Mon Sep 17 00:00:00 2001 From: Sunghyun Kim Date: Thu, 20 Aug 2020 19:58:27 +0900 Subject: [PATCH] Check Window visibility for notify to widget Pause/Resume If widget viewer is hide or show, widget also need to know change. For check this, we add a callback for visibility. Change-Id: I7b2d6cbe7d9ca07f01129a2d576ba928bb5424fc --- .../internal/widget_view/widget_view_impl.cpp | 33 +++++++++++++++++++ .../internal/widget_view/widget_view_impl.h | 6 ++++ 2 files changed, 39 insertions(+) diff --git a/widget_viewer_dali/internal/widget_view/widget_view_impl.cpp b/widget_viewer_dali/internal/widget_view/widget_view_impl.cpp index ce0ce0d..e517129 100644 --- a/widget_viewer_dali/internal/widget_view/widget_view_impl.cpp +++ b/widget_viewer_dali/internal/widget_view/widget_view_impl.cpp @@ -352,6 +352,11 @@ bool WidgetView::PauseWidget() return false; } + if( mRemoteSurface ) + { + tizen_remote_surface_transfer_visibility( mRemoteSurface, TIZEN_REMOTE_SURFACE_VISIBILITY_TYPE_INVISIBLE); + } + DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::PauseWidget: Widget is paused (%s, %s)\n", mWidgetId.c_str(), mInstanceId.c_str() ); return true; @@ -366,6 +371,11 @@ bool WidgetView::ResumeWidget() return false; } + if( mRemoteSurface ) + { + tizen_remote_surface_transfer_visibility( mRemoteSurface, TIZEN_REMOTE_SURFACE_VISIBILITY_TYPE_VISIBLE); + } + DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::ResumeWidget: Widget is resumed (%s, %s)\n", mWidgetId.c_str(), mInstanceId.c_str() ); return true; @@ -1061,11 +1071,34 @@ void WidgetView::OnInitialize() void WidgetView::OnSceneConnection( int depth ) { Control::OnSceneConnection( depth ); + Window window = DevelWindow::Get( Self() ); + if( window ) + { + DevelWindow::VisibilityChangedSignal( window ).Connect( this, &WidgetView::OnWindowVisibilityChanged ); + } } void WidgetView::OnSceneDisconnection() { Control::OnSceneDisconnection(); + Window window = DevelWindow::Get( Self() ); + if( window ) + { + DevelWindow::VisibilityChangedSignal( window ).Disconnect( this, &WidgetView::OnWindowVisibilityChanged ); + } +} + +void WidgetView::OnWindowVisibilityChanged( Window window, bool visible ) +{ + if( visible ) + { + ResumeWidget(); + } + else + { + PauseWidget(); + } + DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnWindowVisibilityChanged: visibility is changed (visible: %d)\n", visible ); } void WidgetView::OnSizeSet( const Vector3& targetSize ) diff --git a/widget_viewer_dali/internal/widget_view/widget_view_impl.h b/widget_viewer_dali/internal/widget_view/widget_view_impl.h index b8ba019..04d86d4 100644 --- a/widget_viewer_dali/internal/widget_view/widget_view_impl.h +++ b/widget_viewer_dali/internal/widget_view/widget_view_impl.h @@ -31,6 +31,7 @@ #include #include #include +#include namespace Dali { @@ -286,6 +287,11 @@ private: // From Control virtual void OnSizeAnimation( Animation& animation, const Vector3& targetSize ) override ; private: + /** + * @brief Callback when the visibility of the window is changed. + */ + void OnWindowVisibilityChanged( Window window, bool visible ); + // Undefined WidgetView( const WidgetView& ); -- 2.34.1