[AT-SPI] Remove SetAccessibilityConstructor() 32/271132/9
authorArtur Świgoń <a.swigon@samsung.com>
Mon, 14 Mar 2022 15:41:02 +0000 (16:41 +0100)
committerArtur Świgoń <a.swigon@samsung.com>
Tue, 15 Mar 2022 10:03:55 +0000 (11:03 +0100)
This function is replaced by a new Control virtual method,
CreateAccessibleObject(), which allows to achieve the same goal using
less eccentric syntax. A slight reduction in memory usage is also
expected, thanks to the fact that there is now no need to store a
'mAccessibilityConstructor' functor in every Control::Impl instance.

Change-Id: I6399a6ca9acefb1648086b17d154541535f6bd2d

59 files changed:
dali-toolkit/devel-api/controls/control-accessible.cpp
dali-toolkit/devel-api/controls/control-accessible.h
dali-toolkit/devel-api/controls/control-devel.cpp
dali-toolkit/devel-api/controls/control-devel.h
dali-toolkit/internal/controls/alignment/alignment-impl.cpp
dali-toolkit/internal/controls/bloom-view/bloom-view-impl.cpp
dali-toolkit/internal/controls/buttons/button-impl.cpp
dali-toolkit/internal/controls/buttons/button-impl.h
dali-toolkit/internal/controls/buttons/check-box-button-impl.cpp
dali-toolkit/internal/controls/buttons/check-box-button-impl.h
dali-toolkit/internal/controls/buttons/push-button-impl.cpp
dali-toolkit/internal/controls/buttons/push-button-impl.h
dali-toolkit/internal/controls/buttons/radio-button-impl.cpp
dali-toolkit/internal/controls/buttons/radio-button-impl.h
dali-toolkit/internal/controls/buttons/toggle-button-impl.cpp
dali-toolkit/internal/controls/buttons/toggle-button-impl.h
dali-toolkit/internal/controls/canvas-view/canvas-view-impl.cpp
dali-toolkit/internal/controls/control/control-data-impl.cpp
dali-toolkit/internal/controls/control/control-data-impl.h
dali-toolkit/internal/controls/effects-view/effects-view-impl.cpp
dali-toolkit/internal/controls/flex-container/flex-container-impl.cpp
dali-toolkit/internal/controls/gaussian-blur-view/gaussian-blur-view-impl.cpp
dali-toolkit/internal/controls/image-view/image-view-impl.cpp
dali-toolkit/internal/controls/magnifier/magnifier-impl.cpp
dali-toolkit/internal/controls/model3d-view/model3d-view-impl.cpp
dali-toolkit/internal/controls/navigation-view/navigation-view-impl.cpp
dali-toolkit/internal/controls/page-turn-view/page-turn-view-impl.cpp
dali-toolkit/internal/controls/popup/popup-impl.cpp
dali-toolkit/internal/controls/popup/popup-impl.h
dali-toolkit/internal/controls/progress-bar/progress-bar-impl.cpp
dali-toolkit/internal/controls/progress-bar/progress-bar-impl.h
dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.cpp
dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.h
dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.cpp
dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.h
dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-impl.cpp
dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-impl.h
dali-toolkit/internal/controls/scrollable/scrollable-impl.cpp
dali-toolkit/internal/controls/scrollable/scrollable-impl.h
dali-toolkit/internal/controls/shadow-view/shadow-view-impl.cpp
dali-toolkit/internal/controls/slider/slider-impl.cpp
dali-toolkit/internal/controls/slider/slider-impl.h
dali-toolkit/internal/controls/super-blur-view/super-blur-view-impl.cpp
dali-toolkit/internal/controls/table-view/table-view-impl.cpp
dali-toolkit/internal/controls/text-controls/text-anchor-impl.cpp
dali-toolkit/internal/controls/text-controls/text-anchor-impl.h
dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp
dali-toolkit/internal/controls/text-controls/text-editor-impl.h
dali-toolkit/internal/controls/text-controls/text-field-impl.cpp
dali-toolkit/internal/controls/text-controls/text-field-impl.h
dali-toolkit/internal/controls/text-controls/text-label-impl.cpp
dali-toolkit/internal/controls/text-controls/text-label-impl.h
dali-toolkit/internal/controls/text-controls/text-selection-popup-impl.cpp
dali-toolkit/internal/controls/text-controls/text-selection-popup-impl.h
dali-toolkit/internal/controls/text-controls/text-selection-toolbar-impl.cpp
dali-toolkit/internal/controls/tool-bar/tool-bar-impl.cpp
dali-toolkit/internal/controls/video-view/video-view-impl.cpp
dali-toolkit/public-api/controls/control-impl.cpp
dali-toolkit/public-api/controls/control-impl.h

index 582f73905ea15d7e80b24d1419a0eb20d95c5d82..9a3da6c6a484e80ec546455fe21dd00e10a69eaa 100644 (file)
@@ -66,20 +66,15 @@ static Dali::Actor CreateHighlightIndicatorActor()
 }
 } // unnamed namespace
 
