34void kis_assert_common(
const char *assertion,
const char *file,
int line,
bool abort,
bool isIgnorable)
36 QString shortMessage =
37 QString(
"%4ASSERT (krita): \"%1\" in file %2, line %3")
41 .arg(isIgnorable ?
"SAFE " :
"");
45 "Krita has encountered an internal error:\n\n"
47 "Please report a bug to developers!\n\n"
48 "Press Ignore to try to continue.\n"
49 "Press Abort to see developers information (all unsaved data will be lost)")
54 bool disableAssertMsg =
55 QProcessEnvironment::systemEnvironment().value(
"KRITA_NO_ASSERT_MSG",
"0").toInt();
59 if (!QCoreApplication::instance() || QThread::currentThread() != QCoreApplication::instance()->thread()) {
60 disableAssertMsg =
true;
63 bool shouldIgnoreAsserts =
false;
64 bool forceCrashOnSafeAsserts =
false;
66#ifdef HIDE_SAFE_ASSERTS
67 shouldIgnoreAsserts |= HIDE_SAFE_ASSERTS;
70#ifdef CRASH_ON_SAFE_ASSERTS
71 forceCrashOnSafeAsserts |= CRASH_ON_SAFE_ASSERTS;
74 disableAssertMsg |= shouldIgnoreAsserts || forceCrashOnSafeAsserts;
76 QMessageBox::StandardButton
button =
77 isIgnorable && !forceCrashOnSafeAsserts ?
78 QMessageBox::Ignore : QMessageBox::Abort;
80 if (!disableAssertMsg) {
82 QMessageBox::critical(qApp->activeWindow(), i18nc(
"@title:window",
"Krita: Internal Error"),
84 QMessageBox::Ignore | QMessageBox::Abort,
88 if (
button == QMessageBox::Abort || abort) {
89 qFatal(
"%s", shortMessage.toLatin1().data());
90 }
else if (isIgnorable) {
93 qWarning(
"%s", shortMessage.toLatin1().data());