Support scene holder instead of window in keyinput/keyboard focus 80/214480/1 accepted/tizen/unified/20190924.071753 submit/tizen/20190924.003932 submit/tizen/20190924.010739
authordongsug.song <dongsug.song@samsung.com>
Mon, 23 Sep 2019 07:10:37 +0000 (16:10 +0900)
committerdongsug.song <dongsug.song@samsung.com>
Mon, 23 Sep 2019 08:02:03 +0000 (17:02 +0900)
    - This is not the cause of csfs exception issue. merged again.
    - It is reverted twice : Revert "[Tizen] Revert "Support scene holder instead of window in keyinput/keyboard focus""

This reverts commit bf663c68252f80cbf6066f9139e8f5c2430dd151.

Change-Id: I28ed9b663fb83e12b30d04afee0c3c4a1c0c424f

automated-tests/src/dali-toolkit-internal/CMakeLists.txt
automated-tests/src/dali-toolkit-styling/CMakeLists.txt
automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-adaptor-impl.h
automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-adaptor.cpp
automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-scene-holder.cpp
automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-window.cpp
dali-toolkit/internal/focus-manager/keyboard-focus-manager-impl.cpp
dali-toolkit/internal/focus-manager/keyboard-focus-manager-impl.h
dali-toolkit/internal/focus-manager/keyinput-focus-manager-impl.cpp
dali-toolkit/internal/focus-manager/keyinput-focus-manager-impl.h

