diff options
Diffstat (limited to 'src/qt')
| -rw-r--r-- | src/qt/bitcoin.cpp | 20 | ||||
| -rw-r--r-- | src/qt/bitcoingui.cpp | 7 | ||||
| -rw-r--r-- | src/qt/bitcoingui.h | 3 | ||||
| -rw-r--r-- | src/qt/optionsmodel.cpp | 5 |
4 files changed, 24 insertions, 11 deletions
diff --git a/src/qt/bitcoin.cpp b/src/qt/bitcoin.cpp index 2c47f30e9..f079f3b0e 100644 --- a/src/qt/bitcoin.cpp +++ b/src/qt/bitcoin.cpp @@ -11,6 +11,7 @@ #include "guiutil.h" #include "guiconstants.h" #include "init.h" +#include "util.h" #include "ui_interface.h" #include "paymentserver.h" @@ -87,11 +88,6 @@ static void InitMessage(const std::string &message) printf("init message: %s\n", message.c_str()); } -static void QueueShutdown() -{ - QMetaObject::invokeMethod(qApp, "quit", Qt::QueuedConnection); -} - /* Translate string to current locale using Qt. */ @@ -185,7 +181,6 @@ int main(int argc, char *argv[]) uiInterface.ThreadSafeMessageBox.connect(ThreadSafeMessageBox); uiInterface.ThreadSafeAskFee.connect(ThreadSafeAskFee); uiInterface.InitMessage.connect(InitMessage); - uiInterface.QueueShutdown.connect(QueueShutdown); uiInterface.Translate.connect(Translate); // Show help message immediately after parsing command-line options (for "-lang") and setting locale, @@ -215,9 +210,16 @@ int main(int argc, char *argv[]) if (GUIUtil::GetStartOnSystemStartup()) GUIUtil::SetStartOnSystemStartup(true); + boost::thread_group threadGroup; + BitcoinGUI window; guiref = &window; - if(AppInit2()) + + QTimer* pollShutdownTimer = new QTimer(guiref); + QObject::connect(pollShutdownTimer, SIGNAL(timeout()), guiref, SLOT(detectShutdown())); + pollShutdownTimer->start(200); + + if(AppInit2(threadGroup)) { { // Put this in a block, so that the Model objects are cleaned up before @@ -258,7 +260,9 @@ int main(int argc, char *argv[]) guiref = 0; } // Shutdown the core and its threads, but don't exit Bitcoin-Qt here - Shutdown(NULL); + threadGroup.interrupt_all(); + threadGroup.join_all(); + Shutdown(); } else { diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index adc6cd474..9da5b8500 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -24,6 +24,7 @@ #include "rpcconsole.h" #include "ui_interface.h" #include "wallet.h" +#include "init.h" #ifdef Q_OS_MAC #include "macdockiconhandler.h" @@ -839,3 +840,9 @@ void BitcoinGUI::toggleHidden() { showNormalIfMinimized(true); } + +void BitcoinGUI::detectShutdown() +{ + if (ShutdownRequested()) + QMetaObject::invokeMethod(QCoreApplication::instance(), "quit", Qt::QueuedConnection); +} diff --git a/src/qt/bitcoingui.h b/src/qt/bitcoingui.h index 8f44389fd..aba81cb3b 100644 --- a/src/qt/bitcoingui.h +++ b/src/qt/bitcoingui.h @@ -199,6 +199,9 @@ private slots: void showNormalIfMinimized(bool fToggleHidden = false); /** Simply calls showNormalIfMinimized(true) for use in SLOT() macro */ void toggleHidden(); + + /** called by a timer to check if fRequestShutdown has been set **/ + void detectShutdown(); }; #endif // BITCOINGUI_H diff --git a/src/qt/optionsmodel.cpp b/src/qt/optionsmodel.cpp index cd3170a30..6b1b4e3d8 100644 --- a/src/qt/optionsmodel.cpp +++ b/src/qt/optionsmodel.cpp @@ -219,9 +219,8 @@ bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, in settings.setValue("fMinimizeToTray", fMinimizeToTray); break; case MapPortUPnP: - fUseUPnP = value.toBool(); - settings.setValue("fUseUPnP", fUseUPnP); - MapPort(); + settings.setValue("fUseUPnP", value.toBool()); + MapPort(value.toBool()); break; case MinimizeOnClose: fMinimizeOnClose = value.toBool(); |