fix: keep the DVD player whole
Removing gtk-layer-shell from the dependencies broke classroom-dvd on the first run, and deleting the dock's stylesheet took the DVD control bar's styling with it. Both go back: the template under a name that says what still uses it, and the dependency with a line in the package description explaining that it is there for the disc player and not for a dock. A probe overlay confirms gtk-layer-shell works under KWin, so the loading cover survives the move. The focus helper still speaks sway, which is written down rather than papered over. Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
co-authored by
Claude Opus 5
parent
682e3b0552
commit
d5cc6e463f
@@ -0,0 +1,104 @@
|
||||
/*
|
||||
* Ekklesia Classroom overlay stylesheet.
|
||||
*
|
||||
* This was the dock's stylesheet. The dock is gone — the Plasma panel
|
||||
* replaced it — but the DVD player still draws its loading cover and its
|
||||
* control bar as its own layer-shell surfaces, and they are still styled
|
||||
* from here. Rules that only the dock used are left in place rather than
|
||||
* pruned by eye, because the DVD session is working code and this
|
||||
* experiment does not gamble it for tidiness.
|
||||
*/
|
||||
window#classroom-dock,
|
||||
window#classroom-clock {
|
||||
background-color: transparent;
|
||||
background-image: none;
|
||||
border: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
/* Main floating dock */
|
||||
.dock {
|
||||
background-image: none;
|
||||
background-color: rgba(34, 38, 50, 0.62);
|
||||
|
||||
border: 1px solid rgba(255, 255, 255, 0.08);
|
||||
border-radius: @dock-radius@px;
|
||||
|
||||
padding: @dock-padding-v@px @dock-padding-h@px;
|
||||
|
||||
/* Important: no shadow here.
|
||||
GTK was clipping it against the rectangular window edge. */
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
button.dock-button {
|
||||
color: white;
|
||||
|
||||
background-image: none;
|
||||
background-color: rgba(255, 255, 255, 0.05);
|
||||
|
||||
border: none;
|
||||
border-radius: @button-radius@px;
|
||||
|
||||
padding: @button-padding@px;
|
||||
margin: 0;
|
||||
|
||||
min-width: @button-size@px;
|
||||
min-height: @button-size@px;
|
||||
|
||||
box-shadow: none;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
button.dock-button:hover {
|
||||
background-image: none;
|
||||
background-color: rgba(70, 75, 90, 0.85);
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
button.dock-button:active {
|
||||
background-image: none;
|
||||
background-color: rgba(85, 90, 108, 0.90);
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
button.dock-button:focus {
|
||||
background-image: none;
|
||||
background-color: rgba(255, 255, 255, 0.08);
|
||||
box-shadow: none;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
button.dock-button image {
|
||||
color: white;
|
||||
-gtk-icon-effect: none;
|
||||
}
|
||||
|
||||
/* Shown in place of the icon while an application is starting. */
|
||||
button.dock-button spinner {
|
||||
color: white;
|
||||
opacity: 1;
|
||||
|
||||
min-width: @button-spinner@px;
|
||||
min-height: @button-spinner@px;
|
||||
}
|
||||
|
||||
|
||||
/* Clock */
|
||||
|
||||
.clock {
|
||||
color: white;
|
||||
|
||||
background-image: none;
|
||||
background-color: rgba(34, 38, 50, 0.62);
|
||||
|
||||
border: 1px solid rgba(255, 255, 255, 0.08);
|
||||
border-radius: @clock-radius@px;
|
||||
|
||||
padding: @clock-padding-v@px @clock-padding-h@px;
|
||||
|
||||
font-size: @clock-font@px;
|
||||
font-weight: 600;
|
||||
|
||||
box-shadow: none;
|
||||
}
|
||||
@@ -322,6 +322,27 @@ back from four consecutive kills.
|
||||
|
||||
### DVD
|
||||
|
||||
**How much of the DVD player survives this change was measured, not
|
||||
assumed**, because the room's disc playback works and breaking it for
|
||||
tidiness would be a bad trade.
|
||||
|
||||
* Its loading cover and control bar are `gtk-layer-shell` surfaces. KWin
|
||||
implements `zwlr_layer_shell_v1` — the Plasma panel is one — and a probe
|
||||
overlay came up full-screen under it. So the DVD surfaces keep working
|
||||
and `python3-gi` and `gir1.2-gtklayershell-0.1` stay in the package.
|
||||
Removing them broke `classroom-dvd toggle` immediately, which is how this
|
||||
was found.
|
||||
* Its stylesheet was the dock's. The dock is gone; the template survives as
|
||||
`config/overlay/style.css.in`, renamed to say what still uses it.
|
||||
* `classroom-dvd` calls `classroom-window`, which speaks sway's IPC.
|
||||
Measured with no sway running: it exits 0 and does nothing, so it
|
||||
degrades rather than hanging — but the DVD player's focus handling is not
|
||||
yet ported, and that is the largest piece of work this change leaves.
|
||||
* One behavioural difference: under sway the loading cover hid the dock;
|
||||
under KWin the panel draws above it, so the bar stays visible while a
|
||||
disc spins up. Fullscreen VLC still covers everything, which is the state
|
||||
that matters.
|
||||
|
||||
`/usr/share/solid/actions/ekklesia-dvd.desktop` with an
|
||||
`X-KDE-Solid-Predicate` for a video DVD. Plasma's device notifier offers
|
||||
"Play the DVD" while a disc is in the drive and withdraws it when the disc
|
||||
@@ -443,11 +464,15 @@ running · `state-4-minimized` · `state-5-restored` · `v2-testpage` a
|
||||
maximised browser · `v2-secondary-window` a window a page opened, floating ·
|
||||
`v2-print-dialog` · `v2-notification-crop` · `v2-fullscreen` · `recover-panel`
|
||||
the bar rebuilt from nothing · `lock-desktop-rmb`, `lock-panel-rmb`,
|
||||
`lock-krunner` the lockdown.
|
||||
`lock-krunner` the lockdown · `v2-from-package` the desktop as installed
|
||||
from the `.deb` · `v2-layershell` a gtk-layer-shell overlay under KWin, which
|
||||
is what the DVD player's loading cover is made of.
|
||||
|
||||
## Not done, and honest about it
|
||||
|
||||
* **DVD end to end.** No drive in the lab.
|
||||
* **DVD end to end.** The overlay surfaces and disc detection were checked;
|
||||
playback was not, and the focus helper is not ported. See *the DVD
|
||||
player* above.
|
||||
* **Real audio hardware.** Policy tested as a function; no card to apply it to.
|
||||
* **Video decode and performance.** Software rendering only.
|
||||
* **SDDM.** Recommended over the current `bash_profile` `exec`, because when
|
||||
@@ -458,8 +483,68 @@ the bar rebuilt from nothing · `lock-desktop-rmb`, `lock-panel-rmb`,
|
||||
shape the package needs but is not the package.
|
||||
* **Parent Call and Live View.** Placed in the architecture, not built. Live
|
||||
View's pin is KWin's Keep Above, which is already a title-bar button.
|
||||
* **UI scale.** Plasma's own display scaling replaces `classroom-scale`; not
|
||||
exercised at 1.25 or 1.5.
|
||||
* **UI scale.** `classroom-scale` now asks `kscreen-doctor` instead of the
|
||||
compositor, and 1.25 was applied and read back correctly. The *look* of it
|
||||
could not be judged: a nested session shrinks its own canvas to the
|
||||
logical size instead of keeping the display's mode, so everything got
|
||||
smaller rather than larger. On a real output it does the opposite. Judge
|
||||
this one on hardware.
|
||||
* **Network states.** plasma-nm is in the bar and live — it correctly showed
|
||||
a problem state throughout, because Docker configures the container's
|
||||
interface before NetworkManager sees it and NM reports limited
|
||||
connectivity for it. Online, connecting and offline transitions need a
|
||||
machine whose network NetworkManager actually owns.
|
||||
|
||||
## Unresolved risks
|
||||
|
||||
In the order I would worry about them.
|
||||
|
||||
1. **The DVD player is half-ported.** Its surfaces and its disc detection
|
||||
work; its window focusing still speaks sway and silently does nothing.
|
||||
A room that uses DVDs should not take this build until that is finished
|
||||
and a real disc has been played.
|
||||
2. **SDDM is configured and untested.** It cannot be exercised in a
|
||||
container, and it is the thing that starts the session. If the config is
|
||||
wrong the room boots to nothing. This is the first thing to check on a
|
||||
VM or a bench machine, and it is why the checklist below starts there.
|
||||
3. **No real audio hardware has been through the policy.** The decision is
|
||||
well tested; applying it is not. A wrong `pactl set-card-profile` on
|
||||
real hardware is a silent room.
|
||||
4. **Plasma is a much larger surface than sway.** More code, more services,
|
||||
more that can regress in a Debian point release. The mitigations are
|
||||
that all of it is supervised, that Debian 13 is frozen apart from
|
||||
security updates, and that the OTA channel structure already lets a
|
||||
build be held back. But it is a real trade and it should be named.
|
||||
5. **Performance is unmeasured on classroom hardware.** Everything here ran
|
||||
on llvmpipe, which says nothing useful about an old office machine with
|
||||
Intel graphics. Plasma with compositing is heavier than sway.
|
||||
6. **Chrome remains a third-party repository.** Unchanged from today, but
|
||||
still the one part of the stack Debian does not update.
|
||||
7. **The wallpaper is a stand-in.** The real illustration has not been seen
|
||||
against this palette.
|
||||
|
||||
## Would I trust it on a classroom computer, unattended, for a Sunday?
|
||||
|
||||
**For a room that does not use DVDs: yes, after the checks below.** The
|
||||
reasoning is not that Plasma is nicer. It is that the four failures the
|
||||
church actually reported are all failures of code we wrote, three of them
|
||||
are gone because the code is gone, and the fourth — the panel disappearing
|
||||
— went from *reproducible on the third crash* to *survived eight kills* and
|
||||
is now a supervised system service rather than a process started by a
|
||||
compositor and forgotten.
|
||||
|
||||
**For a room that uses DVDs: not yet.** Finish the focus port and play a
|
||||
real disc first.
|
||||
|
||||
Before any room:
|
||||
|
||||
1. Boot a bench machine from the package and confirm SDDM autologins, and
|
||||
that killing the session brings it back rather than a shell.
|
||||
2. Put a television on HDMI, switch it on after the computer, and confirm
|
||||
sound arrives without touching anything, with the browser already open.
|
||||
3. Print to Elmer.
|
||||
4. Play a DVD, if that room uses them.
|
||||
5. Leave it running from Friday to Sunday.
|
||||
|
||||
## Alternate operating systems
|
||||
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 251 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 252 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 38 KiB |
@@ -8,7 +8,7 @@ from pathlib import Path
|
||||
|
||||
from classroom_config import scaled
|
||||
|
||||
TEMPLATE = Path("/etc/ekklesia-classroom/dock/style.css.in")
|
||||
TEMPLATE = Path("/etc/ekklesia-classroom/overlay/style.css.in")
|
||||
|
||||
# Every measurement in the template, at UI_SCALE=1.0.
|
||||
MEASUREMENTS = {
|
||||
|
||||
@@ -4,7 +4,7 @@ Section: misc
|
||||
Priority: optional
|
||||
Architecture: amd64
|
||||
Maintainer: Ekklesia
|
||||
Depends: plasma-desktop, plasma-workspace, kwin-wayland, plasma-nm, plasma-pa, sddm, dbus-user-session, xwayland, fonts-dejavu, fonts-noto, network-manager, pipewire, pipewire-audio, wireplumber, pulseaudio-utils, cups, cups-client, cups-filters, foomatic-db-compressed-ppds, libnotify-bin, curl, gnupg, ca-certificates, python3-paho-mqtt
|
||||
Depends: plasma-desktop, plasma-workspace, kwin-wayland, plasma-nm, plasma-pa, sddm, dbus-user-session, xwayland, fonts-dejavu, fonts-noto, network-manager, pipewire, pipewire-audio, wireplumber, pulseaudio-utils, cups, cups-client, cups-filters, foomatic-db-compressed-ppds, python3-gi, python3-gi-cairo, gir1.2-gtk-3.0, gir1.2-gtklayershell-0.1, libnotify-bin, curl, gnupg, ca-certificates, python3-paho-mqtt
|
||||
Recommends: vlc
|
||||
Conflicts: plasma-welcome, plasma-discover, kdeconnect, kup-backup
|
||||
Description: Ekklesia managed classroom environment
|
||||
@@ -14,6 +14,10 @@ Description: Ekklesia managed classroom environment
|
||||
left here is the church's own subject matter — Wonder Ink, the browser,
|
||||
the DVD player, the printer, the audio policy and the updater.
|
||||
.
|
||||
python3-gi and gtk-layer-shell are still here because the DVD player
|
||||
draws its own loading cover and control bar as layer-shell surfaces.
|
||||
They are no longer here for a dock.
|
||||
.
|
||||
The Conflicts line is deliberate. A welcome tour, a software centre and
|
||||
a phone pairing daemon are all things plasma-desktop recommends and a
|
||||
room a teacher walks into should not have.
|
||||
|
||||
@@ -331,6 +331,10 @@ install -Dm644 \
|
||||
"$ROOT/config/icons/dvd.svg" \
|
||||
"$STAGE/etc/ekklesia-classroom/icons/dvd.svg"
|
||||
|
||||
install -Dm644 \
|
||||
"$ROOT/config/overlay/style.css.in" \
|
||||
"$STAGE/etc/ekklesia-classroom/overlay/style.css.in"
|
||||
|
||||
# DVD mode control bar.
|
||||
for icon in media-play media-pause chapter-prev chapter-next \
|
||||
disc-menu eject close; do
|
||||
|
||||
Reference in New Issue
Block a user