index 4037aac..984e177 100755 (executable)
@@ -52,6 +52,7 @@ LIST(APPEND TC_SOURCES
    ../dali-toolkit/dali-toolkit-test-utils/toolkit-tts-player.cpp
    ../dali-toolkit/dali-toolkit-test-utils/toolkit-vector-animation-renderer.cpp
    ../dali-toolkit/dali-toolkit-test-utils/toolkit-window.cpp
+   ../dali-toolkit/dali-toolkit-test-utils/toolkit-scene-holder.cpp
    ../dali-toolkit/dali-toolkit-test-utils/dali-test-suite-utils.cpp
    ../dali-toolkit/dali-toolkit-test-utils/dali-toolkit-test-suite-utils.cpp
    ../dali-toolkit/dali-toolkit-test-utils/dummy-control.cpp
index 1c62f77..0b08ff4 100644 (file)
@@ -38,6 +38,7 @@ LIST(APPEND TC_SOURCES
    ../dali-toolkit/dali-toolkit-test-utils/toolkit-video-player.cpp
    ../dali-toolkit/dali-toolkit-test-utils/toolkit-virtual-keyboard.cpp
    ../dali-toolkit/dali-toolkit-test-utils/toolkit-window.cpp
+   ../dali-toolkit/dali-toolkit-test-utils/toolkit-scene-holder.cpp
    ../dali-toolkit/dali-toolkit-test-utils/dummy-control.cpp
    ../dali-toolkit/dali-toolkit-test-utils/dali-test-suite-utils.cpp
    ../dali-toolkit/dali-toolkit-test-utils/dali-toolkit-test-suite-utils.cpp
index f9f12bf..2feb3e0 100644 (file)
@@ -77,6 +77,7 @@ public:
 
   Dali::RenderSurfaceInterface& GetSurface();
   Dali::WindowContainer GetWindows();
+  Dali::SceneHolderList GetSceneHolders();
 
   Dali::Internal::Adaptor::SceneHolder* GetWindow( Dali::Actor& actor );
   void AddWindow( Internal::Adaptor::SceneHolder* window );
@@ -92,7 +93,7 @@ public:
 private:
 
   Vector<CallbackBase*> mCallbacks;
-  Dali::WindowContainer mWindows;
+  std::vector<Internal::Adaptor::SceneHolder*> mWindows;
   Dali::Adaptor::AdaptorSignalType mResizedSignal;
   Dali::Adaptor::AdaptorSignalType mLanguageChangedSignal;
   Dali::Adaptor::WindowCreatedSignalType mWindowCreatedSignal;
index 9b5d8cf..bfc2478 100644 (file)
@@ -24,6 +24,7 @@
 #include <dali/integration-api/adaptors/adaptor.h>
 
 #include <dali/integration-api/adaptors/scene-holder.h>
+#include <toolkit-scene-holder-impl.h>
 
 #include <toolkit-adaptor-impl.h>
 #include <dali/integration-api/debug.h>
@@ -95,11 +96,7 @@ Adaptor::~Adaptor()
 
 void Adaptor::Start( Dali::Window window )
 {
-  if ( window )
-  {
-    mWindows.push_back( window );
-    mWindowCreatedSignal.Emit( window );
-  }
+  AddWindow( &GetImplementation( window ) );
 }
 
 Integration::Scene Adaptor::GetScene( Dali::Window window )
@@ -153,6 +150,53 @@ Dali::WindowContainer Adaptor::GetWindows()
   return windows;
 }
 
+Dali::SceneHolderList Adaptor::GetSceneHolders()
+{
+  Dali::SceneHolderList sceneHolderList;
+
+  for( auto iter = mWindows.begin(); iter != mWindows.end(); ++iter )
+  {
+    sceneHolderList.push_back( Dali::Integration::SceneHolder( *iter ) );
+  }
+
+  return sceneHolderList;
+}
+
+Dali::Internal::Adaptor::SceneHolder* Adaptor::GetWindow( Dali::Actor& actor )
+{
+  Dali::Integration::Scene scene = Dali::Integration::Scene::Get( actor );
+
+  for( auto window : mWindows )
+  {
+    if ( scene == window->GetScene() )
+    {
+      return window;
+    }
+  }
+
+  return nullptr;
+}
+
+void Adaptor::AddWindow( Internal::Adaptor::SceneHolder* window )
+{
+  if ( window )
+  {
+    mWindows.push_back( window );
+
+    Dali::Integration::SceneHolder newWindow( window );
+    mWindowCreatedSignal.Emit( newWindow );
+  }
+}
+
+void Adaptor::RemoveWindow( Internal::Adaptor::SceneHolder* window )
+{
+  auto iter = std::find( mWindows.begin(), mWindows.end(), window );
+  if( iter != mWindows.end() )
+  {
+    mWindows.erase( iter );
+  }
+}
+
 Dali::Adaptor::AdaptorSignalType& Adaptor::ResizedSignal()
 {
   return mResizedSignal;
@@ -247,6 +291,11 @@ Dali::WindowContainer Adaptor::GetWindows() const
   return mImpl->GetWindows();
 }
 
+Dali::SceneHolderList Adaptor::GetSceneHolders() const
+{
+  return mImpl->GetSceneHolders();
+}
+
 Any Adaptor::GetNativeWindowHandle()
 {
   Any window;
index 953db2c..bfc1315 100644 (file)
  *
  */
 
+#include <dali/integration-api/events/touch-event-integ.h>
 #include <dali/integration-api/adaptors/scene-holder.h>
 
+#include <toolkit-scene-holder-impl.h>
+
 #include <dali/public-api/actors/actor.h>
 #include <dali/public-api/actors/layer.h>
 #include <dali/public-api/common/stage.h>
 #include <dali/public-api/object/base-object.h>
 
+#include <dali/integration-api/adaptors/adaptor.h>
+#include <toolkit-adaptor-impl.h>
+
+using AdaptorImpl = Dali::Internal::Adaptor::Adaptor;
+
 namespace Dali
 {
 
+///////////////////////////////////////////////////////////////////////////////
+//
+// Dali::Internal::Adaptor::SceneHolder Stub
+//
+///////////////////////////////////////////////////////////////////////////////
+
 namespace Internal
 {
 
 namespace Adaptor
 {
 
-class SceneHolder: public Dali::BaseObject
+SceneHolder::SceneHolder( const Dali::Rect<int>& positionSize )
+: mRenderSurface( positionSize ),
+  mScene( Dali::Integration::Scene::New( mRenderSurface ) )
+{
+}
+
+SceneHolder::~SceneHolder()
+{
+  if ( Dali::Adaptor::IsAvailable() )
+  {
+    AdaptorImpl::GetImpl( AdaptorImpl::Get() ).RemoveWindow( this );
+  }
+}
+
+void SceneHolder::Add( Dali::Actor actor )
+{
+  mScene.Add( actor );
+}
+
+void SceneHolder::Remove( Dali::Actor actor )
+{
+  mScene.Remove( actor );
+}
+
+Dali::Layer SceneHolder::GetRootLayer() const
 {
+  return mScene.GetRootLayer();
+}
 
-};
+void SceneHolder::SetBackgroundColor( Vector4 color )
+{
+  return mScene.SetBackgroundColor( color );
+}
+
+Vector4 SceneHolder::GetBackgroundColor() const
+{
+  return mScene.GetBackgroundColor();
+}
 
-} // Adaptor
+void SceneHolder::FeedTouchPoint( Dali::TouchPoint& point, int timeStamp )
+{
+}
 
-} // Internal
+void SceneHolder::FeedWheelEvent( Dali::WheelEvent& wheelEvent )
+{
+}
+
+void SceneHolder::FeedKeyEvent( Dali::KeyEvent& keyEvent )
+{
+}
+
+Dali::Integration::SceneHolder::KeyEventSignalType& SceneHolder::KeyEventSignal()
+{
+  return mScene.KeyEventSignal();
+}
+
+Dali::Integration::SceneHolder::KeyEventGeneratedSignalType& SceneHolder::KeyEventGeneratedSignal()
+{
+  return mScene.KeyEventGeneratedSignal();
+}
+
+Dali::Integration::SceneHolder::TouchSignalType& SceneHolder::TouchSignal()
+{
+  return mScene.TouchSignal();
+}
+
+Dali::Integration::SceneHolder::WheelEventSignalType& SceneHolder::WheelEventSignal()
+{
+  return mScene.WheelEventSignal();
+}
+
+Integration::Scene SceneHolder::GetScene()
+{
+  return mScene;
+}
+
+Integration::RenderSurface& SceneHolder::GetRenderSurface()
+{
+  return mRenderSurface;
+}
+
+} // namespace Adaptor
+
+} // namespace Internal
+
+///////////////////////////////////////////////////////////////////////////////
+//
+// Dali::Integration::SceneHolder Stub
+//
+///////////////////////////////////////////////////////////////////////////////
 
 namespace Integration
 {
 
 SceneHolder::SceneHolder()
 {
+  // Dali::Internal::Adaptor::Adaptor::Get().WindowCreatedSignal().Emit( *this );
 }
 
 SceneHolder::~SceneHolder()
@@ -89,30 +186,54 @@ void SceneHolder::Remove( Actor actor )
   GetImplementation( *this ).Remove( actor );
 }
 