-ControlAccessible::ControlAccessible(Dali::Actor self, Dali::Accessibility::Role role, bool modal)
-: ActorAccessible(self),
-  mIsModal(modal)
+ControlAccessible::ControlAccessible(Dali::Actor self)
+: ActorAccessible(self)
 {
-  auto control = Dali::Toolkit::Control::DownCast(Self());
+  auto control = Toolkit::Control::DownCast(self);
 
   Internal::Control&       internalControl = Toolkit::Internal::GetImplementation(control);
   Internal::Control::Impl& controlImpl     = Internal::Control::Impl::Get(internalControl);
-  if(controlImpl.mAccessibilityRole == Dali::Accessibility::Role::UNKNOWN)
-  {
-    controlImpl.mAccessibilityRole = role;
-  }
 
-  Self().PropertySetSignal().Connect(&controlImpl, [this, &controlImpl](Dali::Handle& handle, Dali::Property::Index index, Dali::Property::Value value) {
+  self.PropertySetSignal().Connect(&controlImpl, [this, &controlImpl](Dali::Handle& handle, Dali::Property::Index index, Dali::Property::Value value) {
     if(this->Self() != Dali::Accessibility::Accessible::GetCurrentlyHighlightedActor())
     {
       return;
@@ -222,32 +217,22 @@ bool ControlAccessible::IsShowing()
 
 Dali::Accessibility::States ControlAccessible::CalculateStates()
 {
-  Dali::Actor self = Self();
-  Dali::Accessibility::States state;
-  state[Dali::Accessibility::State::FOCUSABLE] = self.GetProperty<bool>(Actor::Property::KEYBOARD_FOCUSABLE);
-  state[Dali::Accessibility::State::FOCUSED]   = Toolkit::KeyboardFocusManager::Get().GetCurrentFocusActor() == self;
-
-  if(self.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE).GetType() == Dali::Property::NONE)
-  {
-    state[Dali::Accessibility::State::HIGHLIGHTABLE] = false;
-  }
-  else
-  {
-    state[Dali::Accessibility::State::HIGHLIGHTABLE] = self.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE).Get<bool>();
-  }
-
-  state[Dali::Accessibility::State::HIGHLIGHTED] = GetCurrentlyHighlightedActor() == self;
-  state[Dali::Accessibility::State::ENABLED]     = true;
-  state[Dali::Accessibility::State::SENSITIVE]   = true;
-  state[Dali::Accessibility::State::VISIBLE]     = self.GetProperty<bool>(Actor::Property::VISIBLE);
+  using Dali::Accessibility::State;
 
-  if(mIsModal)
-  {
-    state[Dali::Accessibility::State::MODAL] = true;
-  }
-  state[Dali::Accessibility::State::SHOWING] = IsShowing();
-  state[Dali::Accessibility::State::DEFUNCT] = !self.GetProperty(Dali::DevelActor::Property::CONNECTED_TO_SCENE).Get<bool>();
-  return state;
+  Dali::Actor self = Self();
+  Dali::Accessibility::States states;
+
+  states[State::FOCUSABLE]     = self.GetProperty<bool>(Actor::Property::KEYBOARD_FOCUSABLE);
+  states[State::FOCUSED]       = Toolkit::KeyboardFocusManager::Get().GetCurrentFocusActor() == self;
+  states[State::HIGHLIGHTABLE] = self.GetProperty<bool>(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE);
+  states[State::HIGHLIGHTED]   = GetCurrentlyHighlightedActor() == self;
+  states[State::ENABLED]       = true;
+  states[State::SENSITIVE]     = true;
+  states[State::VISIBLE]       = self.GetProperty<bool>(Actor::Property::VISIBLE);
+  states[State::SHOWING]       = IsShowing();
+  states[State::DEFUNCT]       = !self.GetProperty(Dali::DevelActor::Property::CONNECTED_TO_SCENE).Get<bool>();
+
+  return states;
 }
 
 Dali::Accessibility::States ControlAccessible::GetStates()
index 7b0ae78a30ebdaad7424ad56caa98c5e6bb57b3a..dd8389a62dfc090876e7814e45509a68ebc5a951 100644 (file)
@@ -33,10 +33,9 @@ namespace Dali::Toolkit::DevelControl {
 /**
  * @brief Represents the Accessible object for Dali::Toolkit::Control and derived classes
  *
- * You can create a derived class (and register it using SetAccessibilityConstructor)
+ * You can create a derived class (and override Control::CreateAccessibleObject)
  * in order to customize Accessibility for a given control.
  *
- * @see Dali::Toolkit::DevelControl::SetAccessibilityConstructor
  * @see Dali::Accessibility::Accessible
  * @see Dali::Accessibility::Component
  * @see Dali::Accessibility::Collection
@@ -51,8 +50,6 @@ struct DALI_TOOLKIT_API ControlAccessible : public Dali::Accessibility::ActorAcc
 protected:
   Vector2                       mLastPosition{0.0f, 0.0f};
   Dali::WeakHandle<Dali::Actor> mCurrentHighlightActor;
-  bool mIsModal = false;
-  bool mIsRoot = false;
 
   void ScrollToSelf();
 
@@ -73,7 +70,7 @@ protected:
   bool IsShowing();
 
 public:
-  ControlAccessible(Dali::Actor self, Dali::Accessibility::Role role, bool modal = false);
+  ControlAccessible(Dali::Actor self);
 
   /**
    * @copydoc Dali::Accessibility::Accessible::GetName()
index a15e5a1fde82b0bccfac0c1da193ecbcee5ff9b7..a604433e1f08b69aface0d3bdafca4e67cb20fa4 100644 (file)
@@ -224,11 +224,6 @@ void ClearAccessibilityRelations(Toolkit::Control control)
   GetControlImplementation(control).mAccessibilityRelations.clear();
 }
 
-void SetAccessibilityConstructor(Dali::Actor control, std::function<std::unique_ptr<Toolkit::DevelControl::ControlAccessible>(Dali::Actor)> constructor)
-{
-  GetControlImplementation(Toolkit::Control::DownCast(control)).mAccessibilityConstructor = constructor;
-}
-
 void AppendAccessibilityAttribute(Toolkit::Control control, const std::string& key, const std::string& value)
 {
   GetControlImplementation(control).AppendAccessibilityAttribute(key, value);
index 66df21c1fb08f8f3b8939b33a07077541f421e34..895e4047b83b57d1e7280714b36035b6a04571fd 100644 (file)
@@ -561,24 +561,6 @@ DALI_TOOLKIT_API Dali::Accessibility::States GetAccessibilityStates(Toolkit::Con
  */
 DALI_TOOLKIT_API void NotifyAccessibilityStateChange(Toolkit::Control control, Dali::Accessibility::States states, bool recurse);
 
-/**
- * The method allows to set specific constructor for creating accessibility structure
- *
- * Thank to this method hierarchy of accessibility objects can be based on internal hierarchy of Actors.
- * It prevents from necessity of keeping two trees synchronized.
- * The method should be called inside OnInitialize method of all classes inheriting from Control.
- *
- * Possible usage can be as follows:
- * @code
- *   SetAccessibilityConstructor([](Dali::Actor actor) {
-       return std::make_unique<ControlAccessible>(actor, Dali::Accessibility::Role::DIALOG, true));
-      });
-  * @endcode
-  *
-  * param constructor callback creating Accessible object
-  */
-DALI_TOOLKIT_API void SetAccessibilityConstructor(Dali::Actor control, std::function<std::unique_ptr<Toolkit::DevelControl::ControlAccessible>(Dali::Actor)> constructor);
-
 } // namespace DevelControl
 
 } // namespace Toolkit
index 77af58f4c07692d1d5d69aac28f6395c16ca82ea..002ab930c49de922933fb58c7e2a2483d426b091 100644 (file)
@@ -187,9 +187,7 @@ const Toolkit::Alignment::Padding& Alignment::GetPadding() const
 
 void Alignment::OnInitialize()
 {
-  DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
-    return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::FILLER);
-  });
+  Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::FILLER);
 }
 
 void Alignment::OnRelayout(const Vector2& size, RelayoutContainer& container)
