bitcoin-qt v29.0, started with -min and with "Minimize to the tray instead of the taskbar" enabled, on a desktop with no system tray (stock GNOME 48, Wayland, no AppIndicator extension), enters a loop where its window is destroyed and re-created continuously at about 60Hz window-created events.
Environment
- Bitcoin Core v29.0 (official binaries,
/home/leo/bitcoin/bitcoin-29.0/bin/bitcoin-qt -min -chain=main)
- Debian 13 (trixie), GNOME Shell 48 on Wayland; bitcoin-qt runs via XWayland
- No system tray: stock GNOME, no AppIndicator/StatusNotifier extension installed
Symptoms
- A generic (icon-less) entry flickers in the alt-tab switcher / dock.
- Every re-map re-enters the window as "most recent" in the alt-tab order and can steal focus at the moment of switching: alt-tab and overview clicks fail ~30% of the time for every application on the desktop, not just bitcoin-qt.
- gnome-shell burns CPU constantly from the restacking (42% of one core sustained; 4+ days of CPU time accumulated over 9 days of uptime).
- The user-visible damage started after updating to Debian Trixie (GNOME 43 to 48 probably marked the AppIndicator extension incompatible and switch it off) which removed the tray. It persisted for days; no crash-looping process exists, so
ps looks clean. Only shell-level instrumentation identified the culprit.
Diagnosis
GNOME Shell hook:
global.display.connect('window-created', (d, w) =>
log('FLICK pid=' + w.get_pid() + ' class=' + w.get_wm_class() + ' title=' + w.get_title()));
Output (repeating ~60x/second):
Aug 21 19:49:45 debian gnome-shell[3296]: FLICK pid=3475 class=Bitcoin-Qt title=Bitcoin Core type=0
pid 3475 = the bitcoin-qt process above.
In v29 src/qt/bitcoingui.cpp, BitcoinGUI::changeEvent() hides the window on minimize whenever getMinimizeToTray() is set. The option is honored even when QSystemTrayIcon::isSystemTrayAvailable() is false (that check only guards tray-icon creation). With no tray to land in, the hide/re-show cycle repeats indefinitely on this setup.
Workaround
Disable minimize to tray in the config file. In the options window it's grayed out.
Suggested fix direction
Gate the minimize-to-tray hide path on QSystemTrayIcon::isSystemTrayAvailable() (as PR bitcoin/bitcoin#691 once did for the -min startup phase), or force-disable the option at runtime when no tray exists.
Prior reports checked (none match)
bitcoin-qt v29.0, started with
-minand with "Minimize to the tray instead of the taskbar" enabled, on a desktop with no system tray (stock GNOME 48, Wayland, no AppIndicator extension), enters a loop where its window is destroyed and re-created continuously at about 60Hz window-created events.Environment
/home/leo/bitcoin/bitcoin-29.0/bin/bitcoin-qt -min -chain=main)Symptoms
pslooks clean. Only shell-level instrumentation identified the culprit.Diagnosis
GNOME Shell hook:
Output (repeating ~60x/second):
pid 3475 = the bitcoin-qt process above.
In v29
src/qt/bitcoingui.cpp,BitcoinGUI::changeEvent()hides the window on minimize whenevergetMinimizeToTray()is set. The option is honored even whenQSystemTrayIcon::isSystemTrayAvailable()is false (that check only guards tray-icon creation). With no tray to land in, the hide/re-show cycle repeats indefinitely on this setup.Workaround
Disable minimize to tray in the config file. In the options window it's grayed out.
Suggested fix direction
Gate the minimize-to-tray hide path on
QSystemTrayIcon::isSystemTrayAvailable()(as PR bitcoin/bitcoin#691 once did for the-minstartup phase), or force-disable the option at runtime when no tray exists.Prior reports checked (none match)
-min+ no tray → orphaned window; the "hide" half without the loop)bringToFront()— different mechanism; this box runs Qt5/XWayland)-mindoes not minimize wallet loading dialog #748/make '-min' minimize wallet loading dialog #749 (-minvs. wallet loading dialog)