Page MenuHomePhabricator

qt: make synchronous dialogs behave nice during shutdown
ClosedPublic

Authored by PiRK on Jun 2 2025, 14:16.

Details

Reviewers
Fabien
Group Reviewers
Restricted Project
Commits
rABCc201752cf28b: qt: make synchronous dialogs behave nice during shutdown
Summary

qt, refactor: Replace BitcoinGUI::macosDockIconActivated with a lambda

https://github.com/bitcoin-core/gui/pull/509/commits/c3ca8364b2a8de8c73ecc0c7eed9608bd30e7e02

qt, refactor: Replace BitcoinGUI::trayIconActivated with a lambda

https://github.com/bitcoin-core/gui/pull/509/commits/66afa286e519deda2fcfd580f190b7af13407e72

qt, refactor: Fill up trayIconMenu before connections

This change is required for the following commits.

https://github.com/bitcoin-core/gui/pull/509/commits/78189daac8d13870ab6ed8421b9ed067cf7ebac5

qt: Drop BitcoinGUI::toggleHideAction member

Also dropped useless tooltip.

https://github.com/bitcoin-core/gui/pull/509/commits/ee151d032789fa03daa44ab44dd0fd70e51b145c

qt: Make show_hide_action dependent on the main window actual state

https://github.com/bitcoin-core/gui/pull/509/commits/fd667e73cd109bbfc14011f8c2c08556648b4c50

qt, refactor: Drop BitcoinGUI::{send,receive}CoinsMenuAction members

https://github.com/bitcoin-core/gui/pull/509/commits/58e16035c1fc513fce0b09e02c7d863c63ec990d

qt, refactor: Use local QAction instances for the tray icon menu

This change is required for the following commit.

https://github.com/bitcoin-core/gui/pull/509/commits/92427354dd5f80cb5c042e7afbcd386968161be4

qt: Disable tray icon menu when a modal dialog is active

https://github.com/bitcoin-core/gui/pull/509/commits/8c0eb80f41bca7b08c94de0f08692fac23e3e9f0

qt: Delay shutdown while a modal dialog is active

https://github.com/bitcoin-core/gui/pull/509/commits/5d7666b15164a16aaf3af49af8f73ff4bd392f6a

The two missing commits were included in D18149, as they are a bugfix for this backport

This concludes backport of core-gui#509

Depends on D18184

Test Plan

run bitcoin-qt. With no wallet loaded, check that "Send", "receive"... buttons are disabled. When loading a wallet, they are enabled.
Check that when pressing Ctrl + C in the terminal the software is not shut down before all modal dialogs are closed (use the coin selection dialog for instance)

Diff Detail

Repository
rABC Bitcoin ABC
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

PiRK requested review of this revision.Jun 2 2025, 14:16

not really related to Qt6, but we already backported 2 commits as a bugfix so better to finish the backport to avoid future confusion

Tail of the build log:

