winshutdownmonitor.h
1 // Copyright (c) 2014-present The Bitcoin Core developers 2 // Distributed under the MIT software license, see the accompanying 3 // file COPYING or http://www.opensource.org/licenses/mit-license.php. 4 5 #ifndef BITCOIN_QT_WINSHUTDOWNMONITOR_H 6 #define BITCOIN_QT_WINSHUTDOWNMONITOR_H 7 8 #ifdef WIN32 9 #include <QByteArray> 10 #include <QString> 11 #include <functional> 12 13 #include <windows.h> 14 15 #include <QAbstractNativeEventFilter> 16 17 class WinShutdownMonitor : public QAbstractNativeEventFilter 18 { 19 public: 20 WinShutdownMonitor(std::function<void()> shutdown_fn) : m_shutdown_fn{std::move(shutdown_fn)} {} 21 22 /** Implements QAbstractNativeEventFilter interface for processing Windows messages */ 23 bool nativeEventFilter(const QByteArray &eventType, void *pMessage, qintptr *pnResult) override; 24 25 /** Register the reason for blocking shutdown on Windows to allow clean client exit */ 26 static void registerShutdownBlockReason(const QString& strReason, const HWND& mainWinId); 27 28 private: 29 std::function<void()> m_shutdown_fn; 30 }; 31 #endif 32 33 #endif // BITCOIN_QT_WINSHUTDOWNMONITOR_H