diff options
Diffstat (limited to 'src/gui/accessible/linux/atspiadaptor.cpp')
| -rw-r--r-- | src/gui/accessible/linux/atspiadaptor.cpp | 15 |
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; } } |
