Fix Widget bug when reloading 97/247897/7
authorSunghyun Kim <scholb.kim@samsung.com>
Wed, 18 Nov 2020 07:28:29 +0000 (16:28 +0900)
committersunghyun kim <scholb.kim@samsung.com>
Thu, 19 Nov 2020 06:08:47 +0000 (06:08 +0000)
1.After reload widget, the status of widget need to be resumed if it
visible.

2. widget_instance_get_content() need to call with widget_instance_unref();

Change-Id: I999e9e5f9f14c26b58cb275e2258c955fb4620c3

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

index f1a49a337bd0ad9d4000373458fe830b6a50b2cf..f498c1794ea60f3893d44987f522ed6aeb54ae3b 100644 (file)
@@ -302,7 +302,8 @@ WidgetView::WidgetView()
   mCreated( false ),
   mResizeRequired( false ),
   mPaused( false ),
-  mPausedManually( false )
+  mPausedManually( false ),
+  mWindowVisible( true )
 {
 }
 
@@ -329,7 +330,8 @@ WidgetView::WidgetView( const std::string& widgetId, const std::string& contentI
   mCreated( false ),
   mResizeRequired( false ),
   mPaused( false ),
-  mPausedManually( false )
+  mPausedManually( false ),
+  mWindowVisible( true )
 {
 }
 
@@ -449,7 +451,7 @@ const std::string& WidgetView::GetContentInfo()
   }
 
   mContentInfo = reinterpret_cast< char* >( contentInfo );
-
+  widget_instance_unref( instance );
   return mContentInfo;
 }
 
@@ -1001,6 +1003,7 @@ void WidgetView::OnInitialize()
       return;
     }
     ret = widget_instance_set_period( instance, mUpdatePeriod );
+    widget_instance_unref(instance);
     if( ret < 0 )
     {
       DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnInitialize: widget_instance_set_period is failed [%s].\n", mWidgetId.c_str() );
@@ -1135,15 +1138,16 @@ void WidgetView::OnSceneDisconnection()
 
 void WidgetView::OnWindowVisibilityChanged( Window window, bool visible )
 {
+  mWindowVisible = visible;
   bool needPaused = IsOutOfScreen();
   if( mPausedManually )
   {
-    mPaused = ( needPaused || !visible );
+    mPaused = ( needPaused || !mWindowVisible );
     DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "Do not resume widget, because widget is paued manually \n");
     return;
   }
 
-  if( visible )
+  if( mWindowVisible )
   {
     if( !needPaused)
     {
@@ -1154,7 +1158,6 @@ void WidgetView::OnWindowVisibilityChanged( Window window, bool visible )
   {
     PauseWidgetInternally();
   }
-
   DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::OnWindowVisibilityChanged: visibility is changed (visible: %d)\n", visible );
 }
 
@@ -1728,6 +1731,19 @@ void WidgetView::ReloadWidget()
       DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::ActivateFaultedWidget: widget_instance_launch is failed. [%s]\n", mWidgetId.c_str() );
       ActivateFaultedWidget();
     }
+    mPausedManually = false;
+    bool needPaused = IsOutOfScreen();
+    if( mWindowVisible )
+    {
+      if( !needPaused)
+      {
+        ResumeWidgetInternally();
+      }
+    }
+    else
+    {
+      PauseWidgetInternally();
+    }
   }
 }
 
index 12c5a433aafb460626fef872dc1fefa0050860af..641c23b0be593bda6767d4537b7a08012fd4ce9d 100644 (file)
@@ -358,6 +358,7 @@ private:
   bool mResizeRequired;
   bool mPaused;
   bool mPausedManually;
+  bool mWindowVisible;
 
   Dali::Property::Map mEffectPropertyMap;
   Dali::PropertyNotification mPositionUpdateNotification;