-Layer SceneHolder::GetRootLayer() const
+Dali::Layer SceneHolder::GetRootLayer() const
 {
   return GetImplementation( *this ).GetRootLayer();
 }
 
 void SceneHolder::SetBackgroundColor( Vector4 color )
 {
+  GetImplementation( *this ).SetBackgroundColor( color );
 }
 
 Vector4 SceneHolder::GetBackgroundColor() const
 {
-  return Dali::Stage::GetCurrent().GetBackgroundColor();
+  return GetImplementation( *this ).GetBackgroundColor();
 }
 
 void SceneHolder::FeedTouchPoint( Dali::TouchPoint& point, int timeStamp )
 {
+  GetImplementation( *this ).FeedTouchPoint( point, timeStamp );
 }
 
 void SceneHolder::FeedWheelEvent( Dali::WheelEvent& wheelEvent )
 {
+  GetImplementation( *this ).FeedWheelEvent( wheelEvent );
 }
 
 void SceneHolder::FeedKeyEvent( Dali::KeyEvent& keyEvent )
 {
+  GetImplementation( *this ).FeedKeyEvent( keyEvent );
+}
+
+SceneHolder::KeyEventSignalType& SceneHolder::KeyEventSignal()
+{
+  return GetImplementation( *this ).KeyEventSignal();
+}
+
+SceneHolder::KeyEventGeneratedSignalType& SceneHolder::KeyEventGeneratedSignal()
+{
+  return GetImplementation( *this ).KeyEventGeneratedSignal();
+}
+
+SceneHolder::TouchSignalType& SceneHolder::TouchSignal()
+{
+  return GetImplementation( *this ).TouchSignal();
+}
+
+SceneHolder::WheelEventSignalType& SceneHolder::WheelEventSignal()
+{
+  return GetImplementation( *this ).WheelEventSignal();
 }
 
 } // Integration
