diff options
author | Wladimir J. van der Laan <laanwj@gmail.com> | 2014-04-27 18:20:29 +0200 |
---|---|---|
committer | Wladimir J. van der Laan <laanwj@gmail.com> | 2014-04-27 18:22:12 +0200 |
commit | c63b2e25a59c602de182a376313ad5d3d62d5045 (patch) | |
tree | 19c498bb55616947efa4207d8099bcc80250d5b7 /src/qt/bitcoin.cpp | |
parent | 7cbe636a2371256582a8b9d5c5367d4c4ab3d49b (diff) | |
parent | d282c1fb64ae570caab951247e6ead4b9059043d (diff) | |
download | bitcoin-c63b2e25a59c602de182a376313ad5d3d62d5045.tar.xz |
Merge pull request #4043
d282c1f [Qt] catch Windows shutdown events while client is running (Philip Kaufmann)
Diffstat (limited to 'src/qt/bitcoin.cpp')
-rw-r--r-- | src/qt/bitcoin.cpp | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/qt/bitcoin.cpp b/src/qt/bitcoin.cpp index 696e65ec19..c05692efa3 100644 --- a/src/qt/bitcoin.cpp +++ b/src/qt/bitcoin.cpp @@ -15,6 +15,7 @@ #include "optionsmodel.h" #include "splashscreen.h" #include "utilitydialog.h" +#include "winshutdownmonitor.h" #ifdef ENABLE_WALLET #include "paymentserver.h" #include "walletmodel.h" @@ -189,6 +190,9 @@ public: /// Get process return value int getReturnValue() { return returnValue; } + /// Get window identifier of QMainWindow (BitcoinGUI) + WId getMainWinId() const; + public slots: void initializeResult(int retval); void shutdownResult(int retval); @@ -444,6 +448,14 @@ void BitcoinApplication::handleRunawayException(const QString &message) ::exit(1); } +WId BitcoinApplication::getMainWinId() const +{ + if (!window) + return 0; + + return window->winId(); +} + #ifndef BITCOIN_QT_TEST int main(int argc, char *argv[]) { @@ -558,10 +570,15 @@ int main(int argc, char *argv[]) /// 9. Main GUI initialization // Install global event filter that makes sure that long tooltips can be word-wrapped app.installEventFilter(new GUIUtil::ToolTipToRichTextFilter(TOOLTIP_WRAP_THRESHOLD, &app)); - // Install qDebug() message handler to route to debug.log #if QT_VERSION < 0x050000 + // Install qDebug() message handler to route to debug.log qInstallMsgHandler(DebugMessageHandler); #else +#if defined(Q_OS_WIN) + // Install global event filter for processing Windows session related Windows messages (WM_QUERYENDSESSION and WM_ENDSESSION) + qApp->installNativeEventFilter(new WinShutdownMonitor()); +#endif + // Install qDebug() message handler to route to debug.log qInstallMessageHandler(DebugMessageHandler); #endif // Load GUI settings from QSettings @@ -577,6 +594,9 @@ int main(int argc, char *argv[]) { app.createWindow(isaTestNet); app.requestInitialize(); +#if defined(Q_OS_WIN) && QT_VERSION >= 0x050000 + WinShutdownMonitor::registerShutdownBlockReason(QObject::tr("Bitcoin Core did't yet exit safely..."), (HWND)app.getMainWinId()); +#endif app.exec(); app.requestShutdown(); app.exec(); |