// Copyright (c) 2014-2021 The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #ifndef BITCOIN_QT_WINSHUTDOWNMONITOR_H #define BITCOIN_QT_WINSHUTDOWNMONITOR_H #ifdef WIN32 #include #include #include #include #include class WinShutdownMonitor : public QAbstractNativeEventFilter { public: WinShutdownMonitor(std::function shutdown_fn) : m_shutdown_fn{std::move(shutdown_fn)} {} /** Implements QAbstractNativeEventFilter interface for processing Windows messages */ #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) bool nativeEventFilter(const QByteArray &eventType, void *pMessage, qintptr *pnResult) override; #else bool nativeEventFilter(const QByteArray &eventType, void *pMessage, long *pnResult) override; #endif /** Register the reason for blocking shutdown on Windows to allow clean client exit */ static void registerShutdownBlockReason(const QString& strReason, const HWND& mainWinId); private: std::function m_shutdown_fn; }; #endif #endif // BITCOIN_QT_WINSHUTDOWNMONITOR_H