Window hide/show loop (~60 Hz) when "Minimize to the tray" is enabled but no system tray exists (GNOME Wayland), breaks alt-tab session-wide #960

issue Giszmo opened this issue on August 23, 2026
  1. Giszmo commented at 11:52 AM on August 23, 2026: none

    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/bitcoin#788 (2012, xmonad window flicker — same symptom family, ancient, closed)
    • bitcoin/bitcoin#3789 (2014, -min + no tray → orphaned window; the "hide" half without the loop)
    • bitcoin-core/gui#903 / #904 / #914 (2025, Qt6-native-Wayland flicker via bringToFront() — different mechanism; this box runs Qt5/XWayland)
    • bitcoin-core/gui#405 (window disappears on Cinnamon)
    • bitcoin-core/gui#748/#749 (-min vs. wallet loading dialog)
  2. hebasto commented at 12:21 PM on August 23, 2026: member

    Environment

    * Bitcoin Core v29.0 (official binaries, `/home/leo/bitcoin/bitcoin-29.0/bin/bitcoin-qt -min -chain=main`)

    Is the issue reproducible when running the latest release v31.1?

  3. Giszmo commented at 2:14 PM on August 23, 2026: none

    Is the issue reproducible when running the latest release v31.1?

    The code looks like it should produce the same loop. I had no plans to upgrade to the latest core version and have worked around the issue myself. If anybody wants to try to reproduce this:

    1. Install GNOME with tray extension
    2. Set Bitcoin Core to "start minimized", "minimize into the tray" and "start on boot"
    3. Stop Bitcoin Core
    4. Disable the tray extension
    5. Restart your machine

    Edit: I'm mainly reporting this because it caused weird behavior on my system for days before I took the time to investigate, which also wasn't very straight forward.


github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin-core/gui. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2026-08-29 16:20 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me