The coordinator already existed on the control computer and its contract is frozen, so this is the classroom half of a contract that was read from its README and source rather than guessed: four fields out, the status topic subscribed before anything is published, and every word the teacher reads taken from the coordinator's own message field. It is a separate process, not a Plasma applet. A broker library, a network timeout and a text entry have no business inside the only way a teacher has of getting anywhere; if this dies the bar is untouched. The panel mark is Breeze's call-outgoing. The old one was a bell, sitting two inches from Plasma's notification bell in the same bar and meaning something entirely different. Two things it will not do: claim a call was displayed, and let a teacher type the room. The machine already knows which room it is. Sixty tests cover the contract without a broker. The live path was proven against the real coordinator running in the lab, on a loopback broker, with ProPresenter mocked and the church's networks rejected from inside the container first. Co-Authored-By: Claude Opus 5 <[email protected]>
51 lines
1.8 KiB
Plaintext
51 lines
1.8 KiB
Plaintext
# Window rules.
|
|
#
|
|
# There are two: one about video, one about the Parent Call card.
|
|
#
|
|
# Everything else the classroom used to arrange by hand is ordinary window
|
|
# manager behaviour and needs no rule: a dialog stays in front of the window
|
|
# that opened it, a window a page opens floats over the browser instead of
|
|
# resizing it, and a print dialog is the window in front.
|
|
#
|
|
# There is deliberately no rule that maximises the browser. A rule can only
|
|
# match a window class, and Chrome gives its main window and every window a
|
|
# page opens the same one — matching on it maximised the lesson's popup to
|
|
# the whole display, which is the behaviour this architecture exists to
|
|
# stop. Chrome can tell them apart, so `--start-maximized` in the launcher
|
|
# does it: the first window fills the screen, later ones keep the size the
|
|
# page asked for. Arranging that from outside the browser is what the old
|
|
# 314-line window arbiter was doing.
|
|
|
|
[General]
|
|
count=2
|
|
rules=classroom-video,classroom-parent-call
|
|
|
|
[classroom-video]
|
|
Description=Video is an appliance screen, not a window
|
|
# VLC reports its class as "Vlc", and KWin's matching is case sensitive —
|
|
# measured on a running session, where a lower-case substring rule matched
|
|
# nothing at all and said so nowhere.
|
|
wmclass=(?i)vlc
|
|
wmclassmatch=3
|
|
wmclasscomplete=false
|
|
noborder=true
|
|
noborderrule=2
|
|
|
|
[classroom-parent-call]
|
|
Description=Parent Call is a quick action, not a window
|
|
wmclass=classroom-parent-call
|
|
wmclassmatch=1
|
|
wmclasscomplete=false
|
|
# It is not an application, so it does not belong in the row of them. The
|
|
# button that opened it is already in the bar.
|
|
skiptaskbar=true
|
|
skiptaskbarrule=2
|
|
skipswitcher=true
|
|
skipswitcherrule=2
|
|
skippager=true
|
|
skippagerrule=2
|
|
# In front of the lesson a teacher was reading when they pressed the
|
|
# button, rather than behind it.
|
|
above=true
|
|
aboverule=2
|