aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items/qquickaccessibleattached.cpp
diff options
context:
space:
mode:
authorTor Arne Vestbø <tor.arne.vestbo@qt.io>2020-04-27 18:04:24 +0200
committerTor Arne Vestbø <tor.arne.vestbo@qt.io>2020-04-28 17:20:52 +0200
commit22d708697f62d2fbd69b57fd8bc3423af76d27ca (patch)
tree1da38a62142821d1499938b34d8416efdeb4e7ca /src/quick/items/qquickaccessibleattached.cpp
parent1dcd4ff086f55392f7d194e2e4a9e4cff599d0f6 (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.cpp15
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();
}