From e3d6a0a27fd980a4ced6e7257abdc32bc192e871 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Artur=20=C5=9Awigo=C5=84?= Date: Fri, 18 Sep 2020 18:15:50 +0200 Subject: [PATCH] [AT-SPI] Add notification for a11y name/description change Change-Id: I92236ae2558eda77e832c9989a40f65e92cb5a05 --- .../internal/controls/buttons/button-impl.cpp | 11 +++++++ .../internal/controls/buttons/button-impl.h | 1 + .../controls/buttons/toggle-button-impl.cpp | 5 +++ .../internal/controls/buttons/toggle-button-impl.h | 1 + .../controls/control/control-data-impl.cpp | 36 ++++++++++++++++++++++ .../internal/controls/control/control-data-impl.h | 2 ++ .../controls/text-controls/text-label-impl.cpp | 5 +++ .../controls/text-controls/text-label-impl.h | 1 + dali-toolkit/public-api/controls/control-impl.cpp | 16 ---------- 9 files changed, 62 insertions(+), 16 deletions(-) diff --git a/dali-toolkit/internal/controls/buttons/button-impl.cpp b/dali-toolkit/internal/controls/buttons/button-impl.cpp index c2d21ba..1f5510d 100644 --- a/dali-toolkit/internal/controls/buttons/button-impl.cpp +++ b/dali-toolkit/internal/controls/buttons/button-impl.cpp @@ -1326,6 +1326,17 @@ std::string Button::AccessibleImpl::GetNameRaw() return labelText; } +Property::Index Button::AccessibleImpl::GetNamePropertyIndex() +{ + Property::Index label = Toolkit::Button::Property::LABEL; + Property::Map labelMap = self.GetProperty(label); + + if (MapContainsTextString(labelMap)) + return label; + else + return Property::INVALID_INDEX; +} + Dali::Accessibility::States Button::AccessibleImpl::CalculateStates() { auto tmp = Control::Impl::AccessibleImpl::CalculateStates(); diff --git a/dali-toolkit/internal/controls/buttons/button-impl.h b/dali-toolkit/internal/controls/buttons/button-impl.h index 881b0a1..ebe34e0 100644 --- a/dali-toolkit/internal/controls/buttons/button-impl.h +++ b/dali-toolkit/internal/controls/buttons/button-impl.h @@ -549,6 +549,7 @@ protected: Dali::Accessibility::States CalculateStates() override; std::string GetNameRaw() override; + Property::Index GetNamePropertyIndex() override; }; }; diff --git a/dali-toolkit/internal/controls/buttons/toggle-button-impl.cpp b/dali-toolkit/internal/controls/buttons/toggle-button-impl.cpp index 15ac51a..a756a22 100644 --- a/dali-toolkit/internal/controls/buttons/toggle-button-impl.cpp +++ b/dali-toolkit/internal/controls/buttons/toggle-button-impl.cpp @@ -395,6 +395,11 @@ std::string ToggleButton::AccessibleImpl::GetDescriptionRaw() return tooltips[index].Get(); } +Property::Index ToggleButton::AccessibleImpl::GetDescriptionPropertyIndex() +{ + return Toolkit::ToggleButton::Property::TOOLTIPS; +} + void ToggleButton::OnStateChange( State newState ) { // TODO: replace it with OnPropertySet hook once Button::Property::SELECTED will be consistently used diff --git a/dali-toolkit/internal/controls/buttons/toggle-button-impl.h b/dali-toolkit/internal/controls/buttons/toggle-button-impl.h index 7609773..a3bb83a 100644 --- a/dali-toolkit/internal/controls/buttons/toggle-button-impl.h +++ b/dali-toolkit/internal/controls/buttons/toggle-button-impl.h @@ -170,6 +170,7 @@ protected: Dali::Accessibility::States CalculateStates() override; std::string GetDescriptionRaw() override; + Property::Index GetDescriptionPropertyIndex() override; }; void OnStateChange( State newState ) override; }; diff --git a/dali-toolkit/internal/controls/control/control-data-impl.cpp b/dali-toolkit/internal/controls/control/control-data-impl.cpp index c3c8062..0a7d70e 100755 --- a/dali-toolkit/internal/controls/control/control-data-impl.cpp +++ b/dali-toolkit/internal/controls/control/control-data-impl.cpp @@ -1882,6 +1882,32 @@ Control::Impl::AccessibleImpl::AccessibleImpl(Dali::Actor self, Dali::Accessibil 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) + { + if (this->self != Dali::Accessibility::Accessible::GetCurrentlyHighlightedActor()) + { + return; + } + + if (index == DevelControl::Property::ACCESSIBILITY_NAME + || (index == GetNamePropertyIndex() && !controlImpl.mAccessibilityNameSet)) + { + if (controlImpl.mAccessibilityGetNameSignal.Empty()) + { + Emit(Dali::Accessibility::ObjectPropertyChangeEvent::NAME); + } + } + + if (index == DevelControl::Property::ACCESSIBILITY_DESCRIPTION + || (index == GetDescriptionPropertyIndex() && !controlImpl.mAccessibilityDescriptionSet)) + { + if (controlImpl.mAccessibilityGetDescriptionSignal.Empty()) + { + Emit(Dali::Accessibility::ObjectPropertyChangeEvent::DESCRIPTION); + } + } + }); } std::string Control::Impl::AccessibleImpl::GetName() @@ -2218,6 +2244,16 @@ void Control::Impl::AccessibleImpl::EnsureSelfVisible() } } +Property::Index Control::Impl::AccessibleImpl::GetNamePropertyIndex() +{ + return Actor::Property::NAME; +} + +Property::Index Control::Impl::AccessibleImpl::GetDescriptionPropertyIndex() +{ + return Property::INVALID_INDEX; +} + void Control::Impl::PositionOrSizeChangedCallback( PropertyNotification &p ) { auto self = Dali::Actor::DownCast(p.GetTarget()); diff --git a/dali-toolkit/internal/controls/control/control-data-impl.h b/dali-toolkit/internal/controls/control/control-data-impl.h index 0d00428..8d34435 100755 --- a/dali-toolkit/internal/controls/control/control-data-impl.h +++ b/dali-toolkit/internal/controls/control/control-data-impl.h @@ -590,6 +590,8 @@ public: virtual Dali::Accessibility::States CalculateStates(); virtual void EnsureChildVisible(Actor child); virtual void EnsureSelfVisible(); + virtual Property::Index GetNamePropertyIndex(); + virtual Property::Index GetDescriptionPropertyIndex(); }; std::function< std::unique_ptr< Dali::Accessibility::Accessible >( Actor ) > accessibilityConstructor; diff --git a/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp index 2b61ddb..d02fd67 100755 --- a/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp @@ -989,6 +989,11 @@ std::string TextLabel::AccessibleImpl::GetNameRaw() return slf.GetProperty( Toolkit::TextLabel::Property::TEXT ).Get< std::string >(); } +Property::Index TextLabel::AccessibleImpl::GetNamePropertyIndex() +{ + return Toolkit::TextLabel::Property::TEXT; +} + std::string TextLabel::AccessibleImpl::GetText( size_t startOffset, size_t endOffset ) { diff --git a/dali-toolkit/internal/controls/text-controls/text-label-impl.h b/dali-toolkit/internal/controls/text-controls/text-label-impl.h index 4bef484..926128e 100644 --- a/dali-toolkit/internal/controls/text-controls/text-label-impl.h +++ b/dali-toolkit/internal/controls/text-controls/text-label-impl.h @@ -186,6 +186,7 @@ protected: bool SetSelection( size_t selectionNum, size_t startOffset, size_t endOffset ) override; std::string GetNameRaw() override; + Property::Index GetNamePropertyIndex() override; }; }; diff --git a/dali-toolkit/public-api/controls/control-impl.cpp b/dali-toolkit/public-api/controls/control-impl.cpp index 684e695..c34dbb3 100644 --- a/dali-toolkit/public-api/controls/control-impl.cpp +++ b/dali-toolkit/public-api/controls/control-impl.cpp @@ -652,14 +652,6 @@ void Control::OnPropertySet(Property::Index index, const Property::Value& proper } break; } - case Toolkit::DevelControl::Property::ACCESSIBILITY_NAME: - { - if( Dali::Accessibility::IsUp() ) - { - Dali::Accessibility::Accessible::Get(Self())->Emit( Dali::Accessibility::ObjectPropertyChangeEvent::NAME ); - } - break; - } case Toolkit::DevelControl::Property::ACCESSIBILITY_ROLE: { if( Dali::Accessibility::IsUp() ) @@ -668,14 +660,6 @@ void Control::OnPropertySet(Property::Index index, const Property::Value& proper } break; } - case Toolkit::DevelControl::Property::ACCESSIBILITY_DESCRIPTION: - { - if( Dali::Accessibility::IsUp() ) - { - Dali::Accessibility::Accessible::Get(Self())->Emit( Dali::Accessibility::ObjectPropertyChangeEvent::DESCRIPTION ); - } - break; - } } } -- 2.7.4