winshutdownmonitor.h raw

   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
  34