index 8b6bf6e24f86018e357dae688d263e8abe726c81..d7e474fbe6c8bae95211db950e9eaf1fbf8f1a46 100644 (file)
@@ -217,9 +217,7 @@ void BloomView::OnInitialize()
   // bind properties for / set shader constants to defaults
   SetupProperties();
 
-  DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
-    return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::ANIMATION);
-  });
+  Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::ANIMATION);
 }
 
 void BloomView::OnSizeSet(const Vector3& targetSize)
index e4a41a1af384fbc114d6588870bf8852295b5c45..6c33e1919f57d0798b0922b3d047a01505cc8770 100644 (file)
@@ -620,6 +620,11 @@ bool Button::OnAccessibilityActivated()
   return OnKeyboardEnter();
 }
 
+DevelControl::ControlAccessible* Button::CreateAccessibleObject()
+{
+  return new ButtonAccessible(Self());
+}
+
 bool Button::OnTouch(Actor actor, const TouchEvent& touch)
 {
   if(!IsDisabled() && (actor == touch.GetHitActor(0)))
index c13fc3fb17241491051a9a73d4de067f04dfd2df..cae3dc824082d2ff5133038b322cff8ba631caa9 100644 (file)
@@ -321,6 +321,11 @@ protected: // From Control
    */
   bool OnAccessibilityActivated() override;
 
+  /**
+   * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+   */
+  DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
   /**
    * @copydoc Toolkit::Control::OnKeyboardEnter()
    */
index 4d63d9297bb1939274c8c29eb8a2c04e555a5fbe..78a2794f6ffa30dddcd89289c020bea408281c8d 100644 (file)
@@ -77,9 +77,12 @@ void CheckBoxButton::OnInitialize()
 {
   Button::OnInitialize();
 
-  DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
-    return std::make_unique<CheckBoxButtonAccessible>(actor, Dali::Accessibility::Role::CHECK_BOX);
-  });
+  Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::CHECK_BOX);
+}
+
+DevelControl::ControlAccessible* CheckBoxButton::CreateAccessibleObject()
+{
+  return new CheckBoxButton::CheckBoxButtonAccessible(Self());
 }
 
 Dali::Accessibility::States CheckBoxButton::CheckBoxButtonAccessible::CalculateStates()
index a6154d5832d2dd657c5f1df332b3a117cc677389..c542143aea521b74173169cd43dac1ff0a359e38 100644 (file)
@@ -63,6 +63,11 @@ private: // From Button
    */
   void OnInitialize() override;
 
+  /**
+   * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+   */
+  DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
 private:
   // Undefined
   CheckBoxButton(const CheckBoxButton&);
index bd6cffb61428fdcd30b34db89591ec72eacfa6e0..9ff9531b4b6d926f8bcef4ef2747491280dc3d69 100644 (file)
@@ -95,9 +95,12 @@ void PushButton::OnInitialize()
   Actor self = Self();
   self.SetProperty(Actor::Property::LEAVE_REQUIRED, true);
 
-  DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) {
-    return std::make_unique<PushButtonAccessible>(actor, Dali::Accessibility::Role::PUSH_BUTTON);
-  });
+  self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::PUSH_BUTTON);
+}
+
+DevelControl::ControlAccessible* PushButton::CreateAccessibleObject()
+{
+  return new PushButtonAccessible(Self());
 }
 
 void PushButton::SetIconAlignment(const PushButton::IconAlignment iconAlignment)
index b04f6b7da709aab599c71aab6573290034795ff9..21a4d019f577deb23830e4c2eb6e718eb4c67a2c 100644 (file)
@@ -93,6 +93,11 @@ private: // From Button
    */
   void OnInitialize() override;
 
+  /**
+   * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+   */
+  DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
 private:
   /**
    * @brief Sets the alignment mode to use to align the icon to the label.
index 01be254a9473501f86f91a62ecba6700e8f14730..bf35f9986175237e7f7c5f6e246f110d769fc224 100644 (file)
@@ -71,9 +71,12 @@ void RadioButton::OnInitialize()
 {
   Button::OnInitialize();
 
-  DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
-    return std::make_unique<RadioButtonAccessible>(actor, Dali::Accessibility::Role::RADIO_BUTTON);
-  });
+  Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::RADIO_BUTTON);
+}
+
+DevelControl::ControlAccessible* RadioButton::CreateAccessibleObject()
+{
+  return new RadioButtonAccessible(Self());
 }
 
 bool RadioButton::OnToggleReleased()
index 8c3289de11c96024eee1c3828153bde9972d4f87..dbe2d3541e0dae28d90af6224aba59e1c5f305b1 100644 (file)
@@ -64,6 +64,11 @@ private: // From Button
    */
   void OnInitialize() override;
 
+  /**
+   * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+   */
+  DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
   /**
    * @copydoc Toolkit::Internal::Button::OnStateChange
    */
index a69f7ec42b2bf3a8b6ae40a2c98b4354e1756950..1b6ef022255d712818a1dd56c38ecafc8f82e9ac 100644 (file)
@@ -106,9 +106,12 @@ void ToggleButton::OnInitialize()
   Actor self = Self();
   self.SetProperty(Actor::Property::LEAVE_REQUIRED, true);
 