index 3620bf9..9849f60 100644 (file)
@@ -46,26 +46,16 @@ namespace Internal
 {
 namespace Adaptor
 {
-class Window : public Dali::BaseObject
-{
-public:
-
-  Window( const PositionSize& positionSize )
-  : mRenderSurface( positionSize ),
-    mScene( Dali::Integration::Scene::New( mRenderSurface ) )
-  {
-  }
 
-  virtual ~Window() = default;
-
-  static Window* New(const PositionSize& positionSize, const std::string& name, const std::string& className, bool isTransparent)
-  {
-    return new Window( positionSize );
-  }
+Window::Window( const PositionSize& positionSize )
+: SceneHolder( positionSize )
+{
+}
 
-  TestRenderSurface mRenderSurface;
-  Integration::Scene mScene;
-};
+Window* Window::New(const PositionSize& positionSize, const std::string& name, const std::string& className, bool isTransparent)
+{
+  return new Window( positionSize );
+}
 
 } // Adaptor
 } // Internal
@@ -111,10 +101,13 @@ Dali::Window Window::New( PositionSize windowPosition, const std::string& name,
 Dali::Window Window::New(PositionSize windowPosition, const std::string& name, const std::string& className, bool isTransparent )
 {
   Internal::Adaptor::Window* window = Internal::Adaptor::Window::New( windowPosition, name, className, isTransparent );
-  Dali::Window newWindow = Window( window );
-  Dali::Adaptor::WindowCreatedSignalType& windowCreatedSignal = AdaptorImpl::Get().WindowCreatedSignal();
-  windowCreatedSignal.Emit( newWindow );
-  return Window( window );
+
+  Dali::Window result( window );
+
+  // This will also emit the window created signals
+  AdaptorImpl::GetImpl( AdaptorImpl::Get() ).AddWindow( window );
+
+  return result;
 }
 
 Window::Window( Internal::Adaptor::Window* window )
@@ -124,12 +117,12 @@ Window::Window( Internal::Adaptor::Window* window )
 
 Integration::Scene Window::GetScene()
 {
-  return GetImplementation( *this ).mScene;
+  return GetImplementation( *this ).GetScene();
 }
 
 Integration::RenderSurface& Window::GetRenderSurface()
 {
-  return GetImplementation( *this ).mRenderSurface;
+  return GetImplementation( *this ).GetRenderSurface();
 }
 
 void Window::Add( Actor actor )
@@ -194,27 +187,27 @@ Window DownCast( BaseHandle handle )
 
 EventProcessingFinishedSignalType& EventProcessingFinishedSignal( Window window )
 {
-  return GetImplementation( window ).mScene.EventProcessingFinishedSignal();
+  return GetImplementation( window ).GetScene().EventProcessingFinishedSignal();
 }
 
 KeyEventSignalType& KeyEventSignal( Window window )
 {
-  return GetImplementation( window ).mScene.KeyEventSignal();
+  return GetImplementation( window ).KeyEventSignal();
 }
 
 KeyEventGeneratedSignalType& KeyEventGeneratedSignal( Window window )
 {
-  return GetImplementation( window ).mScene.KeyEventGeneratedSignal();
+  return GetImplementation( window ).KeyEventGeneratedSignal();
 }
 
 TouchSignalType& TouchSignal( Window window )
 {
-  return GetImplementation( window ).mScene.TouchSignal();
+  return GetImplementation( window ).TouchSignal();
 }
 
 WheelEventSignalType& WheelEventSignal( Window window )
 {
-  return GetImplementation( window ).mScene.WheelEventSignal();
+  return GetImplementation( window ).WheelEventSignal();
 }
 
 } // namespace DevelWindow
