summaryrefslogtreecommitdiff
path: root/vcl/qt5/Qt5AccessibleWidget.cxx
diff options
context:
space:
mode:
authorSamuel Mehrbrodt <Samuel.Mehrbrodt@cib.de>2018-10-02 10:42:07 +0200
committerSamuel Mehrbrodt <Samuel.Mehrbrodt@cib.de>2018-10-02 15:45:43 +0200
commit3f53647b6c66a5c1988bf7dd060c4b9624156e3d (patch)
treeb4b202a4bf0221df9293504b92ae1d04a291fe4b /vcl/qt5/Qt5AccessibleWidget.cxx
parent41b1038874a45097cd9a6b981142029a8466200c (diff)
Implement Qt5AccessibleWidget::relations
without considering 'match' parameter for now Change-Id: I03ec7017fdaae8c8e20f19e6c827aafb093e8a53 Reviewed-on: https://gerrit.libreoffice.org/61231 Tested-by: Jenkins Reviewed-by: Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de>
Diffstat (limited to 'vcl/qt5/Qt5AccessibleWidget.cxx')
-rw-r--r--vcl/qt5/Qt5AccessibleWidget.cxx56
1 files changed, 54 insertions, 2 deletions
diff --git a/vcl/qt5/Qt5AccessibleWidget.cxx b/vcl/qt5/Qt5AccessibleWidget.cxx
index 898123af0711..dc8061f2f68a 100644
--- a/vcl/qt5/Qt5AccessibleWidget.cxx
+++ b/vcl/qt5/Qt5AccessibleWidget.cxx
@@ -27,18 +27,20 @@
#include <Qt5Widget.hxx>
#include <Qt5XAccessible.hxx>
+#include <com/sun/star/accessibility/AccessibleRelationType.hpp>
#include <com/sun/star/accessibility/AccessibleRole.hpp>
#include <com/sun/star/accessibility/AccessibleStateType.hpp>
#include <com/sun/star/accessibility/XAccessible.hpp>
#include <com/sun/star/accessibility/XAccessibleAction.hpp>
#include <com/sun/star/accessibility/XAccessibleComponent.hpp>
#include <com/sun/star/accessibility/XAccessibleKeyBinding.hpp>
+#include <com/sun/star/accessibility/XAccessibleRelationSet.hpp>
#include <com/sun/star/accessibility/XAccessibleStateSet.hpp>
#include <com/sun/star/uno/Sequence.hxx>
+#include <comphelper/AccessibleImplementationHelper.hxx>
#include <sal/log.hxx>
#include <vcl/popupmenuwindow.hxx>
-#include <comphelper/AccessibleImplementationHelper.hxx>
using namespace css;
using namespace css::accessibility;
@@ -57,10 +59,60 @@ int Qt5AccessibleWidget::childCount() const
}
int Qt5AccessibleWidget::indexOfChild(const QAccessibleInterface* /* child */) const { return 0; }
+
+namespace
+{
+QAccessible::Relation lcl_matchRelation(short relationType)
+{
+ switch (relationType)
+ {
+ case AccessibleRelationType::CONTROLLER_FOR:
+ return QAccessible::Controller;
+ case AccessibleRelationType::CONTROLLED_BY:
+ return QAccessible::Controlled;
+ case AccessibleRelationType::LABEL_FOR:
+ return QAccessible::Label;
+ case AccessibleRelationType::LABELED_BY:
+ return QAccessible::Labelled;
+ case AccessibleRelationType::INVALID:
+ case AccessibleRelationType::CONTENT_FLOWS_FROM:
+ case AccessibleRelationType::CONTENT_FLOWS_TO:
+ case AccessibleRelationType::MEMBER_OF:
+ case AccessibleRelationType::SUB_WINDOW_OF:
+ case AccessibleRelationType::NODE_CHILD_OF:
+ case AccessibleRelationType::DESCRIBED_BY:
+ default:
+ return 0x0;
+ }
+}
+}
+
QVector<QPair<QAccessibleInterface*, QAccessible::Relation>>
Qt5AccessibleWidget::relations(QAccessible::Relation /* match */) const
{
- return QVector<QPair<QAccessibleInterface*, QAccessible::Relation>>();
+ QVector<QPair<QAccessibleInterface*, QAccessible::Relation>> relations;
+ Reference<XAccessibleRelationSet> xRelationSet
+ = m_xAccessible->getAccessibleContext()->getAccessibleRelationSet();
+ if (!xRelationSet.is())
+ return relations;
+
+ int count = xRelationSet->getRelationCount();
+ for (int i = 0; i < count; i++)
+ {
+ 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++)
+ {
+ Reference<XAccessible> xAccessible(aRelation.TargetSet[i], uno::UNO_QUERY);
+ relations.append(
+ QPair(QAccessible::queryAccessibleInterface(new Qt5XAccessible(xAccessible)),
+ aQRelation));
+ }
+ }
+
+ return relations;
}
QAccessibleInterface* Qt5AccessibleWidget::focusChild() const