From 5147b1d4108e36f79aaf4aca539d5cf11726995e Mon Sep 17 00:00:00 2001 From: Frederik Gladhorn Date: Mon, 18 Mar 2013 15:59:17 +0100 Subject: Accessibility: Fix crash when updating in dtor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This happens for example when running several tests. Widgets in destructor should be treated as invalid since their window pointer and other properties are no longer valid. When deleting a window containing only a table view there would be a table model reset update comming from the window being destroyed. Change-Id: Ia387c814333ce373fe132b189fc180787e36cdd5 Reviewed-by: Jan Arve Sæther --- src/widgets/accessible/qaccessiblewidget.cpp | 9 +++++++++ src/widgets/accessible/qaccessiblewidget_p.h | 1 + 2 files changed, 10 insertions(+) (limited to 'src/widgets/accessible') 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 #include #include +#include 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(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; -- cgit v1.2.3