diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoaaccessibility.mm | 1 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm | 4 | ||||
-rw-r--r-- | src/widgets/itemviews/qtreeview.cpp | 10 |
3 files changed, 14 insertions, 1 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoaaccessibility.mm b/src/plugins/platforms/cocoa/qcocoaaccessibility.mm index 69ec52afe7..c5e40a4087 100644 --- a/src/plugins/platforms/cocoa/qcocoaaccessibility.mm +++ b/src/plugins/platforms/cocoa/qcocoaaccessibility.mm @@ -136,6 +136,7 @@ static void populateRoleMap() roleMap[QAccessible::Note] = NSAccessibilityGroupRole; roleMap[QAccessible::ComplementaryContent] = NSAccessibilityGroupRole; roleMap[QAccessible::Graphic] = NSAccessibilityImageRole; + roleMap[QAccessible::Tree] = NSAccessibilityOutlineRole; } /* diff --git a/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm b/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm index d63c0401fd..27fd32f91f 100644 --- a/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm +++ b/src/plugins/platforms/cocoa/qcocoaaccessibilityelement.mm @@ -292,7 +292,9 @@ static void convertLineOffset(QAccessibleTextInterface *text, int *line, int *of QAccessibleTableInterface *table = iface->tableInterface(); Q_ASSERT(table); QAccessibleInterface *cell = table->cellAt(m_rowIndex, m_columnIndex); - Q_ASSERT(cell && cell->isValid()); + if (!cell) + return nullptr; + Q_ASSERT(cell->isValid()); iface = cell; // no longer a placeholder diff --git a/src/widgets/itemviews/qtreeview.cpp b/src/widgets/itemviews/qtreeview.cpp index 2280cdaa2e..d4c5d837a8 100644 --- a/src/widgets/itemviews/qtreeview.cpp +++ b/src/widgets/itemviews/qtreeview.cpp @@ -3325,6 +3325,16 @@ void QTreeViewPrivate::layout(int i, bool recursiveExpanding, bool afterIsUninit return; } + // QAccessibleTree's rowCount implementation uses viewItems.size(), so + // we need to invalidate any cached accessibility data structures if + // that value changes during the run of this function. + const auto resetModelIfNeeded = qScopeGuard([oldViewItemsSize = viewItems.size(), this, q]{ + if (oldViewItemsSize != viewItems.size() && QAccessible::isActive()) { + QAccessibleTableModelChangeEvent event(q, QAccessibleTableModelChangeEvent::ModelReset); + QAccessible::updateAccessibility(&event); + } + }); + int count = 0; if (model->hasChildren(parent)) { if (model->canFetchMore(parent)) { |