summaryrefslogtreecommitdiffstats
path: root/src/widgets
diff options
context:
space:
mode:
authorSergio Martins <sergio.martins@kdab.com>2024-04-04 17:43:59 +0100
committerSergio Martins <sergio.martins@kdab.com>2024-04-11 03:35:10 +0100
commit97d227acc74c6034615dc05d9d94ee5cad7c5f50 (patch)
tree82a867ef01b34f271c94b55dfe72d18d2d2c5f99 /src/widgets
parentd4f2a5aa401c14dd8dc122bbf25fce9cd7f41cba (diff)
QToolButton: Don't crash if deleted while in event handler
If QToolButton::mouseReleaseEvent triggers its deletion then it will crash when dereferencing its d pointer. qabstractbutton.cpp already uses QPointer guards in many places but qtoolbutton.cpp was missing this one. While deleteLater() is still our recommendation, we shouldn't crash. It's not always obvious what led to the button's destruction, as the chain of indirections can be long. Change-Id: I4a33447fa4e90953370277eb57a161398ded9a9c Pick-to: 6.7 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
Diffstat (limited to 'src/widgets')
-rw-r--r--src/widgets/widgets/qtoolbutton.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/widgets/widgets/qtoolbutton.cpp b/src/widgets/widgets/qtoolbutton.cpp
index f3e3c8261e..e0775afd26 100644
--- a/src/widgets/widgets/qtoolbutton.cpp
+++ b/src/widgets/widgets/qtoolbutton.cpp
@@ -584,8 +584,10 @@ void QToolButton::mousePressEvent(QMouseEvent *e)
void QToolButton::mouseReleaseEvent(QMouseEvent *e)
{
Q_D(QToolButton);
+ QPointer<QAbstractButton> guard(this);
QAbstractButton::mouseReleaseEvent(e);
- d->buttonPressed = QToolButtonPrivate::NoButtonPressed;
+ if (guard)
+ d->buttonPressed = QToolButtonPrivate::NoButtonPressed;
}
/*!