Merge PR #8 fixes 1 and 2 into experimental

From 0x1f6's robustness PR: survive a malformed control datagram (adapted
to wrap experimental's textfield command too) and plan a layout when the
rows setting exceeds what the screens fill. The PR's third commit, the
volume-key swap rollback, is left out: rolling back a partial remap leaves
every real volume key exposed to gamescope instead of some, and on restore
it turns already-restored keys back into stand-ins.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
DeeJanuzandClaude Opus 5.5 committed 2026-10-01 09:34:31 -06:00
commit 46e5c59cc0
2 files changed
+10

No files matched your search

+6
View File
@@ -910,6 +910,10 @@ def main():
return
words = data.decode(errors="replace").split()
cmd = words[0] if words else ""
# One malformed datagram must not end the relay: it would drop every grab,
# including the volume keys that keep gamescope from aborting. The control
# socket is an abstract socket, so any local process can send to it.
try:
if cmd == "keyboard":
# From ft-screens (unbound, no reply): where typing goes, repeated every second.
desktop = len(words) > 1 and words[1] == "desktop"
@@ -952,6 +956,8 @@ def main():
reply(addr, {"t": "vrcapture", "seconds": seconds})
else:
reply(addr, {"t": "error", "error": f"unknown command {cmd!r}"})
except Exception as e:
log(f"bad control datagram {data!r}: {e!r}")
def broadcast(node, etype, code, value, now):
if not watchers or not node.candidate:
+4
View File
@@ -318,6 +318,10 @@ def plan(layout, count, panel_size=None):
p = layout["preset"]
rows = max(1, min(int(p.get("rows", 1)), count))
cols = math.ceil(count / rows)
# A row setting above what the screens fill leaves empty grid rows (4 screens,
# 3 rows -> cols 2 -> a third row with nothing in it), and max() over an empty
# row crashes plan(). Trim rows to what the screens actually fill.
rows = max(1, math.ceil(count / cols))
d = max(0.3, float(p.get("distance", 2.0)))
gap = max(0.0, float(p.get("gap", 0.05)))
height = float(p.get("height", 0.0))