Check Window visibility for notify to widget Pause/Resume 79/241879/3 accepted/tizen/unified/20200826.133136 submit/tizen/20200821.080232
authorSunghyun Kim <scholb.kim@samsung.com>
Thu, 20 Aug 2020 10:58:27 +0000 (19:58 +0900)
committerSunghyun Kim <scholb.kim@samsung.com>
Fri, 21 Aug 2020 05:45:38 +0000 (14:45 +0900)
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

widget_viewer_dali/internal/widget_view/widget_view_impl.cpp
widget_viewer_dali/internal/widget_view/widget_view_impl.h

index ce0ce0dfa5db3c401685f738159b32382be8b2c6..e517129317d8097c00eb5f06d7e09f89ab363cf9 100644 (file)
@@ -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 )
index b8ba019c25d3cdb68806352a2c35791a7b652ae9..04d86d4de6d356e12dea26ed3bb715e250c88a61 100644 (file)
@@ -31,6 +31,7 @@
 #include <wayland-extension/tizen-remote-surface-client-protocol.h>
 #include <tbm_surface.h>
 #include <screen_connector_toolkit.h>
+#include <dali/devel-api/adaptor-framework/window-devel.h>
 
 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& );