index 1a6e9b6..18bd7a0 100644 (file)
@@ -23,7 +23,6 @@
 #include <dali/public-api/actors/layer.h>
 #include <dali/devel-api/adaptor-framework/accessibility-adaptor.h>
 #include <dali/devel-api/adaptor-framework/singleton-service.h>
-#include <dali/devel-api/adaptor-framework/window-devel.h>
 #include <dali/devel-api/adaptor-framework/lifecycle-controller.h>
 #include <dali/public-api/animation/constraints.h>
 #include <dali/public-api/common/stage.h>
@@ -143,23 +142,33 @@ void KeyboardFocusManager::OnAdaptorInit()
 {
   if( Adaptor::IsAvailable() )
   {
-    // Retrieve all the existing widnows
-    Dali::WindowContainer windows = Adaptor::Get().GetWindows();
-    for ( auto iter = windows.begin(); iter != windows.end(); ++iter )
+    // Retrieve all the existing scene holders
+    Dali::SceneHolderList sceneHolders = Adaptor::Get().GetSceneHolders();
+    for( auto iter = sceneHolders.begin(); iter != sceneHolders.end(); ++iter )
     {
-      DevelWindow::KeyEventSignal( *iter ).Connect( mSlotDelegate, &KeyboardFocusManager::OnKeyEvent);
-      DevelWindow::TouchSignal( *iter ).Connect( mSlotDelegate, &KeyboardFocusManager::OnTouch);
+      ( *iter ).KeyEventSignal().Connect( mSlotDelegate, &KeyboardFocusManager::OnKeyEvent );
+      ( *iter ).TouchSignal().Connect( mSlotDelegate, &KeyboardFocusManager::OnTouch );
+      Dali::Window window = DevelWindow::DownCast( *iter );
+      if( window )
+      {
+        window.FocusChangeSignal().Connect( mSlotDelegate, &KeyboardFocusManager::OnWindowFocusChanged);
+      }
     }
 
-    // Get notified when any new window is created afterwards
-    Adaptor::Get().WindowCreatedSignal().Connect( mSlotDelegate, &KeyboardFocusManager::OnWindowCreated);
+    // Get notified when any new scene holder is created afterwards
+    Adaptor::Get().WindowCreatedSignal().Connect( mSlotDelegate, &KeyboardFocusManager::OnSceneHolderCreated );
   }
 }
 
-void KeyboardFocusManager::OnWindowCreated( Dali::Window& window )
+void KeyboardFocusManager::OnSceneHolderCreated( Dali::Integration::SceneHolder& sceneHolder )
 {
-  DevelWindow::KeyEventSignal( window ).Connect( mSlotDelegate, &KeyboardFocusManager::OnKeyEvent);
-  DevelWindow::TouchSignal( window ).Connect( mSlotDelegate, &KeyboardFocusManager::OnTouch);
+  sceneHolder.KeyEventSignal().Connect( mSlotDelegate, &KeyboardFocusManager::OnKeyEvent );
+  sceneHolder.TouchSignal().Connect( mSlotDelegate, &KeyboardFocusManager::OnTouch );
+  Dali::Window window = DevelWindow::DownCast( sceneHolder );
+  if( window )
+  {
+    window.FocusChangeSignal().Connect( mSlotDelegate, &KeyboardFocusManager::OnWindowFocusChanged);
+  }
 }
 
 KeyboardFocusManager::~KeyboardFocusManager()
