From 245d02017a1bf8ba4c18db31427c6b3a5a31c696 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Artur=20=C5=9Awigo=C5=84?= Date: Thu, 25 May 2023 13:01:24 +0200 Subject: [PATCH] [AT-SPI] Allow manual control of ReadingMaterial::listChildrenCount In complex UIs, where the logical number of children (i.e. not the number of Actors) is difficult to determine, because (1) the children have differing roles, or (2) the children are not direct descendants of the parent object, the best-effort calculation done by the AT-SPI bridge (for the purpose of reading "Showing %d items") will often be wrong. This patch recognizes the "item_count" attribute as a high-priority, manual setting of the number of children for the purpose of reading "Showing %d items" with the provided value. Change-Id: I2d027ea4930d7e9f63dee9fc4bb55a14caebf7b8 --- dali/internal/accessibility/bridge/bridge-accessible.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/dali/internal/accessibility/bridge/bridge-accessible.cpp b/dali/internal/accessibility/bridge/bridge-accessible.cpp index 0d0f9ed..8fa36d2 100644 --- a/dali/internal/accessibility/bridge/bridge-accessible.cpp +++ b/dali/internal/accessibility/bridge/bridge-accessible.cpp @@ -528,9 +528,16 @@ BridgeAccessible::ReadingMaterialType BridgeAccessible::GetReadingMaterial() } } + auto attributes = self->GetAttributes(); + auto itemCount = attributes.find("item_count"); auto atspiRole = self->GetRole(); int32_t listChildrenCount = 0; - if(atspiRole == Role::DIALOG) + if(itemCount != attributes.end()) + { + // "item_count" gives manual control to the application, so it has priority + listChildrenCount = std::atoi(itemCount->second.c_str()); + } + else if(atspiRole == Role::DIALOG) { listChildrenCount = GetItemCountOfFirstDescendantContainer(self, Role::LIST, Role::LIST_ITEM, true); } @@ -546,7 +553,6 @@ BridgeAccessible::ReadingMaterialType BridgeAccessible::GetReadingMaterial() nameFromTextInterface = textInterface->GetText(0, textInterface->GetCharacterCount()); } - auto attributes = self->GetAttributes(); auto name = self->GetName(); auto role = static_cast(atspiRole); auto states = self->GetStates(); -- 2.7.4