#include "headers.h"
#include "init.h"
+#include "util.h"
#include <QApplication>
#include <QMessageBox>
int ThreadSafeMessageBox(const std::string& message, const std::string& caption, int style, wxWindow* parent, int x, int y)
{
+ bool modal = style & wxMODAL;
+
+ if (modal)
+ while (!guiref)
+ Sleep(1000);
+
// Message from network thread
if(guiref)
{
QMetaObject::invokeMethod(guiref, "error", Qt::QueuedConnection,
Q_ARG(QString, QString::fromStdString(caption)),
- Q_ARG(QString, QString::fromStdString(message)));
+ Q_ARG(QString, QString::fromStdString(message)),
+ Q_ARG(bool, modal));
}
else
{
}
}
+void QueueShutdown()
+{
+ QMetaObject::invokeMethod(QCoreApplication::instance(), "quit", Qt::QueuedConnection);
+}
+
/*
Translate string to current locale using Qt.
*/
return QCoreApplication::translate("bitcoin-core", psz).toStdString();
}
+/* Handle runaway exceptions. Shows a message box with the problem and quits the program.
+ */
+static void handleRunawayException(std::exception *e)
+{
+ PrintExceptionContinue(e, "Runaway exception");
+ QMessageBox::critical(0, "Runaway exception", BitcoinGUI::tr("A fatal error occured. Bitcoin can no longer continue safely and will quit.") + QString("\n\n") + QString::fromStdString(strMiscWarning));
+ exit(1);
+}
+
int main(int argc, char *argv[])
{
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
app.exec();
+ window.hide();
guiref = 0;
}
+ // Shutdown the core and it's threads, but don't exit Bitcoin-Qt here
Shutdown(NULL);
}
else
return 1;
}
} catch (std::exception& e) {
- PrintException(&e, "Runaway exception");
+ handleRunawayException(&e);
} catch (...) {
- PrintException(NULL, "Runaway exception");
+ handleRunawayException(NULL);
}
return 0;
}