-  DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
-    return std::make_unique<ToggleButtonAccessible>(actor, Dali::Accessibility::Role::TOGGLE_BUTTON);
-  });
+  self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::TOGGLE_BUTTON);
+}
+
+DevelControl::ControlAccessible* ToggleButton::CreateAccessibleObject()
+{
+  return new ToggleButtonAccessible(Self());
 }
 
 void ToggleButton::SetProperty(BaseObject* object, Property::Index propertyIndex, const Property::Value& value)
index 587c54eb5d83ae538536fec7214682bac93fff9e..c6652a575aa169aa64dff149a2b8353f86679b78 100644 (file)
@@ -127,6 +127,11 @@ private: // From Button
    */
   void OnInitialize() override;
 
+  /**
+   * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+   */
+  DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
   /**
    * @copydoc Toolkit::Internal::Button::OnRelayout
    */
index 7d4c14b8af86700a9a9fb4ead5f046a152b266f8..39253d0729207ed79594d96ba64cc0072677f9db 100644 (file)
@@ -97,9 +97,7 @@ void CanvasView::OnInitialize()
   // CanvasView can relayout in the OnImageReady, alternative to a signal would be to have a upcall from the Control to CanvasView
   Dali::Toolkit::Control handle(GetOwner());
 
-  DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
-    return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::IMAGE);
-  });
+  Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::IMAGE);
 
   Adaptor::Get().RegisterProcessor(*this, true);
 }
index 2c5a279156e28c0c695ae96e96cad7e6137da7ad..c1618f3d6d019394d2461aaed2e48fc88155f80b 100644 (file)
@@ -522,10 +522,6 @@ Control::Impl::Impl(Control& controlImpl)
   mDispatchKeyEvents(true)
 {
   Dali::Accessibility::Accessible::RegisterExternalAccessibleGetter(&ExternalAccessibleGetter);
-
-  mAccessibilityConstructor = [](Dali::Actor actor) {
-    return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::UNKNOWN);
-  };
 }
 
 Control::Impl::~Impl()
@@ -2059,7 +2055,7 @@ Toolkit::DevelControl::ControlAccessible* Control::Impl::GetAccessibleObject()
 {
   if(!mAccessibleObject)
   {
-    mAccessibleObject = mAccessibilityConstructor(mControlImpl.Self());
+    mAccessibleObject.reset(mControlImpl.CreateAccessibleObject());
   }
 
   return mAccessibleObject.get();
index 4fe9c44c0e8ef437118c314bffea581d6d15b458..13ee7de4a266946876e84743fabca9e54ec10e50 100644 (file)
@@ -535,7 +535,6 @@ public:
   Dali::Accessibility::Role mAccessibilityRole = Dali::Accessibility::Role::UNKNOWN;
 
   std::map<Dali::Accessibility::RelationType, std::set<Accessibility::Accessible*>> mAccessibilityRelations;
-  std::function<std::unique_ptr<Toolkit::DevelControl::ControlAccessible>(Actor)>   mAccessibilityConstructor;
   std::unique_ptr<Toolkit::DevelControl::ControlAccessible>                         mAccessibleObject;
 
   // Gesture Detection
index 937a9c9971810627bc626c7452d0c26a645392b6..5f132c7188a93606f79e4edd24e40344e38f03b2 100644 (file)
@@ -234,9 +234,7 @@ void EffectsView::OnInitialize()
   mChildrenRoot.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
   self.Add(mChildrenRoot);
 
-  DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) {
-    return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::FILLER);
-  });
+  self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::FILLER);
 }
 
 void EffectsView::OnSizeSet(const Vector3& targetSize)
index ae7f1aa7170e9aa9459913aac778cb04bffbfd16..b2204458e9ab84b37f7197241c6e8a8942d6e808 100644 (file)
@@ -835,9 +835,7 @@ void FlexContainer::OnInitialize()
   self.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
   SetAsKeyboardFocusGroup(true);
 
-  DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) {
-    return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::FILLER);
-  });
+  self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::FILLER);
 }
 
 } // namespace Internal
index a471455df50b1322375b840c489234c2a977952d..31b7c61acd105dfe0ca0a15d8015dd634c776b03 100644 (file)
@@ -295,9 +295,7 @@ void GaussianBlurView::OnInitialize()
   mInternalRoot.Add(mVertBlurActor);
   mInternalRoot.Add(mRenderDownsampledCamera);
 
-  DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
-    return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::FILLER);
-  });
+  Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::FILLER);
 }
 
 void GaussianBlurView::OnSizeSet(const Vector3& targetSize)
index a13e43881666be6563fa9d61aea02f48f5089e59..f769b44e0ce4c35db1f267657ef306fae780e3b4 100644 (file)
@@ -94,9 +94,7 @@ void ImageView::OnInitialize()
   Dali::Toolkit::Control handle(GetOwner());
   handle.ResourceReadySignal().Connect(this, &ImageView::OnResourceReady);
 
-  DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
-    return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::IMAGE);
-  });
+  Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::IMAGE);
 }
 
 void ImageView::SetImage(const Property::Map& map)
index 0f8516e35d0fa5154c674dac0665703fabd5f642..671551b7db7e3e3cd35972bfb85906ffa19ffab2 100644 (file)
@@ -218,9 +218,7 @@ void Magnifier::Initialize()
   constraint.AddSource(Source(self, Actor::Property::WORLD_SCALE));
   constraint.Apply();
 
-  DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) {
-    return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::FILLER);
-  });
+  self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::FILLER);
 }
 
 Magnifier::~Magnifier()
index 44c2b9165845dfbad35fcc1e3ec39e5360261965..1384a15f93293288afdb8c7cfbc1af0a5a4fd35d 100644 (file)
@@ -280,9 +280,7 @@ void Model3dView::OnInitialize()
   Shader   shader = Shader::New(SHADER_MODEL3D_VIEW_SIMPLE_SHADER_VERT, SHADER_MODEL3D_VIEW_SIMPLE_SHADER_FRAG);
   mRenderer       = Renderer::New(mesh, shader);
 
-  DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
-    return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::IMAGE);
-  });
+  Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::IMAGE);
 }
 
 void Model3dView::LoadGeometry()
