bool ClearAccessibilityHighlight(Toolkit::Control control)
{
- auto* controlAccessible = GetControlImplementation(control).GetAccessibleObject();
+ auto controlAccessible = GetControlImplementation(control).GetAccessibleObject();
if(DALI_LIKELY(controlAccessible))
{
return controlAccessible->ClearHighlight();
bool GrabAccessibilityHighlight(Toolkit::Control control)
{
- auto* controlAccessible = GetControlImplementation(control).GetAccessibleObject();
+ auto controlAccessible = GetControlImplementation(control).GetAccessibleObject();
if(DALI_LIKELY(controlAccessible))
{
return controlAccessible->GrabHighlight();
Dali::Accessibility::States GetAccessibilityStates(Toolkit::Control control)
{
- auto* controlAccessible = GetControlImplementation(control).GetAccessibleObject();
+ auto controlAccessible = GetControlImplementation(control).GetAccessibleObject();
if(DALI_LIKELY(controlAccessible))
{
return controlAccessible->GetStates();
void NotifyAccessibilityStateChange(Toolkit::Control control, Dali::Accessibility::States states, bool recurse)
{
- auto* controlAccessible = GetControlImplementation(control).GetAccessibleObject();
+ auto controlAccessible = GetControlImplementation(control).GetAccessibleObject();
if(DALI_LIKELY(controlAccessible))
{
controlAccessible->NotifyAccessibilityStateChange(std::move(states), recurse);
// TODO: replace it with OnPropertySet hook once Button::Property::SELECTED will be consistently used
if(newState == SELECTED_STATE || newState == UNSELECTED_STATE)
{
- auto* accessible = GetAccessibleObject();
+ auto accessible = GetAccessibleObject();
if(DALI_LIKELY(accessible) && accessible->IsHighlighted())
{
accessible->EmitStateChanged(Dali::Accessibility::State::CHECKED, newState == SELECTED_STATE ? 1 : 0, 0);
// TODO: replace it with OnPropertySet hook once Button::Property::SELECTED will be consistently used
if(newState == SELECTED_STATE || newState == UNSELECTED_STATE)
{
- auto* accessible = GetAccessibleObject();
+ auto accessible = GetAccessibleObject();
if(DALI_LIKELY(accessible) && accessible->IsHighlighted())
{
accessible->EmitStateChanged(Dali::Accessibility::State::PRESSED, newState == SELECTED_STATE ? 1 : 0, 0);
// TODO: replace it with OnPropertySet hook once Button::Property::SELECTED will be consistently used
if(newState == SELECTED_STATE || newState == UNSELECTED_STATE)
{
- auto* accessible = GetAccessibleObject();
+ auto accessible = GetAccessibleObject();
if(DALI_LIKELY(accessible) && accessible->IsHighlighted())
{
accessible->EmitStateChanged(Dali::Accessibility::State::CHECKED, newState == SELECTED_STATE ? 1 : 0, 0);
// TODO: replace it with OnPropertySet hook once Button::Property::SELECTED will be consistently used
if(newState == SELECTED_STATE || newState == UNSELECTED_STATE)
{
- auto* accessible = GetAccessibleObject();
+ auto accessible = GetAccessibleObject();
if(DALI_LIKELY(accessible) && accessible->IsHighlighted())
{
accessible->EmitStateChanged(Dali::Accessibility::State::CHECKED, mCurrentToggleIndex ? 1 : 0, 0);
return rect.width > 0 && rect.height > 0;
}
-Dali::Accessibility::Accessible* ExternalAccessibleGetter(Dali::Actor actor)
-{
- auto control = Toolkit::Control::DownCast(actor);
- if(!control)
- {
- return nullptr;
- }
-
- auto& controlImpl = Toolkit::Internal::GetImplementation(control);
-
- return controlImpl.GetAccessibleObject();
-}
-
} // unnamed namespace
// clang-format off
mDispatchKeyEvents(true),
mProcessorRegistered(false)
{
- Dali::Accessibility::Accessible::RegisterExternalAccessibleGetter(&ExternalAccessibleGetter);
+ Accessibility::Accessible::RegisterExternalAccessibleGetter([](Dali::Actor actor) -> std::shared_ptr<Accessibility::Accessible> {
+ auto control = Toolkit::Control::DownCast(actor);
+ if(!control)
+ {
+ return nullptr;
+ }
+
+ auto& controlImpl = Toolkit::Internal::GetImplementation(control);
+
+ return controlImpl.GetAccessibleObject();
+ });
}
Control::Impl::~Impl()
{
auto lastPosition = accessible->GetLastPosition();
auto accessibleRect = accessible->GetExtents(Dali::Accessibility::CoordinateType::WINDOW);
- auto rect = GetShowingGeometry(accessibleRect, accessible);
+ auto rect = GetShowingGeometry(accessibleRect, accessible.get());
switch(mAccessibilityLastScreenRelativeMoveType)
{
void Control::Impl::OnAccessibilityPropertySet(Dali::Handle& handle, Dali::Property::Index index, const Dali::Property::Value& value)
{
- auto* accessible = GetAccessibleObject();
+ auto accessible = GetAccessibleObject();
if(DALI_LIKELY(accessible))
{
if(mAccessibilityGetNameSignal.Empty())
{
controlImpl.mImpl->mAccessibilityHidden = hidden;
- auto* accessible = controlImpl.GetAccessibleObject();
+ auto accessible = controlImpl.GetAccessibleObject();
if(DALI_LIKELY(accessible))
{
auto* parent = dynamic_cast<Dali::Accessibility::ActorAccessible*>(accessible->GetParent());
return mIdleCallbackRegistered;
}
-Toolkit::DevelControl::ControlAccessible* Control::Impl::GetAccessibleObject()
+std::shared_ptr<Toolkit::DevelControl::ControlAccessible> Control::Impl::GetAccessibleObject()
{
if(mAccessibleCreatable && !mAccessibleObject)
{
mAccessibleObject.reset(mControlImpl.CreateAccessibleObject());
}
- return mAccessibleObject.get();
+ return mAccessibleObject;
}
bool Control::Impl::IsAccessibleCreated() const
/**
* @copydoc Dali::Toolkit::Internal::Control::GetAccessibleObject()
*/
- Toolkit::DevelControl::ControlAccessible* GetAccessibleObject();
+ std::shared_ptr<Toolkit::DevelControl::ControlAccessible> GetAccessibleObject();
/**
* @copydoc Dali::Toolkit::DevelControl::IsAccessibleCreated()
Dali::Accessibility::Role mAccessibilityRole = Dali::Accessibility::Role::UNKNOWN;
std::map<Dali::Accessibility::RelationType, std::set<Accessibility::Accessible*>> mAccessibilityRelations;
- std::unique_ptr<Toolkit::DevelControl::ControlAccessible> mAccessibleObject;
+ std::shared_ptr<Toolkit::DevelControl::ControlAccessible> mAccessibleObject;
// Gesture Detection
PinchGestureDetector mPinchGestureDetector;
// Convert the bool state to the actual display state to use.
mDisplayState = display ? Toolkit::Popup::SHOWING : Toolkit::Popup::HIDING;
- auto* accessible = Dali::Accessibility::Accessible::Get(Self());
+ auto accessible = Dali::Accessibility::Accessible::GetOwningPtr(Self());
if(display)
{
controlDataImpl.ResourceReady();
}
-Toolkit::DevelControl::ControlAccessible* Control::GetAccessibleObject()
+std::shared_ptr<Toolkit::DevelControl::ControlAccessible> Control::GetAccessibleObject()
{
return mImpl->GetAccessibleObject();
}
auto parent = accessible->GetParent();
if(parent && !accessible->GetStates()[Dali::Accessibility::State::MANAGES_DESCENDANTS])
{
- parent->EmitActiveDescendantChanged(accessible);
+ parent->EmitActiveDescendantChanged(accessible.get());
}
}
}
}
case Actor::Property::VISIBLE:
{
- auto* accessible = GetAccessibleObject();
+ auto accessible = GetAccessibleObject();
if(DALI_LIKELY(accessible) && accessible->IsHighlighted())
{
accessible->EmitVisible(Self().GetProperty<bool>(Actor::Property::VISIBLE));
*
* @see CreateAccessibleObject()
*/
- Toolkit::DevelControl::ControlAccessible* GetAccessibleObject();
+ std::shared_ptr<Toolkit::DevelControl::ControlAccessible> GetAccessibleObject();
// Gesture Detection