Merge bitcoin-core/gui#547: Override BitcoinApplication::event() to handle QEvent::Quit

e7fc50681e99e3c726db2bc4d3d425ed8a0fc6b3 qt: Override BitcoinApplication::event() to handle QEvent::Quit (Hennadii Stepanov)

Pull request description:

  bitcoin-core/gui#336 introduced a regression when termination requests from a platform are not handled properly.

  This PR fixes this regression. On macOS shutdown after clicking "Quit" in Dock icon menu, and during logout works again.

  Fixes bitcoin-core/gui#545.

ACKs for top commit:
  RandyMcMillan:
    tACK e7fc50681e99e3c726db2bc4d3d425ed8a0fc6b3
  Sjors:
    tACK e7fc50681e99e3c726db2bc4d3d425ed8a0fc6b3 (rebased on master) indeed fixes the crash described in #545
  promag:
    Tested ACK e7fc50681e99e3c726db2bc4d3d425ed8a0fc6b3 on macOS 10.15 with Qt 5.15.2.

Tree-SHA512: 236a483dc0828f22999469e133b8ac9f0b6267ec2a27004c3ebaa967689ddb972ea1fa90c1dd41f3bff3d17bf571a707babcef53bd79fd711fda98cfbf120131
This commit is contained in:
Hennadii Stepanov 2022-02-22 10:29:24 +02:00 committed by pasta
parent b9b854663a
commit 9e168bc20a
No known key found for this signature in database
GPG Key ID: 52527BEDABE87984
2 changed files with 13 additions and 0 deletions

View File

@ -425,6 +425,16 @@ WId BitcoinApplication::getMainWinId() const
return window->winId(); return window->winId();
} }
bool BitcoinApplication::event(QEvent* e)
{
if (e->type() == QEvent::Quit) {
requestShutdown();
return true;
}
return QApplication::event(e);
}
static void SetupUIArgs(ArgsManager& argsman) static void SetupUIArgs(ArgsManager& argsman)
{ {
argsman.AddArg("-choosedatadir", strprintf(QObject::tr("Choose data directory on startup (default: %u)").toStdString(), DEFAULT_CHOOSE_DATADIR), ArgsManager::ALLOW_ANY, OptionsCategory::GUI); argsman.AddArg("-choosedatadir", strprintf(QObject::tr("Choose data directory on startup (default: %u)").toStdString(), DEFAULT_CHOOSE_DATADIR), ArgsManager::ALLOW_ANY, OptionsCategory::GUI);

View File

@ -98,6 +98,9 @@ Q_SIGNALS:
void splashFinished(); void splashFinished();
void windowShown(BitcoinGUI* window); void windowShown(BitcoinGUI* window);
protected:
bool event(QEvent* e) override;
private: private:
QThread *coreThread; QThread *coreThread;
interfaces::Node& m_node; interfaces::Node& m_node;