Q_UNUSED(key)
if (KItemListContainer *container = qobject_cast<KItemListContainer *>(object)) {
+ if (auto controller = container->controller(); controller) {
+ if (KItemListView *view = controller->view(); view && view->accessibleParent()) {
+ return view->accessibleParent();
+ }
+ }
return new KItemListContainerAccessible(container);
} else if (KItemListView *view = qobject_cast<KItemListView *>(object)) {
- return new KItemListViewAccessible(view);
+ return new KItemListViewAccessible(view, view->accessibleParent());
}
return nullptr;
return m_groupHeaderCreator;
}
+#ifndef QT_NO_ACCESSIBILITY
+void KItemListView::setAccessibleParentsObject(KItemListContainer *accessibleParentsObject)
+{
+ Q_ASSERT(!m_accessibleParent);
+ m_accessibleParent = new KItemListContainerAccessible(accessibleParentsObject);
+}
+KItemListContainerAccessible *KItemListView::accessibleParent()
+{
+ Q_CHECK_PTR(m_accessibleParent); // We always want the accessibility tree/hierarchy to be complete.
+ return m_accessibleParent;
+}
+#endif
+
QSizeF KItemListView::itemSize() const
{
return m_itemSize;
#include <QGraphicsWidget>
#include <QSet>
+class KItemListContainer;
+class KItemListContainerAccessible;
class KItemListController;
class KItemListGroupHeaderCreatorBase;
class KItemListHeader;
void setGroupHeaderCreator(KItemListGroupHeaderCreatorBase *groupHeaderCreator);
KItemListGroupHeaderCreatorBase *groupHeaderCreator() const;
+#ifndef QT_NO_ACCESSIBILITY
+ /**
+ * Uses \a parent to create an accessible object for \a parent. That accessible object will
+ * then be used as the accessible parent of the accessible object for this KItemListView.
+ * Make sure \a parent is the container which contains this specific KItemListView.
+ * This method must be called once before the accessible interface is queried for this class.
+ */
+ void setAccessibleParentsObject(KItemListContainer *accessibleParentsObject);
+ /** The parent of the QAccessibilityInterface of this class. */
+ KItemListContainerAccessible *accessibleParent();
+#endif
+
/**
* @return The basic size of all items. The size of an item may be larger than
* the basic size (see KItemListView::itemRect()).
QList<QByteArray> m_visibleRoles;
mutable KItemListWidgetCreatorBase *m_widgetCreator;
mutable KItemListGroupHeaderCreatorBase *m_groupHeaderCreator;
+#ifndef QT_NO_ACCESSIBILITY
+ /** The object that will be the parent of this classes QAccessibleInterface. */
+ KItemListContainerAccessible *m_accessibleParent = nullptr;
+#endif
KItemListStyleOption m_styleOption;
QHash<int, KItemListWidget *> m_visibleItems;
return qobject_cast<KItemListView *>(object());
}
-KItemListViewAccessible::KItemListViewAccessible(KItemListView *view_)
+KItemListViewAccessible::KItemListViewAccessible(KItemListView *view_, KItemListContainerAccessible *parent)
: QAccessibleObject(view_)
+ , m_parent(parent)
{
Q_ASSERT(view());
+ Q_CHECK_PTR(parent);
m_cells.resize(childCount());
}
QAccessibleInterface *KItemListViewAccessible::parent() const
{
- // FIXME: return KItemListContainerAccessible here
- return nullptr;
+ return m_parent;
}
int KItemListViewAccessible::childCount() const
class KItemListView;
class KItemListContainer;
+class KItemListContainerAccessible;
class DOLPHIN_EXPORT KItemListViewAccessible : public QAccessibleObject, public QAccessibleTableInterface
{
public:
- explicit KItemListViewAccessible(KItemListView *view);
+ explicit KItemListViewAccessible(KItemListView *view, KItemListContainerAccessible *parent);
~KItemListViewAccessible() override;
void *interface_cast(QAccessible::InterfaceType type) override;
QAccessible::Id id;
};
mutable QVector<AccessibleIdWrapper> m_cells;
+
+ KItemListContainerAccessible *m_parent;
};
class DOLPHIN_EXPORT KItemListAccessibleCell : public QAccessibleInterface, public QAccessibleTableCellInterface
m_view = new KFileItemListView();
m_controller = new KItemListController(m_model, m_view, this);
m_container = new KItemListContainer(m_controller);
+#ifndef QT_NO_ACCESSIBILITY
+ m_view->setAccessibleParentsObject(m_container);
+#endif
m_controller = m_container->controller();
m_controller->setSelectionBehavior(KItemListController::MultiSelection);
m_selectionManager = m_controller->selectionManager();
m_view = new KFileItemListView();
m_controller = new KItemListController(m_model, m_view, this);
m_container = new KItemListContainer(m_controller);
+#ifndef QT_NO_ACCESSIBILITY
+ m_view->setAccessibleParentsObject(m_container);
+#endif
m_controller = m_container->controller();
m_controller->setSelectionBehavior(KItemListController::MultiSelection);
m_selectionManager = m_controller->selectionManager();
m_container = new KItemListContainer(controller, this);
m_container->installEventFilter(this);
+#ifndef QT_NO_ACCESSIBILITY
+ m_view->setAccessibleParentsObject(m_container);
+#endif
setFocusProxy(m_container);
connect(m_container->horizontalScrollBar(), &QScrollBar::valueChanged, this, [=] {
hideToolTip();