mirror of
https://github.com/storytold/gridcraft.git
synced 2026-11-01 14:46:51 -06:00
The theme watcher (DesktopTheme) reads the desktop's light/dark choice from the XDG Desktop Portal over a blocking D-Bus call with no timeout. zbus waits forever by default, so a portal that accepts the call and never answers stalled the watcher's thread on its first read, and "Use system setting" stopped following the desktop for the rest of the session, even after the portal recovered. The session connection is now built with a 2 s method timeout (REPLY, shorter than the 4 s POLL). A timed-out call returns InputOutput, which read() already handles by dropping the connection, so the next poll asks again on a fresh one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0115HyvML9WnuFRdmtMcLP5t