index f511fe832ac0e50701320467341543db13e73e39..f140e3e72b095e7bb25ee544c48dd4ecd5b984d0 100644 (file)
@@ -70,9 +70,7 @@ Toolkit::NavigationView NavigationView::New()
 
 void NavigationView::OnInitialize()
 {
-  DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
-    return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::FILLER);
-  });
+  Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::FILLER);
 }
 
 void NavigationView::OnSceneConnection(int depth)
index df54bd6aac158c16b91e7f7ddb1a6195cf083251..a5e9e95b13ac28a390f0d54fb37dfb132e6fb3fd 100644 (file)
@@ -414,9 +414,7 @@ void PageTurnView::OnInitialize()
   // enable the pan gesture which is attached to the control
   EnableGestureDetection(GestureType::Value(GestureType::PAN));
 
-  DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
-    return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::PAGE_TAB_LIST);
-  });
+  Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::PAGE_TAB_LIST);
 }
 
 Shader PageTurnView::CreateShader(const Property::Map& shaderMap)
index cf4e02c7268a3ba46f73e34bc4f04d386e99ffa6..f7ebcf4c20a90c2667d9992357612e266e129e17 100644 (file)
@@ -345,9 +345,12 @@ void Popup::OnInitialize()
 
   DevelControl::AppendAccessibilityAttribute(Toolkit::Control::DownCast(self), "sub-role", "Alert");
 
-  DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) {
-    return std::make_unique<PopupAccessible>(actor, Dali::Accessibility::Role::DIALOG, true);
-  });
+  self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::DIALOG);
+}
+
+DevelControl::ControlAccessible* Popup::CreateAccessibleObject()
+{
+  return new PopupAccessible(Self());
 }
 
 Popup::~Popup()
@@ -2023,6 +2026,7 @@ Dali::Accessibility::States Popup::PopupAccessible::CalculateStates()
   auto displayState = popup.GetProperty<std::string>(Toolkit::Popup::Property::DISPLAY_STATE);
 
   states[Dali::Accessibility::State::SHOWING] = (displayState == "SHOWN" || displayState == "SHOWING");
+  states[Dali::Accessibility::State::MODAL]   = true;
 
   return states;
 }
index 2445ac68aa7a4d880f4a40832944f06852f686c6..8f4aef0b8eb963a8fa3cc0c24a9bf752373b046a 100644 (file)
@@ -436,6 +436,11 @@ private:
    */
   void OnInitialize() override;
 
+  /**
+   * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+   */
+  DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
   /**
    * Called whenever the popup layout is re-set up.
    * Normally due to a change in contents.
index 0787b56f4c9e2f4292210624e1aad9874c37a969..f98ece7fd70ce1c20c9c0fe4e3d96d746340058c 100644 (file)
@@ -165,11 +165,14 @@ ProgressBar::~ProgressBar()
 
 void ProgressBar::OnInitialize()
 {
-  DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
-    return std::make_unique<ProgressBarAccessible>(actor, Dali::Accessibility::Role::PROGRESS_BAR);
-  });
-  //Enable highightability
-  Self().SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
+  // Accessibility
+  Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::PROGRESS_BAR);
+  Self().SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
+}
+
+DevelControl::ControlAccessible* ProgressBar::CreateAccessibleObject()
+{
+  return new ProgressBarAccessible(Self());
 }
 
 void ProgressBar::OnRelayout(const Vector2& size, RelayoutContainer& container)
index 0879d97f70735d89fa0e754bc39a1e4a910bde65..13c9cb3b5a81e7c57efcd1d31c9daa838d2fabff 100644 (file)
@@ -200,6 +200,11 @@ private:
    */
   void OnInitialize() override;
 
+  /**
+   * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+   */
+  DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
   /**
    * Get the range of the valid values the ProgressBar handle can move between
    *
index a89b9f502412b30db980594955d9b4470ad715dd..88fdf6b8c5c30a7d4d296926dec79ee1edd25168 100644 (file)
@@ -209,12 +209,17 @@ ScrollBar::~ScrollBar()
 
 void ScrollBar::OnInitialize()
 {
+  auto self = Self();
+
   CreateDefaultIndicatorActor();
-  Self().SetProperty(Actor::Property::DRAW_MODE, DrawMode::OVERLAY_2D);
+  self.SetProperty(Actor::Property::DRAW_MODE, DrawMode::OVERLAY_2D);
+
+  self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::SCROLL_BAR);
+}
 
-  DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
-    return std::make_unique<ScrollBarAccessible>(actor, Dali::Accessibility::Role::SCROLL_BAR);
-  });
+DevelControl::ControlAccessible* ScrollBar::CreateAccessibleObject()
+{
+  return new ScrollBarAccessible(Self());
 }
 
 void ScrollBar::SetScrollPropertySource(Handle handle, Property::Index propertyScrollPosition, Property::Index propertyMinScrollPosition, Property::Index propertyMaxScrollPosition, Property::Index propertyScrollContentSize)
index f50009f60d417e5d0a96ecc89ee66483aef5da00..57def7f660119d13b91e258d72d17e119238baaf 100644 (file)
@@ -210,6 +210,11 @@ private: // from Control
    */
   void OnInitialize() override;
 
+  /**
+   * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+   */
+  DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
   /**
    * @copydoc Toolkit::Control::OnPan
    */
index 5984721302595ce5c3ddd84da9e0f4d27b1611a0..6d6e2112125bcb5a07d1bcaf8862bd30963663de 100644 (file)
@@ -367,9 +367,12 @@ void ItemView::OnInitialize()
   // Connect wheel event
   self.WheelEventSignal().Connect(this, &ItemView::OnWheelEvent);
 
-  DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) {
-    return std::make_unique<ItemViewAccessible>(actor, Dali::Accessibility::Role::SCROLL_PANE);
-  });
+  self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::SCROLL_PANE);
+}
+
+DevelControl::ControlAccessible* ItemView::CreateAccessibleObject()
+{
+  return new ItemViewAccessible(Self());
 }
 
 ItemView::~ItemView()
index 2201c842c0061da2afe554ec27e71e1263b2c950..b388e22e82c8b0a9b5db58f19bce3042a38a647d 100644 (file)
@@ -418,6 +418,11 @@ private: // From Control
    */
   void OnInitialize() override;
 
+  /**
+   * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+   */
+  DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
   /**
    * @copydoc Toolkit::Control::OnAccessibilityPan()
    */
