diff options
author | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2020-04-27 18:04:24 +0200 |
---|---|---|
committer | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2020-04-28 17:20:52 +0200 |
commit | 22d708697f62d2fbd69b57fd8bc3423af76d27ca (patch) | |
tree | 1da38a62142821d1499938b34d8416efdeb4e7ca /src/quick/items/qquickaccessibleattached.cpp | |
parent | 1dcd4ff086f55392f7d194e2e4a9e4cff599d0f6 (diff) |
Gracefully handle Accessible attached property on non-items
Attaching to e.g. a ApplicationWindow will result in corrupting the
window's private data and subsequent crashes.
Fixes: QTBUG-83738
Change-Id: Ia708edf29a0356a858ac27ff70125fc38932ba78
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/quick/items/qquickaccessibleattached.cpp')
-rw-r--r-- | src/quick/items/qquickaccessibleattached.cpp | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/quick/items/qquickaccessibleattached.cpp b/src/quick/items/qquickaccessibleattached.cpp index ae23c4c07e..67d17c98e5 100644 --- a/src/quick/items/qquickaccessibleattached.cpp +++ b/src/quick/items/qquickaccessibleattached.cpp @@ -41,6 +41,8 @@ #if QT_CONFIG(accessibility) +#include <QtQml/qqmlinfo.h> + #include "private/qquickitem_p.h" QT_BEGIN_NAMESPACE @@ -335,14 +337,15 @@ QQuickAccessibleAttached::QQuickAccessibleAttached(QObject *parent) : QObject(parent), m_role(QAccessible::NoRole) { Q_ASSERT(parent); - QQuickItem *item = qobject_cast<QQuickItem*>(parent); - if (!item) + if (!item()) { + qmlWarning(parent) << "Accessible must be attached to an Item"; return; + } // Enable accessibility for items with accessible content. This also // enables accessibility for the ancestors of souch items. - item->d_func()->setAccessible(); - QAccessibleEvent ev(item, QAccessible::ObjectCreated); + item()->d_func()->setAccessible(); + QAccessibleEvent ev(item(), QAccessible::ObjectCreated); QAccessible::updateAccessibility(&ev); if (!parent->property("value").isNull()) { @@ -433,12 +436,12 @@ QQuickAccessibleAttached *QQuickAccessibleAttached::qmlAttachedProperties(QObjec bool QQuickAccessibleAttached::ignored() const { - return !item()->d_func()->isAccessible; + return item() ? !item()->d_func()->isAccessible : false; } void QQuickAccessibleAttached::setIgnored(bool ignored) { - if (this->ignored() != ignored) { + if (this->ignored() != ignored && item()) { item()->d_func()->isAccessible = !ignored; emit ignoredChanged(); } |