diff --git a/CHANGES b/CHANGES index 8861f8a2d..a8c0ca04b 100644 --- a/CHANGES +++ b/CHANGES @@ -61,6 +61,7 @@ Misc: - Qt: Support building against Qt 6 - Qt: Add shortcuts to increment fast forward speed (mgba.io/i/2903) - Qt: Enable ROM preloading by default + - Qt: Throttle fatal error dialogs - Res: Port hq2x and OmniScale shaders from SameBoy - Res: Port NSO-gba-colors shader (closes mgba.io/i/2834) - Res: Update gba-colors shader (closes mgba.io/i/2976) diff --git a/src/platform/qt/CoreController.cpp b/src/platform/qt/CoreController.cpp index 7cd6c58d5..55e743be1 100644 --- a/src/platform/qt/CoreController.cpp +++ b/src/platform/qt/CoreController.cpp @@ -205,7 +205,8 @@ CoreController::CoreController(mCore* core, QObject* parent) } message = QString::vasprintf(format, args); QMetaObject::invokeMethod(controller, "logPosted", Q_ARG(int, level), Q_ARG(int, category), Q_ARG(const QString&, message)); - if (level == mLOG_FATAL) { + if (level == mLOG_FATAL && !controller->m_crashSeen) { + controller->m_crashSeen = true; QMetaObject::invokeMethod(controller, "crashed", Q_ARG(const QString&, message)); } }; @@ -500,6 +501,7 @@ void CoreController::stop() { } void CoreController::reset() { + m_crashSeen = false; mCoreThreadReset(&m_threadContext); } @@ -651,6 +653,7 @@ void CoreController::loadState(int slot) { m_stateSlot = slot; m_backupSaveState.clear(); } + m_crashSeen = false; mCoreThreadClearCrashed(&m_threadContext); mCoreThreadRunFunction(&m_threadContext, [](mCoreThread* context) { CoreController* controller = static_cast(context->userData); @@ -671,6 +674,7 @@ void CoreController::loadState(const QString& path, int flags) { if (flags != -1) { m_loadStateFlags = flags; } + m_crashSeen = false; mCoreThreadClearCrashed(&m_threadContext); mCoreThreadRunFunction(&m_threadContext, [](mCoreThread* context) { CoreController* controller = static_cast(context->userData); @@ -700,6 +704,7 @@ void CoreController::loadState(QIODevice* iodev, int flags) { if (flags != -1) { m_loadStateFlags = flags; } + m_crashSeen = false; mCoreThreadClearCrashed(&m_threadContext); mCoreThreadRunFunction(&m_threadContext, [](mCoreThread* context) { CoreController* controller = static_cast(context->userData); diff --git a/src/platform/qt/CoreController.h b/src/platform/qt/CoreController.h index a6b6a03ca..5e0245e16 100644 --- a/src/platform/qt/CoreController.h +++ b/src/platform/qt/CoreController.h @@ -257,6 +257,7 @@ private: struct CoreLogger : public mLogger { CoreController* self; } m_logger{}; + bool m_crashSeen = false; QString m_path; QString m_baseDirectory;