index 331ec0c38ae6280a6eec6d0de0c886c011c56d79..a4d724daa4f332ae3201449f2bd7baaacb408f86 100644 (file)
@@ -680,9 +680,12 @@ void ScrollView::OnInitialize()
   // Connect wheel event
   self.WheelEventSignal().Connect(this, &ScrollView::OnWheelEvent);
 
-  DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
-    return std::make_unique<ScrollViewAccessible>(actor, Dali::Accessibility::Role::SCROLL_PANE);
-  });
+  self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::SCROLL_PANE);
+}
+
+DevelControl::ControlAccessible* ScrollView::CreateAccessibleObject()
+{
+  return new ScrollViewAccessible(Self());
 }
 
 void ScrollView::OnSceneConnection(int depth)
index 5bfcb0449751d81ddb89e98930000a16ec148719..d9dddfc1b16edf6e503dc14b655948396b1794e8 100644 (file)
@@ -660,6 +660,11 @@ private: // private overridden functions from CustomActorImpl and Controls
    */
   void OnInitialize() override;
 
+  /**
+   * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+   */
+  DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
   /**
    * @copydoc CustomActorImpl::OnSceneConnection()
    */
index 8cf085684b51495382319bdc876f40b5462bd793..7c123484992bc331cd52d02994088bc1fb7aa631 100644 (file)
@@ -99,9 +99,12 @@ bool Scrollable::ScrollableAccessible::IsScrollable() const
 
 void Scrollable::OnInitialize()
 {
-  DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
-    return std::make_unique<ScrollableAccessible>(actor, Dali::Accessibility::Role::SCROLL_PANE);
-  });
+  Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::SCROLL_PANE);
+}
+
+DevelControl::ControlAccessible* Scrollable::CreateAccessibleObject()
+{
+  return new ScrollableAccessible(Self());
 }
 
 bool Scrollable::IsOvershootEnabled() const
index cbed9c1ccf93e606f65068f65daff642a2872d85..5e30b86ac1dc4d8d868cf174a7a398014a5cfb54 100644 (file)
@@ -133,6 +133,11 @@ protected: // From Control
    */
   virtual void OnInitialize() override;
 
+  /**
+   * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+   */
+  DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
 private:
   /**
    * Temporary function to override EnableScrollOvershoot functionality for overshoot
index 98025ecbb3874f6347a95a65c1a6fcc529bdbab9..9140b97b30f472c845afc75c7cb7fe3439211614 100644 (file)
@@ -256,9 +256,7 @@ void ShadowView::OnInitialize()
   blurStrengthConstraint.AddSource(Source(self, mBlurStrengthPropertyIndex));
   blurStrengthConstraint.Apply();
 
-  DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
-    return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::FILLER);
-  });
+  Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::FILLER);
 }
 
 void ShadowView::OnChildAdd(Actor& child)
index 7f47940f8f772e9e1c9dbd5047b25902e18058bd..a48ddbec9c5e35c8cc1b7ad1d64d89d6d9b7f9f7 100644 (file)
@@ -202,15 +202,17 @@ void Slider::OnInitialize()
   // Size the Slider actor to a default
   self.SetProperty(Actor::Property::SIZE, Vector2(DEFAULT_HIT_REGION.x, DEFAULT_HIT_REGION.y));
 
-  // Set the Slider to be highlightable in Screen Reader mode
-  self.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
-
   // Connect to the touch signal
   self.TouchedSignal().Connect(this, &Slider::OnTouch);
 
-  DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) {
-    return std::make_unique<SliderAccessible>(actor, Dali::Accessibility::Role::SLIDER);
-  });
+  // Accessibility
+  self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::SLIDER);
+  self.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
+}
+
+DevelControl::ControlAccessible* Slider::CreateAccessibleObject()
+{
+  return new SliderAccessible(Self());
 }
 
 void Slider::OnRelayout(const Vector2& size, RelayoutContainer& container)
index b34f30cebe8189654ac48174323e1ba2a9132dd1..7bf3e2a4b4eefb9e7fea6b5f3496732d70f66229 100644 (file)
@@ -318,6 +318,11 @@ private:
    */
   void OnInitialize() override;
 
+  /**
+   * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+   */
+  DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
   /**
    * Hit region touch
    *
index 31fee226a9a2ac6243adc39ab746eabc09109cad..7ea1492e2f705f5538ac9e1d09282930e2e0b4a2 100644 (file)
@@ -149,9 +149,7 @@ void SuperBlurView::OnInitialize()
 
   mBlurStrengthPropertyIndex = self.RegisterUniqueProperty("blurStrength", 0.f);
 
-  DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) {
-    return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::FILLER);
-  });
+  self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::FILLER);
 }
 
 void SuperBlurView::SetTexture(Texture texture)
index 7a42643f9b331c3962ce2518abc65d5034e1c512..2afc0dafdeb91caeff7976c6d6363116d84b58d2 100644 (file)
@@ -1119,9 +1119,7 @@ void TableView::OnInitialize()
   self.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true);
   SetAsKeyboardFocusGroup(true);
 
-  DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) {
-    return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::TABLE);
-  });
+  self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::TABLE);
 }
 
 void TableView::ResizeContainers(unsigned int rows, unsigned int columns)
index a712d68a5c4662d3513b3340aa006b868bfa585d..8abb0aeaacc671ee28182723ec89dc2a0b7f3c63 100644 (file)
@@ -145,12 +145,14 @@ void TextAnchor::OnInitialize()
 {
   Actor self = Self();
 
-  // Enable highlightability
-  self.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
+  // Accessibility
+  self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::LINK);
+  self.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
+}
 
-  DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) {
-    return std::make_unique<TextAnchorAccessible>(actor, Dali::Accessibility::Role::LINK);
-  });
+DevelControl::ControlAccessible* TextAnchor::CreateAccessibleObject()
+{
+  return new TextAnchorAccessible(Self());
 }
 
 TextAnchor::TextAnchor()
index 75ef5a20858993a8de7c76d7934d6d0e52ac086c..8b32bddad561d3aef7a15d34247d33646cfb43df 100644 (file)
@@ -70,6 +70,11 @@ private: // From Control
    */
   void OnInitialize() override;
 
