summaryrefslogtreecommitdiff
path: root/vcl/qt5/Qt5AccessibleWidget.cxx
diff options
context:
space:
mode:
authorSamuel Mehrbrodt <Samuel.Mehrbrodt@cib.de>2018-10-02 11:56:00 +0200
committerSamuel Mehrbrodt <Samuel.Mehrbrodt@cib.de>2018-10-02 15:46:54 +0200
commita8454eb805dfe3cddcef39189af126f5ca34295f (patch)
treeea8df8abb85efcf0b43cad247c7db1d07e541159 /vcl/qt5/Qt5AccessibleWidget.cxx
parent3f53647b6c66a5c1988bf7dd060c4b9624156e3d (diff)
Implement filter for Qt5AccessibleWidget::relations
Change-Id: I1859d612e13b2f0d837aa65012552c441346cb1a Reviewed-on: https://gerrit.libreoffice.org/61236 Tested-by: Jenkins Reviewed-by: Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de>
Diffstat (limited to 'vcl/qt5/Qt5AccessibleWidget.cxx')
-rw-r--r--vcl/qt5/Qt5AccessibleWidget.cxx58
1 files changed, 45 insertions, 13 deletions
diff --git a/vcl/qt5/Qt5AccessibleWidget.cxx b/vcl/qt5/Qt5AccessibleWidget.cxx
index dc8061f2f68a..ffbca8d0338e 100644
--- a/vcl/qt5/Qt5AccessibleWidget.cxx
+++ b/vcl/qt5/Qt5AccessibleWidget.cxx
@@ -62,7 +62,7 @@ int Qt5AccessibleWidget::indexOfChild(const QAccessibleInterface* /* child */) c
namespace
{
-QAccessible::Relation lcl_matchRelation(short relationType)
+QAccessible::Relation lcl_matchUnoRelation(short relationType)
{
switch (relationType)
{
@@ -82,13 +82,46 @@ QAccessible::Relation lcl_matchRelation(short relationType)
case AccessibleRelationType::NODE_CHILD_OF:
case AccessibleRelationType::DESCRIBED_BY:
default:
+ SAL_WARN("vcl.qt5", "Unmatched relation: " << relationType);
return 0x0;
}
}
+
+short lcl_matchQtRelation(QAccessible::Relation relationType)
+{
+ switch (relationType)
+ {
+ case QAccessible::Controller:
+ return AccessibleRelationType::CONTROLLER_FOR;
+ case QAccessible::Controlled:
+ return AccessibleRelationType::CONTROLLED_BY;
+ case QAccessible::Label:
+ return AccessibleRelationType::LABEL_FOR;
+ case QAccessible::Labelled:
+ return AccessibleRelationType::LABELED_BY;
+ default:
+ SAL_WARN("vcl.qt5", "Unmatched relation: " << relationType);
+ }
+ return 0;
+}
+
+void lcl_appendRelation(QVector<QPair<QAccessibleInterface*, QAccessible::Relation>>* relations,
+ AccessibleRelation aRelation)
+{
+ QAccessible::Relation aQRelation = lcl_matchUnoRelation(aRelation.RelationType);
+ sal_uInt32 nTargetCount = aRelation.TargetSet.getLength();
+
+ for (sal_uInt32 i = 0; i < nTargetCount; i++)
+ {
+ Reference<XAccessible> xAccessible(aRelation.TargetSet[i], uno::UNO_QUERY);
+ relations->append(QPair(
+ QAccessible::queryAccessibleInterface(new Qt5XAccessible(xAccessible)), aQRelation));
+ }
+}
}
QVector<QPair<QAccessibleInterface*, QAccessible::Relation>>
- Qt5AccessibleWidget::relations(QAccessible::Relation /* match */) const
+Qt5AccessibleWidget::relations(QAccessible::Relation match) const
{
QVector<QPair<QAccessibleInterface*, QAccessible::Relation>> relations;
Reference<XAccessibleRelationSet> xRelationSet
@@ -96,21 +129,20 @@ QVector<QPair<QAccessibleInterface*, QAccessible::Relation>>
if (!xRelationSet.is())
return relations;
- int count = xRelationSet->getRelationCount();
- for (int i = 0; i < count; i++)
+ if (match == QAccessible::AllRelations)
{
- AccessibleRelation aRelation = xRelationSet->getRelation(i);
- QAccessible::Relation aQRelation = lcl_matchRelation(aRelation.RelationType);
- sal_uInt32 nTargetCount = aRelation.TargetSet.getLength();
-
- for (sal_uInt32 i = 0; i < nTargetCount; i++)
+ int count = xRelationSet->getRelationCount();
+ for (int i = 0; i < count; i++)
{
- Reference<XAccessible> xAccessible(aRelation.TargetSet[i], uno::UNO_QUERY);
- relations.append(
- QPair(QAccessible::queryAccessibleInterface(new Qt5XAccessible(xAccessible)),
- aQRelation));
+ AccessibleRelation aRelation = xRelationSet->getRelation(i);
+ lcl_appendRelation(&relations, aRelation);
}
}
+ else
+ {
+ AccessibleRelation aRelation = xRelationSet->getRelation(lcl_matchQtRelation(match));
+ lcl_appendRelation(&relations, aRelation);
+ }
return relations;
}