index caa0ca9..176bfce 100644 (file)
 namespace Dali
 {
 
-class Window;
+namespace Integration
+{
+
+class SceneHolder;
+
+} // namespace Integration
 
 namespace Toolkit
 {
@@ -203,10 +208,10 @@ private:
   void OnAdaptorInit();
 
   /**
-   * This will be called when a new wndow is created
-   * @param window The new window
+   * This will be called when a new scene holder is created
+   * @param sceneHolder The new scene holder
    */
-  void OnWindowCreated( Dali::Window& window );
+  void OnSceneHolderCreated( Dali::Integration::SceneHolder& sceneHolder );
 
   /**
    * Get configuration from StyleManager.
index 71bc352..57e0d86 100644 (file)
@@ -23,8 +23,8 @@
 #include <dali/public-api/actors/layer.h>
 #include <dali/public-api/common/stage.h>
 #include <dali/devel-api/common/stage-devel.h>
-#include <dali/devel-api/adaptor-framework/window-devel.h>
 #include <dali/integration-api/adaptors/adaptor.h>
+#include <dali/integration-api/adaptors/scene-holder.h>
 
 // INTERNAL INCLUDES
 #include <dali-toolkit/public-api/controls/control-impl.h>
@@ -53,23 +53,23 @@ KeyInputFocusManager::KeyInputFocusManager()
   mCurrentFocusControl()
 {
   // Retrieve all the existing widnows
-  Dali::WindowContainer windows = Adaptor::Get().GetWindows();
-  for ( auto iter = windows.begin(); iter != windows.end(); ++iter )
+  Dali::SceneHolderList sceneHolders = Adaptor::Get().GetSceneHolders();
+  for( auto iter = sceneHolders.begin(); iter != sceneHolders.end(); ++iter )
   {
-    DevelWindow::KeyEventGeneratedSignal( *iter ).Connect( mSlotDelegate, &KeyInputFocusManager::OnKeyEvent);
+    ( *iter ).KeyEventGeneratedSignal().Connect( mSlotDelegate, &KeyInputFocusManager::OnKeyEvent );
   }
 
-  // Get notified when any new window is created afterwards
-  Adaptor::Get().WindowCreatedSignal().Connect( mSlotDelegate, &KeyInputFocusManager::OnWindowCreated);
+  // Get notified when any new scene holder is created afterwards
+  Adaptor::Get().WindowCreatedSignal().Connect( mSlotDelegate, &KeyInputFocusManager::OnSceneHolderCreated );
 }
 
 KeyInputFocusManager::~KeyInputFocusManager()
 {
 }
 
-void KeyInputFocusManager::OnWindowCreated( Dali::Window& window )
+void KeyInputFocusManager::OnSceneHolderCreated( Dali::Integration::SceneHolder& sceneHolder )
 {
-  DevelWindow::KeyEventGeneratedSignal( window ).Connect( mSlotDelegate, &KeyInputFocusManager::OnKeyEvent);
+  sceneHolder.KeyEventGeneratedSignal().Connect( mSlotDelegate, &KeyInputFocusManager::OnKeyEvent );
 }
 
 void KeyInputFocusManager::SetFocus( Toolkit::Control control )
index 0f066c5..ab83e37 100644 (file)
 namespace Dali
 {
 
-class Window;
+namespace Integration
+{
+
+class SceneHolder;
+
+} // namespace Integration
 
 namespace Toolkit
 {
@@ -93,10 +98,10 @@ protected:
 
 private:
   /**
-   * This will be called when a new window is created
-   * @param window The new window
+   * This will be called when a new scene holder is created
+   * @param sceneHolder The new scene holder
    */
-  void OnWindowCreated( Dali::Window& window );
+  void OnSceneHolderCreated( Dali::Integration::SceneHolder& sceneHolder );
 
   /**
    * Callback for the key event when no actor in the stage has gained the key input focus