From 5e56318182aa716bbcdff914f63d7661e575a020 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Artur=20=C5=9Awigo=C5=84?= Date: Mon, 22 Nov 2021 11:04:15 +0100 Subject: [PATCH] [AT-SPI] Add DevelControl::Property::ACCESSIBILITY_HIDDEN Change-Id: Ib9e67ae2bda4e38d9f5eed3cf0977948b3573eac --- .../utc-Dali-Accessibility-Accessible.cpp | 22 ++++++++++++++++++++++ .../devel-api/controls/control-accessible.cpp | 10 ++++++++++ .../devel-api/controls/control-accessible.h | 5 +++++ dali-toolkit/devel-api/controls/control-devel.h | 9 +++++++++ .../controls/control/control-data-impl.cpp | 20 +++++++++++++++++++- .../internal/controls/control/control-data-impl.h | 3 +++ dali-toolkit/public-api/controls/control-impl.cpp | 2 +- 7 files changed, 69 insertions(+), 2 deletions(-) diff --git a/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Accessible.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Accessible.cpp index 6d2e281..643b552 100644 --- a/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Accessible.cpp +++ b/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Accessible.cpp @@ -21,6 +21,7 @@ #include #include +#include #include #include @@ -142,3 +143,24 @@ int UtcDaliAccessibilityCheckShowingState(void) END_TEST; } + +int utcDaliAccessibilityHidden(void) +{ + ToolkitTestApplication application; + + auto control = Toolkit::Control::New(); + auto* accessible = Dali::Accessibility::Accessible::Get(control); + + // Check not hidden + DALI_TEST_CHECK(accessible); + DALI_TEST_CHECK(!accessible->IsHidden()); + DALI_TEST_CHECK(!control.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIDDEN)); + + control.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIDDEN, true); + + // Check hidden + DALI_TEST_CHECK(accessible->IsHidden()); + DALI_TEST_CHECK(control.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIDDEN)); + + END_TEST; +} diff --git a/dali-toolkit/devel-api/controls/control-accessible.cpp b/dali-toolkit/devel-api/controls/control-accessible.cpp index de61874..21fc8e2 100644 --- a/dali-toolkit/devel-api/controls/control-accessible.cpp +++ b/dali-toolkit/devel-api/controls/control-accessible.cpp @@ -282,6 +282,16 @@ Dali::Accessibility::Attributes ControlAccessible::GetAttributes() const return attributeMap; } +bool ControlAccessible::IsHidden() const +{ + auto control = Dali::Toolkit::Control::DownCast(Self()); + + Internal::Control& internalControl = Toolkit::Internal::GetImplementation(control); + Internal::Control::Impl& controlImpl = Internal::Control::Impl::Get(internalControl); + + return controlImpl.mAccessibilityHidden; +} + bool ControlAccessible::GrabFocus() { return Toolkit::KeyboardFocusManager::Get().SetCurrentFocusActor(Self()); diff --git a/dali-toolkit/devel-api/controls/control-accessible.h b/dali-toolkit/devel-api/controls/control-accessible.h index bbff327..7b0ae78 100644 --- a/dali-toolkit/devel-api/controls/control-accessible.h +++ b/dali-toolkit/devel-api/controls/control-accessible.h @@ -116,6 +116,11 @@ public: Dali::Accessibility::Attributes GetAttributes() const override; /** + * @copydoc Dali::Accessibility::Accessible::IsHidden() + */ + bool IsHidden() const override; + + /** * @copydoc Dali::Accessibility::Component::GrabFocus() */ bool GrabFocus() override; diff --git a/dali-toolkit/devel-api/controls/control-devel.h b/dali-toolkit/devel-api/controls/control-devel.h index 5d276cb..33e02f5 100644 --- a/dali-toolkit/devel-api/controls/control-devel.h +++ b/dali-toolkit/devel-api/controls/control-devel.h @@ -175,11 +175,13 @@ enum * @see Dali::Accessibility::Role */ ACCESSIBILITY_ROLE, + /** * @brief Mark of able to highlight object. * @details Name "accessibilityHighlightable", type Property::BOOLEAN. */ ACCESSIBILITY_HIGHLIGHTABLE, + /** * @brief Set of accessibility attributes describing object in accessibility hierarchy * @details Name "accessibilityAttributes", type Property::MAP @@ -192,6 +194,13 @@ enum * @note If a control's dispatchKeyEvents is set to false, then it's children will not emit a key event signal either. */ DISPATCH_KEY_EVENTS, + + /** + * @brief Marks the object as invisible to AT-SPI clients. + * @details Name "accessibilityHidden", type Property::BOOLEAN. + * @note The representative Accessible object will not appear in the AT-SPI tree. + */ + ACCESSIBILITY_HIDDEN, }; } // namespace Property diff --git a/dali-toolkit/internal/controls/control/control-data-impl.cpp b/dali-toolkit/internal/controls/control/control-data-impl.cpp index a476eca..e3cea92 100644 --- a/dali-toolkit/internal/controls/control/control-data-impl.cpp +++ b/dali-toolkit/internal/controls/control/control-data-impl.cpp @@ -468,7 +468,8 @@ const PropertyRegistration Control::Impl::PROPERTY_18(typeRegistration, "accessi const PropertyRegistration Control::Impl::PROPERTY_19(typeRegistration, "accessibilityRole", Toolkit::DevelControl::Property::ACCESSIBILITY_ROLE, Property::INTEGER, &Control::Impl::SetProperty, &Control::Impl::GetProperty); const PropertyRegistration Control::Impl::PROPERTY_20(typeRegistration, "accessibilityHighlightable", Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, Property::BOOLEAN, &Control::Impl::SetProperty, &Control::Impl::GetProperty); const PropertyRegistration Control::Impl::PROPERTY_21(typeRegistration, "accessibilityAttributes", Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES, Property::MAP, &Control::Impl::SetProperty, &Control::Impl::GetProperty); -const PropertyRegistration Control::Impl::PROPERTY_22(typeRegistration, "dispatchKeyEvents", Toolkit::DevelControl::Property::DISPATCH_KEY_EVENTS, Property::BOOLEAN, &Control::Impl::SetProperty, &Control::Impl::GetProperty); +const PropertyRegistration Control::Impl::PROPERTY_22(typeRegistration, "dispatchKeyEvents", Toolkit::DevelControl::Property::DISPATCH_KEY_EVENTS, Property::BOOLEAN, &Control::Impl::SetProperty, &Control::Impl::GetProperty); +const PropertyRegistration Control::Impl::PROPERTY_23(typeRegistration, "accessibilityHidden", Toolkit::DevelControl::Property::ACCESSIBILITY_HIDDEN, Property::BOOLEAN, &Control::Impl::SetProperty, &Control::Impl::GetProperty); // clang-format on @@ -1369,6 +1370,16 @@ void Control::Impl::SetProperty(BaseObject* object, Property::Index index, const } break; } + + case Toolkit::DevelControl::Property::ACCESSIBILITY_HIDDEN: + { + bool hidden; + if(value.Get(hidden)) + { + controlImpl.mImpl->mAccessibilityHidden = hidden; + } + break; + } } } } @@ -1529,11 +1540,18 @@ Property::Value Control::Impl::GetProperty(BaseObject* object, Property::Index i value = controlImpl.mImpl->mAccessibilityAttributes; break; } + case Toolkit::DevelControl::Property::DISPATCH_KEY_EVENTS: { value = controlImpl.mImpl->mDispatchKeyEvents; break; } + + case Toolkit::DevelControl::Property::ACCESSIBILITY_HIDDEN: + { + value = controlImpl.mImpl->mAccessibilityHidden; + break; + } } } diff --git a/dali-toolkit/internal/controls/control/control-data-impl.h b/dali-toolkit/internal/controls/control/control-data-impl.h index e616e52..a227648 100644 --- a/dali-toolkit/internal/controls/control/control-data-impl.h +++ b/dali-toolkit/internal/controls/control/control-data-impl.h @@ -546,6 +546,8 @@ public: bool mAccessibilityHighlightable = false; bool mAccessibilityHighlightableSet = false; + bool mAccessibilityHidden = false; + Dali::Accessibility::Role mAccessibilityRole = Dali::Accessibility::Role::UNKNOWN; std::map> mAccessibilityRelations; @@ -596,6 +598,7 @@ public: static const PropertyRegistration PROPERTY_20; static const PropertyRegistration PROPERTY_21; static const PropertyRegistration PROPERTY_22; + static const PropertyRegistration PROPERTY_23; private: // Accessibility - notification for highlighted object to check if it is showing. diff --git a/dali-toolkit/public-api/controls/control-impl.cpp b/dali-toolkit/public-api/controls/control-impl.cpp index db99728..9c52f22 100644 --- a/dali-toolkit/public-api/controls/control-impl.cpp +++ b/dali-toolkit/public-api/controls/control-impl.cpp @@ -566,7 +566,7 @@ void Control::OnPropertySet(Property::Index index, const Property::Value& proper } case Actor::Property::VISIBLE: { - if(Dali::Accessibility::IsUp()) + if(Dali::Accessibility::IsUp() && !Self().GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIDDEN)) { Dali::Accessibility::Accessible::Get(Self())->EmitVisible(Self().GetProperty(Actor::Property::VISIBLE).Get()); } -- 2.7.4