[529/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/platformstyle.cpp.o
[530/581] Linking CXX executable src/bench/bitcoin-bench
[531/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/qvalidatedlineedit.cpp.o
[532/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/intro.cpp.o
[533/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/bitcoingui.cpp.o
FAILED: src/qt/CMakeFiles/bitcoin-qt-base.dir/bitcoingui.cpp.o 
/usr/bin/cmake -E __run_co_compile --launcher=/usr/bin/ccache --tidy="/usr/bin/clang-tidy-16;-warnings-as-errors=*;--extra-arg-before=--driver-mode=g++" --source=/work/src/qt/bitcoingui.cpp -- /usr/bin/clang++ -DBOOST_ALL_NO_LIB -DBOOST_NO_CXX98_FUNCTION_BASE -DBUILD_BITCOIN_INTERNAL -DENABLE_AVX2 -DENABLE_SHANI -DENABLE_SSE41 -DHAVE_BUILD_INFO -DHAVE_CONFIG_H -DHAVE_CONSENSUS_LIB -DHAVE_DECL_EVP_MD_CTX_NEW=1 -DLEVELDB_ATOMIC_PRESENT -DLEVELDB_PLATFORM_POSIX -DOS_LINUX -DQT_CORE_LIB -DQT_DBUS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DUSE_PROTOBUF_MESSAGE_BYTESIZELONG -I/work/abc-ci-builds/build-clang-tidy/src/qt/bitcoin-qt-base_autogen/include -I/work/src/. -I/work/abc-ci-builds/build-clang-tidy/src -I/work/src/univalue/include -I/work/abc-ci-builds/build-clang-tidy/src/crypto/.. -I/work/src/secp256k1/include -I/work/src/leveldb/include -I/work/abc-ci-builds/build-clang-tidy/src/qt -isystem /usr/include/jemalloc -isystem /usr/include/miniupnpc -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtWidgets -isystem /usr/include/x86_64-linux-gnu/qt5/QtGui -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -isystem /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -isystem /usr/include/x86_64-linux-gnu/qt5/QtNetwork -isystem /usr/include/x86_64-linux-gnu/qt5/QtDBus -g -O2 -fPIC -fvisibility=hidden -fstack-protector-all -Wstack-protector -fcf-protection=full -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -Wall -Wextra -Wformat -Wgnu -Wvla -Wcast-align -Wunused-parameter -Wmissing-braces -Wthread-safety -Wrange-loop-analysis -Wredundant-decls -Wunreachable-code-loop-increment -Wsign-compare -Wconditional-uninitialized -Wdocumentation -Wformat-security -Wredundant-move -Woverloaded-virtual -Wshadow -Wshadow-field -Wno-unused-parameter -Wno-implicit-fallthrough -Wno-psabi -fPIC -std=gnu++17 -MD -MT src/qt/CMakeFiles/bitcoin-qt-base.dir/bitcoingui.cpp.o -MF src/qt/CMakeFiles/bitcoin-qt-base.dir/bitcoingui.cpp.o.d -o src/qt/CMakeFiles/bitcoin-qt-base.dir/bitcoingui.cpp.o -c /work/src/qt/bitcoingui.cpp
/work/src/qt/bitcoingui.cpp:913:34: error: statement should be inside braces [readability-braces-around-statements,-warnings-as-errors]
            if (show_hide_action)
                                 ^
                                  {
2799 warnings generated.
Suppressed 2798 warnings (2798 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
1 warning treated as error
[534/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/qvaluecombobox.cpp.o
[535/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/qrc_bitcoin.cpp.o
[536/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/peertablemodel.cpp.o
[537/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/optionsmodel.cpp.o
[538/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/optionsdialog.cpp.o
[539/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/trafficgraphwidget.cpp.o
[540/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/bitcoin-qt-base_autogen/mocs_compilation.cpp.o
[541/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/addressbookpage.cpp.o
[542/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/utilitydialog.cpp.o
[543/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/coincontroltreewidget.cpp.o
[544/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/splashscreen.cpp.o
[545/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/qrc_bitcoin_locale.cpp.o
[546/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/createwalletdialog.cpp.o
[547/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/clientmodel.cpp.o
[548/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/askpassphrasedialog.cpp.o
[549/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/guiutil.cpp.o
[550/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/editaddressdialog.cpp.o
[551/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/qrimagewidget.cpp.o
[552/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/openuridialog.cpp.o
[553/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/addresstablemodel.cpp.o
[554/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/overviewpage.cpp.o
[555/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/bitcoin.cpp.o
[556/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/coincontroldialog.cpp.o
[557/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/receiverequestdialog.cpp.o
[558/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/transactiondescdialog.cpp.o
[559/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/sendcoinsentry.cpp.o
[560/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/transactionrecord.cpp.o
[561/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/transactionfilterproxy.cpp.o
[562/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/paymentserver.cpp.o
[563/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/transactiondesc.cpp.o
[564/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/transactionview.cpp.o
[565/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/recentrequeststablemodel.cpp.o
[566/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/signverifymessagedialog.cpp.o
[567/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/walletmodeltransaction.cpp.o
[568/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/sendcoinsdialog.cpp.o
[569/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/paymentrequestplus.cpp.o
[570/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/walletview.cpp.o
[571/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/rpcconsole.cpp.o
[572/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/walletcontroller.cpp.o
[573/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/transactiontablemodel.cpp.o
[574/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/walletframe.cpp.o
[575/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/receivecoinsdialog.cpp.o
[576/581] Building CXX object src/qt/CMakeFiles/bitcoin-qt-base.dir/walletmodel.cpp.o
ninja: build stopped: cannot make progress due to previous errors.
Build build-clang-tidy failed with exit code 1
Fabien requested changes to this revision.Jun 2 2025, 15:36
Fabien added a subscriber: Fabien.

Clang-tidy is failing

This revision now requires changes to proceed.Jun 2 2025, 15:36

fix clang-tidy (missing braces)

This revision is now accepted and ready to land.Jun 3 2025, 08:11