Fixes bitcoin#26490 by preventing notifications

MacOS 13 sends a window focus change notification after the main
window has been destroyed but before the QTApplication has been
destroyed. This results in the menu bar receiving a notification
despite it no longer existing. The solution is to pass the main
window as context when subscribing to the notifications. Qt
automatically unsubscribes to notifications if the sender OR
context is destroyed.

Github-Pull: bitcoin-core/gui#680
Rebased-From: 8a5014cd8a
This commit is contained in:
John Moffett 2022-11-15 10:41:03 -05:00 committed by Hennadii Stepanov
parent 3e0cf5e82b
commit e54a4deff8
No known key found for this signature in database
GPG key ID: 410108112E7EA81F

View file

@ -476,7 +476,7 @@ void BitcoinGUI::createMenuBar()
connect(minimize_action, &QAction::triggered, [] {
QApplication::activeWindow()->showMinimized();
});
connect(qApp, &QApplication::focusWindowChanged, [minimize_action] (QWindow* window) {
connect(qApp, &QApplication::focusWindowChanged, this, [minimize_action] (QWindow* window) {
minimize_action->setEnabled(window != nullptr && (window->flags() & Qt::Dialog) != Qt::Dialog && window->windowState() != Qt::WindowMinimized);
});
@ -491,7 +491,7 @@ void BitcoinGUI::createMenuBar()
}
});
connect(qApp, &QApplication::focusWindowChanged, [zoom_action] (QWindow* window) {
connect(qApp, &QApplication::focusWindowChanged, this, [zoom_action] (QWindow* window) {
zoom_action->setEnabled(window != nullptr);
});
#endif