diff --git a/src/kitemviews/kitemlistviewaccessible.h b/src/kitemviews/kitemlistviewaccessible.h --- a/src/kitemviews/kitemlistviewaccessible.h +++ b/src/kitemviews/kitemlistviewaccessible.h @@ -86,7 +86,13 @@ inline QAccessibleInterface* cell(int index) const; private: - mutable QVector m_cells; + class AccessibleIdWrapper { + public: + AccessibleIdWrapper(); + bool isValid; + QAccessible::Id id; + }; + mutable QVector m_cells; }; class DOLPHIN_EXPORT KItemListAccessibleCell: public QAccessibleInterface, public QAccessibleTableCellInterface diff --git a/src/kitemviews/kitemlistviewaccessible.cpp b/src/kitemviews/kitemlistviewaccessible.cpp --- a/src/kitemviews/kitemlistviewaccessible.cpp +++ b/src/kitemviews/kitemlistviewaccessible.cpp @@ -44,10 +44,9 @@ KItemListViewAccessible::~KItemListViewAccessible() { - foreach (QAccessibleInterface* child, m_cells) { - if (child) { - QAccessible::Id childId = QAccessible::uniqueId(child); - QAccessible::deleteAccessibleInterface(childId); + foreach (AccessibleIdWrapper idWrapper, m_cells) { + if (idWrapper.isValid) { + QAccessible::deleteAccessibleInterface(idWrapper.id); } } } @@ -75,13 +74,13 @@ } Q_ASSERT(index < m_cells.size()); - QAccessibleInterface* child = m_cells.at(index); - if (!child) { - child = new KItemListAccessibleCell(view(), index); - m_cells.insert(index, child); - QAccessible::registerAccessibleInterface(child); + AccessibleIdWrapper idWrapper = m_cells.at(index); + if (!idWrapper.isValid) { + idWrapper.id = QAccessible::registerAccessibleInterface(new KItemListAccessibleCell(view(), index)); + idWrapper.isValid = true; + m_cells.insert(index, idWrapper); } - return child; + return QAccessible::accessibleInterface(idWrapper.id); } QAccessibleInterface* KItemListViewAccessible::cellAt(int row, int column) const @@ -266,6 +265,12 @@ return nullptr; } +KItemListViewAccessible::AccessibleIdWrapper::AccessibleIdWrapper() : + isValid(false), + id(0) +{ +} + // Table Cell KItemListAccessibleCell::KItemListAccessibleCell(KItemListView* view, int index) :