Qt: Throttle fatal error dialogs

This commit is contained in:
Vicki Pfau 2025-04-13 17:58:01 -07:00
parent c3f3d00f14
commit d79579d1ca
3 changed files with 8 additions and 1 deletions

View File

@ -61,6 +61,7 @@ Misc:
- Qt: Support building against Qt 6 - Qt: Support building against Qt 6
- Qt: Add shortcuts to increment fast forward speed (mgba.io/i/2903) - Qt: Add shortcuts to increment fast forward speed (mgba.io/i/2903)
- Qt: Enable ROM preloading by default - Qt: Enable ROM preloading by default
- Qt: Throttle fatal error dialogs
- Res: Port hq2x and OmniScale shaders from SameBoy - Res: Port hq2x and OmniScale shaders from SameBoy
- Res: Port NSO-gba-colors shader (closes mgba.io/i/2834) - Res: Port NSO-gba-colors shader (closes mgba.io/i/2834)
- Res: Update gba-colors shader (closes mgba.io/i/2976) - Res: Update gba-colors shader (closes mgba.io/i/2976)

View File

@ -205,7 +205,8 @@ CoreController::CoreController(mCore* core, QObject* parent)
} }
message = QString::vasprintf(format, args); message = QString::vasprintf(format, args);
QMetaObject::invokeMethod(controller, "logPosted", Q_ARG(int, level), Q_ARG(int, category), Q_ARG(const QString&, message)); 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)); QMetaObject::invokeMethod(controller, "crashed", Q_ARG(const QString&, message));
} }
}; };
@ -500,6 +501,7 @@ void CoreController::stop() {
} }
void CoreController::reset() { void CoreController::reset() {
m_crashSeen = false;
mCoreThreadReset(&m_threadContext); mCoreThreadReset(&m_threadContext);
} }
@ -651,6 +653,7 @@ void CoreController::loadState(int slot) {
m_stateSlot = slot; m_stateSlot = slot;
m_backupSaveState.clear(); m_backupSaveState.clear();
} }
m_crashSeen = false;
mCoreThreadClearCrashed(&m_threadContext); mCoreThreadClearCrashed(&m_threadContext);
mCoreThreadRunFunction(&m_threadContext, [](mCoreThread* context) { mCoreThreadRunFunction(&m_threadContext, [](mCoreThread* context) {
CoreController* controller = static_cast<CoreController*>(context->userData); CoreController* controller = static_cast<CoreController*>(context->userData);
@ -671,6 +674,7 @@ void CoreController::loadState(const QString& path, int flags) {
if (flags != -1) { if (flags != -1) {
m_loadStateFlags = flags; m_loadStateFlags = flags;
} }
m_crashSeen = false;
mCoreThreadClearCrashed(&m_threadContext); mCoreThreadClearCrashed(&m_threadContext);
mCoreThreadRunFunction(&m_threadContext, [](mCoreThread* context) { mCoreThreadRunFunction(&m_threadContext, [](mCoreThread* context) {
CoreController* controller = static_cast<CoreController*>(context->userData); CoreController* controller = static_cast<CoreController*>(context->userData);
@ -700,6 +704,7 @@ void CoreController::loadState(QIODevice* iodev, int flags) {
if (flags != -1) { if (flags != -1) {
m_loadStateFlags = flags; m_loadStateFlags = flags;
} }
m_crashSeen = false;
mCoreThreadClearCrashed(&m_threadContext); mCoreThreadClearCrashed(&m_threadContext);
mCoreThreadRunFunction(&m_threadContext, [](mCoreThread* context) { mCoreThreadRunFunction(&m_threadContext, [](mCoreThread* context) {
CoreController* controller = static_cast<CoreController*>(context->userData); CoreController* controller = static_cast<CoreController*>(context->userData);

View File

@ -257,6 +257,7 @@ private:
struct CoreLogger : public mLogger { struct CoreLogger : public mLogger {
CoreController* self; CoreController* self;
} m_logger{}; } m_logger{};
bool m_crashSeen = false;
QString m_path; QString m_path;
QString m_baseDirectory; QString m_baseDirectory;