+  /**
+   * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+   */
+  DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
   /**
    * @copydoc Control::OnPropertySet()
    */
index 4e6fc1f1f7b5ec09f2e91a9ddfd210cc202520d4..d3c01546e59b356e675f4701244f79dff4eb0232 100644 (file)
@@ -582,9 +582,6 @@ void TextEditor::OnInitialize()
   self.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::HEIGHT);
   self.OnSceneSignal().Connect(this, &TextEditor::OnSceneConnect);
 
-  //Enable highightability
-  self.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
-
   DevelControl::SetInputMethodContext(*this, mInputMethodContext);
 
   // Creates an extra control to be used as stencil buffer.
@@ -602,14 +599,19 @@ void TextEditor::OnInitialize()
 
   self.Add(mStencil);
 
-  DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) {
-    return std::make_unique<TextEditorAccessible>(actor, Dali::Accessibility::Role::ENTRY);
-  });
+  // Accessibility
+  self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::ENTRY);
+  self.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
 
   Accessibility::Bridge::EnabledSignal().Connect(this, &TextEditor::OnAccessibilityStatusChanged);
   Accessibility::Bridge::DisabledSignal().Connect(this, &TextEditor::OnAccessibilityStatusChanged);
 }
 
+DevelControl::ControlAccessible* TextEditor::CreateAccessibleObject()
+{
+  return new TextEditorAccessible(Self());
+}
+
 void TextEditor::OnStyleChange(Toolkit::StyleManager styleManager, StyleChange::Type change)
 {
   DALI_LOG_INFO(gTextEditorLogFilter, Debug::Verbose, "TextEditor::OnStyleChange\n");
index de10dd4b1e5d87e5a6837ecec57d704eef43df83..5739ac2b1cfd2baf312e23a7796cd0ff7f030476 100644 (file)
@@ -160,6 +160,11 @@ private: // From Control
    */
   void OnInitialize() override;
 
+  /**
+   * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+   */
+  DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
   /**
    * @copydoc Control::OnStyleChange()
    */
index 22738f6079271ec98ade573fa189e037cdb80c46..b1ea8e7829dbed4990a94f688fc0c5826479cb90 100644 (file)
@@ -527,9 +527,6 @@ void TextField::OnInitialize()
   self.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::HEIGHT);
   self.OnSceneSignal().Connect(this, &TextField::OnSceneConnect);
 
-  //Enable highightability
-  self.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
-
   DevelControl::SetInputMethodContext(*this, mInputMethodContext);
 
   if(Dali::Toolkit::TextField::EXCEED_POLICY_CLIP == mExceedPolicy)
@@ -537,14 +534,19 @@ void TextField::OnInitialize()
     EnableClipping();
   }
 
-  DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) {
-    return std::make_unique<TextFieldAccessible>(actor, Dali::Accessibility::Role::ENTRY);
-  });
+  // Accessibility
+  self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::ENTRY);
+  self.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
 
   Accessibility::Bridge::EnabledSignal().Connect(this, &TextField::OnAccessibilityStatusChanged);
   Accessibility::Bridge::DisabledSignal().Connect(this, &TextField::OnAccessibilityStatusChanged);
 }
 
+DevelControl::ControlAccessible* TextField::CreateAccessibleObject()
+{
+  return new TextFieldAccessible(Self());
+}
+
 void TextField::OnStyleChange(Toolkit::StyleManager styleManager, StyleChange::Type change)
 {
   DALI_LOG_INFO(gTextFieldLogFilter, Debug::Verbose, "TextField::OnStyleChange\n");
index 223fa71c7f518271b5070d766b898600037cbd0c..d2d7fdf8e4d63c3b28e86023b494c58bc626ade4 100644 (file)
@@ -151,6 +151,11 @@ private: // From Control
    */
   void OnInitialize() override;
 
+  /**
+   * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+   */
+  DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
   /**
    * @copydoc Control::OnStyleChange()
    */
index 21a0285b0abdee5a463200e6f7109d7ad25864a3..76d0ee2067f8b8bafe71a2353f114a7892e2cc6c 100644 (file)
@@ -883,9 +883,6 @@ void TextLabel::OnInitialize()
   self.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH);
   self.SetResizePolicy(ResizePolicy::DIMENSION_DEPENDENCY, Dimension::HEIGHT);
 
-  // Enable highlightability
-  self.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
-
   // Enable the text ellipsis.
   mController->SetTextElideEnabled(true); // If false then text larger than control will overflow
 
@@ -899,14 +896,19 @@ void TextLabel::OnInitialize()
   Layout::Engine& engine = mController->GetLayoutEngine();
   engine.SetCursorWidth(0u); // Do not layout space for the cursor.
 
-  DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) {
-    return std::make_unique<TextLabelAccessible>(actor, Dali::Accessibility::Role::LABEL);
-  });
+  // Accessibility
+  self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::LABEL);
+  self.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
 
   Accessibility::Bridge::EnabledSignal().Connect(this, &TextLabel::OnAccessibilityStatusChanged);
   Accessibility::Bridge::DisabledSignal().Connect(this, &TextLabel::OnAccessibilityStatusChanged);
 }
 
+DevelControl::ControlAccessible* TextLabel::CreateAccessibleObject()
+{
+  return new TextLabelAccessible(Self());
+}
+
 void TextLabel::OnStyleChange(Toolkit::StyleManager styleManager, StyleChange::Type change)
 {
   DALI_LOG_INFO(gLogFilter, Debug::Verbose, "TextLabel::OnStyleChange\n");
index fb78d60e37f104908801d6475bd020b3f080ef69..49f9197ea94272affbf34fb433ac27ee44d2f3a4 100644 (file)
@@ -130,6 +130,11 @@ private: // From Control
    */
   void OnInitialize() override;
 
+  /**
+   * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+   */
+  DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
   /**
    * @copydoc Control::OnStyleChange()
    */
index 96838ba317919227ba9ec40c12faf90fa49f932c..5d41058d4076886369b3c57331edf21a502c7cbb 100644 (file)
@@ -397,12 +397,23 @@ void TextSelectionPopup::OnInitialize()
   self.SetResizePolicy(ResizePolicy::FIT_TO_CHILDREN, Dimension::ALL_DIMENSIONS);
   self.SetProperty(Actor::Property::COLOR_ALPHA, 0.0f);
 
-  DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
-    return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::DIALOG, true);
-  });
-
-  //Enable highightability
+  // Accessibility
   self.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
