summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/platformsupport/linuxaccessibility/atspiadaptor.cpp8
-rw-r--r--src/plugins/accessible/widgets/itemviews.cpp7
-rw-r--r--src/plugins/accessible/widgets/itemviews.h1
-rw-r--r--src/widgets/accessible/qaccessiblewidget.cpp9
-rw-r--r--src/widgets/accessible/qaccessiblewidget_p.h1
-rw-r--r--src/widgets/kernel/qwidget.h2
6 files changed, 25 insertions, 3 deletions
diff --git a/src/platformsupport/linuxaccessibility/atspiadaptor.cpp b/src/platformsupport/linuxaccessibility/atspiadaptor.cpp
index 001976e9fe..050cb6a0bc 100644
--- a/src/platformsupport/linuxaccessibility/atspiadaptor.cpp
+++ b/src/platformsupport/linuxaccessibility/atspiadaptor.cpp
@@ -809,9 +809,13 @@ void AtSpiAdaptor::windowActivated(QObject* window, bool active)
return;
QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(window);
- Q_ASSERT(iface && iface->isValid());
+ Q_ASSERT(iface);
+ Q_ASSERT(!active || iface->isValid());
- QString windowTitle = iface->text(QAccessible::Name);
+ QString windowTitle;
+ // in dtor it may be invalid
+ if (iface->isValid())
+ windowTitle = iface->text(QAccessible::Name);
delete iface;
QDBusVariant data;
diff --git a/src/plugins/accessible/widgets/itemviews.cpp b/src/plugins/accessible/widgets/itemviews.cpp
index cb34116f32..822d9d8c77 100644
--- a/src/plugins/accessible/widgets/itemviews.cpp
+++ b/src/plugins/accessible/widgets/itemviews.cpp
@@ -47,7 +47,7 @@
#include <qtreeview.h>
#include <private/qtreewidget_p.h>
#include <QtGui/private/qaccessible2_p.h>
-#include <QDebug>
+#include <QtWidgets/private/qwidget_p.h>
#ifndef QT_NO_ACCESSIBILITY
@@ -136,6 +136,11 @@ QAccessibleTable::QAccessibleTable(QWidget *w)
}
}
+bool QAccessibleTable::isValid() const
+{
+ return (view() && !qobject_cast<QWidget*>(view())->d_func()->data.in_destructor);
+}
+
QAccessibleTable::~QAccessibleTable()
{
}
diff --git a/src/plugins/accessible/widgets/itemviews.h b/src/plugins/accessible/widgets/itemviews.h
index bba698bda2..af885fe6c1 100644
--- a/src/plugins/accessible/widgets/itemviews.h
+++ b/src/plugins/accessible/widgets/itemviews.h
@@ -63,6 +63,7 @@ class QAccessibleTable :public QAccessibleTableInterface, public QAccessibleObje
{
public:
explicit QAccessibleTable(QWidget *w);
+ bool isValid() const;
virtual ~QAccessibleTable();
diff --git a/src/widgets/accessible/qaccessiblewidget.cpp b/src/widgets/accessible/qaccessiblewidget.cpp
index 2b8e1a7036..dcbf276356 100644
--- a/src/widgets/accessible/qaccessiblewidget.cpp
+++ b/src/widgets/accessible/qaccessiblewidget.cpp
@@ -55,6 +55,7 @@
#include <QRubberBand>
#include <QFocusFrame>
#include <QMenu>
+#include <QtWidgets/private/qwidget_p.h>
QT_BEGIN_NAMESPACE
@@ -152,6 +153,7 @@ QString Q_WIDGETS_EXPORT qt_accHotKey(const QString &text)
return QString();
}
+// ### inherit QAccessibleObjectPrivate
class QAccessibleWidgetPrivate
{
public:
@@ -202,6 +204,13 @@ QAccessibleWidget::QAccessibleWidget(QWidget *w, QAccessible::Role role, const Q
d->name = name;
}
+bool QAccessibleWidget::isValid() const
+{
+ if (!object() || static_cast<QWidget *>(object())->d_func()->data.in_destructor)
+ return false;
+ return QAccessibleObject::isValid();
+}
+
/*! \reimp */
QWindow *QAccessibleWidget::window() const
{
diff --git a/src/widgets/accessible/qaccessiblewidget_p.h b/src/widgets/accessible/qaccessiblewidget_p.h
index 803dc71409..cb1ce37734 100644
--- a/src/widgets/accessible/qaccessiblewidget_p.h
+++ b/src/widgets/accessible/qaccessiblewidget_p.h
@@ -56,6 +56,7 @@ class Q_WIDGETS_EXPORT QAccessibleWidget : public QAccessibleObject, public QAcc
{
public:
explicit QAccessibleWidget(QWidget *o, QAccessible::Role r = QAccessible::Client, const QString& name = QString());
+ bool isValid() const;
QWindow *window() const;
int childCount() const;
diff --git a/src/widgets/kernel/qwidget.h b/src/widgets/kernel/qwidget.h
index 5c844d1566..f90f2ee5f5 100644
--- a/src/widgets/kernel/qwidget.h
+++ b/src/widgets/kernel/qwidget.h
@@ -704,6 +704,8 @@ private:
friend class QStyleSheetStyle;
friend struct QWidgetExceptionCleaner;
friend class QWidgetWindow;
+ friend class QAccessibleWidget;
+ friend class QAccessibleTable;
#ifndef QT_NO_GESTURES
friend class QGestureManager;
friend class QWinNativePanGestureRecognizer;