Implement idle inhibition so watching videos or giving presentations
doesn't trigger screen blanking or swayidle. Three automatic sources
plus a manual Emacs toggle:
- zwp-idle-inhibit-v1 Wayland protocol via Smithay delegation, with
visibility check (only surfaces with a primary scanout output inhibit) - org.freedesktop.ScreenSaver D-Bus interface for Firefox/Chrome, with
cookie tracking and automatic cleanup on client disconnect - Fullscreen heuristic: any fullscreen output layout entry inhibits idle
Manual inhibition from Emacs via ewm-set-idle-inhibited (Rust defun),
ewm-idle-inhibit command, and ewm-idle-inhibit-mode global minor mode.
Both idle systems are suppressed: ext-idle-notify-v1 (swayidle) via
set_is_inhibited(), and native idle timer (monitor blanking) via
cancel/restart. On idle timer fire, refresh inhibition state first to
catch stale D-Bus inhibits that arrived without input/render activity.