+  self.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::DIALOG);
+}
+
+DevelControl::ControlAccessible* TextSelectionPopup::CreateAccessibleObject()
+{
+  return new TextSelectionPopupAccessible(Self());
+}
+
+Dali::Accessibility::States TextSelectionPopup::TextSelectionPopupAccessible::CalculateStates()
+{
+  auto states = ControlAccessible::CalculateStates();
+
+  states[Dali::Accessibility::State::MODAL] = true;
+
+  return states;
 }
 
 void TextSelectionPopup::HideAnimationFinished(Animation& animation)
index 64130e11e8eaa79e747cfec4ed43cca6beb717f3..41686ee6ca2cd649d1327e74d42ce3c9724adea3 100644 (file)
@@ -24,6 +24,7 @@
 #include <string>
 
 // INTERNAL INCLUDES
+#include <dali-toolkit/devel-api/controls/control-devel.h>
 #include <dali-toolkit/devel-api/controls/table-view/table-view.h>
 #include <dali-toolkit/devel-api/controls/text-controls/text-selection-popup.h>
 #include <dali-toolkit/devel-api/controls/text-controls/text-selection-toolbar.h>
@@ -139,6 +140,11 @@ private: // From Control
    */
   void OnInitialize() override;
 
+  /**
+   * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+   */
+  DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
 private: // Implementation
   void HideAnimationFinished(Animation& animation);
 
@@ -266,6 +272,18 @@ private: // Implementation
    */
   virtual ~TextSelectionPopup();
 
+protected:
+  class TextSelectionPopupAccessible : public DevelControl::ControlAccessible
+  {
+  public:
+    using DevelControl::ControlAccessible::ControlAccessible;
+
+    /**
+     * @copydoc DevelControl::ControlAccessible::CalculateStates()
+     */
+    Dali::Accessibility::States CalculateStates() override;
+  };
+
 private:
   // Undefined copy constructor and assignment operators
   TextSelectionPopup(const TextSelectionPopup&);
index 3283e42b8c70fcf4c6e70ab2d30ce966f20f6820..f28f92b88078647e77fb4852f3629100003c42f1 100644 (file)
@@ -164,9 +164,7 @@ void TextSelectionToolbar::OnInitialize()
 {
   SetUp();
 
-  DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
-    return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::TOOL_BAR);
-  });
+  Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::TOOL_BAR);
 }
 
 void TextSelectionToolbar::OnRelayout(const Vector2& size, RelayoutContainer& container)
index e7c29b4e0e2e2634fc01602242dc8e10dee1a85c..19cb548182ac5876845ce595aa9188b82f00b954 100644 (file)
@@ -311,9 +311,7 @@ void ToolBar::OnInitialize()
   mLayout.SetRelativeWidth(0, mLeftRelativeSpace);
   mLayout.SetRelativeWidth(1, mRightRelativeSpace);
 
-  DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
-    return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::TOOL_BAR);
-  });
+  Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::TOOL_BAR);
 }
 
 void ToolBar::OnChildAdd(Actor& child)
index eefdb2e8cd308d00681f82b86b169db4beb4353c..154caac0c31986bd7c02c225c37ce3f02e993b43 100644 (file)
@@ -118,12 +118,9 @@ void VideoView::OnInitialize()
   Actor self = Self();
   mVideoPlayer.FinishedSignal().Connect(this, &VideoView::EmitSignalFinish);
 
-  DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) {
-    return std::make_unique<DevelControl::ControlAccessible>(actor, Dali::Accessibility::Role::VIDEO);
-  });
-
-  //Enable highightability
-  Self().SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
+  // Accessibility
+  self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::VIDEO);
+  self.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true);
 
   //update self property
   self.RegisterProperty(IS_VIDEO_VIEW_PROPERTY_NAME, true, Property::READ_WRITE);
index 14075780ccf012e8f30b06dbb8ed97fdf178ec61..271b826efb6d16f18730717aa645a74ba1d28e3e 100644 (file)
@@ -345,6 +345,11 @@ bool Control::OnAccessibilityZoom()
   return false; // Accessibility zoom action is not handled by default
 }
 
+DevelControl::ControlAccessible* Control::CreateAccessibleObject()
+{
+  return new DevelControl::ControlAccessible(Self());
+}
+
 Actor Control::GetNextKeyboardFocusableActor(Actor currentFocusedActor, Toolkit::Control::KeyboardFocus::Direction direction, bool loopEnabled)
 {
   return Actor();
index 0a3584e17eaaba0ba4f982f88b294f1ab1d752e0..9ccb533ead533b8d0168752e794c6e385723fc77 100644 (file)
@@ -120,9 +120,11 @@ public:
   /**
    * @brief Gets the Accessible object that represents this control.
    *
-   * This method creates the Accessible object if necessary, so a non-null return is expected.
+   * This method calls CreateAccessibleObject() if necessary, so a non-null return is expected.
    *
    * @return The Accessible object
+   *
+   * @see CreateAccessibleObject()
    */
   Toolkit::DevelControl::ControlAccessible* GetAccessibleObject();
 
@@ -505,6 +507,24 @@ public: // API for derived classes to override
    */
   virtual bool OnAccessibilityZoom();
 
+  /**
+   * @brief This method should be overriden by deriving classes when they wish to be
+   * represented by a custom Accessible object implementation.
+   *
+   * The AT-SPI infrastructure is responsible for destroying the returned object.
+   *
+   * Currently, this method is called at most once in a given Control's lifetime, when
+   * GetAccessibleObject() is called for the first time. A future version of the
+   * AT-SPI infrastructure, however, may delete the Accessible object and request a new
+   * one to be created (by calling this method) multiple times, for example during
+   * scene connection and disconnection.
+   *
+   * @return The newly created Accessible object
+   *
+   * @see GetAccessibleObject()
+   */
+  virtual DevelControl::ControlAccessible* CreateAccessibleObject();
+
   // Keyboard focus
 
   /**