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)

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