summaryrefslogtreecommitdiffstats
path: root/src/gui/accessible/linux/atspiadaptor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/accessible/linux/atspiadaptor.cpp')
-rw-r--r--src/gui/accessible/linux/atspiadaptor.cpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/gui/accessible/linux/atspiadaptor.cpp b/src/gui/accessible/linux/atspiadaptor.cpp
index e91539d6ee3..dad0ac2b74a 100644
--- a/src/gui/accessible/linux/atspiadaptor.cpp
+++ b/src/gui/accessible/linux/atspiadaptor.cpp
@@ -1688,6 +1688,17 @@ bool AtSpiAdaptor::accessibleInterface(QAccessibleInterface *interface, const QS
sendReply(connection, message, QVariant::fromValue(QDBusVariant(interface->text(QAccessible::Help))));
} else if (function == "GetState"_L1) {
quint64 spiState = spiStatesFromQState(interface->state());
+ if (QAccessibleAttributesInterface *attributesIface = interface->attributesInterface()) {
+ const QVariant orientationVariant =
+ attributesIface->attributeValue(QAccessible::Attribute::Orientation);
+ if (orientationVariant.isValid()) {
+ Q_ASSERT(orientationVariant.canConvert<Qt::Orientation>());
+ const Qt::Orientation orientation = orientationVariant.value<Qt::Orientation>();
+ setSpiStateBit(&spiState,
+ orientation == Qt::Horizontal ? ATSPI_STATE_HORIZONTAL
+ : ATSPI_STATE_VERTICAL);
+ }
+ }
if (interface->tableInterface()) {
// For tables, setting manages_descendants should
// indicate to the client that it cannot cache these
@@ -1877,7 +1888,7 @@ void AtSpiAdaptor::addMatchingDescendants(QList<QAccessibleInterface *> &matches
const QSpiMatchRuleMatcher &matcher, bool invert,
int count, bool traverse)
{
- if (!accessible || matches.size() >= count)
+ if (!accessible || (count != 0 && matches.size() >= count))
return;
const int childCount = accessible->childCount();
@@ -1889,7 +1900,7 @@ void AtSpiAdaptor::addMatchingDescendants(QList<QAccessibleInterface *> &matches
if (traverse)
addMatchingDescendants(matches, child, matcher, invert, count, traverse);
- if (matches.size() >= count)
+ if (count != 0 && matches.size() >= count)
return;
}
}