Commit 184bfeba authored by Thomas Hartmann's avatar Thomas Hartmann
Browse files

QmlDesigner: Always warn asynchronously in exceptions



Exceptions are likely to be triggered from QML code.
Calling QMessageBox::warning() results in a call to exec() and
exec() returns back into the Qt event loop.

This is dangerous, because QML might have scheduled a deleteLater
which is then executed by exec(). This can crash the application, because
the object is supposed to be "deleted later" and not directly
as a side effect of the signal that was emmited by QML.

Task-number: QTCREATORBUG-11946

Change-Id: Icb884847633bd421d3dc7bc034d598ef84d39429
Reviewed-by: default avatarMarco Bubke <marco.bubke@digia.com>
parent 59b60317
......@@ -39,6 +39,13 @@
#include <QCoreApplication>
#include <QMessageBox>
static void showAsyncWarning(const QString &title, const QString &desciption)
{
QMessageBox *messageBox = new QMessageBox(QMessageBox::Warning, title, desciption, QMessageBox::Ok, Core::ICore::dialogParent());
messageBox->setAttribute(Qt::WA_DeleteOnClose);
messageBox->setModal(true);
messageBox->show();
}
/*!
\defgroup CoreExceptions
......@@ -156,7 +163,7 @@ QString Exception::description() const
void Exception::showException(const QString &title) const
{
QString t = title.isEmpty() ? QCoreApplication::translate("QmlDesigner", "Error") : title;
QMessageBox::warning(Core::ICore::dialogParent(), t, description());
showAsyncWarning(t, description());
}
/*!
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment