diff --git a/config/icons/ekklesia-parent-call.svg b/config/icons/ekklesia-parent-call.svg new file mode 100644 index 0000000..5c476e6 --- /dev/null +++ b/config/icons/ekklesia-parent-call.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + diff --git a/config/icons/ekklesia-wonderink.svg b/config/icons/ekklesia-wonderink.svg index eef7aa1..27b5e40 100644 --- a/config/icons/ekklesia-wonderink.svg +++ b/config/icons/ekklesia-wonderink.svg @@ -1,13 +1,19 @@ - + + diff --git a/config/plasma/applications/ekklesia-parent-call.desktop b/config/plasma/applications/ekklesia-parent-call.desktop index ded3305..fe5ff12 100644 --- a/config/plasma/applications/ekklesia-parent-call.desktop +++ b/config/plasma/applications/ekklesia-parent-call.desktop @@ -2,16 +2,15 @@ Type=Application Name=Parent Call Comment=Ask the sanctuary to call a child's parent to this room -# Breeze's own, and deliberately not a bell. -# -# The previous mark was a bell, which sat two inches from Plasma's -# notification bell in the same bar and meant something entirely -# different. A handset with an outgoing arrow cannot be mistaken for an -# alert: it reads as placing a call, and the arrow says the call leaves -# this room. No stock Breeze icon combines a person with a call, so the -# unambiguous half was chosen over the half that could be read as user -# settings — which is what two grey people on a panel look like. -Icon=call-outgoing +# Drawn for this, in Breeze's language, because Breeze has no icon that +# means "fetch this child's grown-up". Two marks were tried and rejected +# on a real panel first: a bell, which sat inches from Plasma's own +# notification bell in the same bar, and a handset with an outgoing +# arrow, which read as a telephone feature. This one is an adult, a +# child, and one small speech bubble. It uses Breeze's ColorScheme-Text +# class, so it recolours with the session and needs no second file for +# the light theme. +Icon=ekklesia-parent-call Exec=/usr/local/bin/classroom-parent-call Terminal=false Categories=Utility; diff --git a/config/plasma/lookandfeel/contents/layouts/org.kde.plasma.desktop-layout.js b/config/plasma/lookandfeel/contents/layouts/org.kde.plasma.desktop-layout.js index 83f3f5c..4bb96d6 100644 --- a/config/plasma/lookandfeel/contents/layouts/org.kde.plasma.desktop-layout.js +++ b/config/plasma/lookandfeel/contents/layouts/org.kde.plasma.desktop-layout.js @@ -41,29 +41,29 @@ panel.opacity = "adaptive"; // LEFT — auxiliary. Parent Call is not one of the room's applications and // is deliberately not in the row with them. -// A task manager holding one launcher, not the Icon widget. +// Quick Launch: a launcher, and only a launcher. // -// The Icon widget copies the desktop entry into the user's home and uses -// the copy, so a classroom that had already run would keep the old icon -// and the old command for ever — an update could never change either. -// Measured: it kept showing a bell out of a package that no longer -// contains one. Quick Launch would also do, but Debian does not ship it. +// Two other widgets were tried on a real panel. The Icon widget copies +// the desktop entry into the user's home and uses the copy, so an update +// could never change the icon or the command — it kept showing a bell out +// of a package that no longer contained one. A task manager reads +// /usr/share/applications live, which fixes that, but a task manager also +// shows every running window, so the auxiliary corner filled up with the +// lesson's tasks. // -// This applet reads /usr/share/applications live, which is what an OTA -// update writes to, and it costs nothing extra: the classroom already -// runs one for the applications. -var parentCall = panel.addWidget("org.kde.plasma.icontasks"); +// Quick Launch reads the entry live and shows nothing but the button. +var parentCall = panel.addWidget("org.kde.plasma.quicklaunch"); parentCall.currentConfigGroup = ["General"]; -parentCall.writeConfig("launchers", "applications:ekklesia-parent-call.desktop"); -parentCall.writeConfig("groupingStrategy", 0); -parentCall.writeConfig("showOnlyCurrentDesktop", false); -parentCall.writeConfig("showOnlyCurrentActivity", false); -parentCall.writeConfig("showOnlyCurrentScreen", false); -parentCall.writeConfig("minimizeActiveTaskOnClick", false); -parentCall.writeConfig("fill", false); -parentCall.writeConfig("maxStripes", 1); -parentCall.writeConfig("wheelEnabled", false); -parentCall.writeConfig("showToolTips", true); +// A file URL, not applications:. Quick Launch resolves the entry itself +// and does not copy it, so the path is a live reference to what the +// package installs. +parentCall.writeConfig( + "launcherUrls", + "file:///usr/share/applications/ekklesia-parent-call.desktop" +); +parentCall.writeConfig("showLauncherNames", false); +parentCall.writeConfig("enablePopup", false); +parentCall.writeConfig("maxSectionCount", 1); var leftGap = panel.addWidget("org.kde.plasma.panelspacer"); leftGap.currentConfigGroup = ["General"]; diff --git a/docs/screenshots/icon-candidates-2.png b/docs/screenshots/icon-candidates-2.png index 6d417c4..af03442 100644 Binary files a/docs/screenshots/icon-candidates-2.png and b/docs/screenshots/icon-candidates-2.png differ diff --git a/docs/screenshots/pc-icon-vs-notifications.png b/docs/screenshots/pc-icon-vs-notifications.png index 0fa4fde..386bf6c 100644 Binary files a/docs/screenshots/pc-icon-vs-notifications.png and b/docs/screenshots/pc-icon-vs-notifications.png differ diff --git a/docs/screenshots/pc-mark.png b/docs/screenshots/pc-mark.png new file mode 100644 index 0000000..7b943f6 Binary files /dev/null and b/docs/screenshots/pc-mark.png differ diff --git a/docs/screenshots/pc-panel-left.png b/docs/screenshots/pc-panel-left.png index 3073571..5851a2a 100644 Binary files a/docs/screenshots/pc-panel-left.png and b/docs/screenshots/pc-panel-left.png differ diff --git a/docs/screenshots/pc-panel.png b/docs/screenshots/pc-panel.png index eac1798..703440a 100644 Binary files a/docs/screenshots/pc-panel.png and b/docs/screenshots/pc-panel.png differ diff --git a/docs/screenshots/pc-ready.png b/docs/screenshots/pc-ready.png index cfbee71..42e66e4 100644 Binary files a/docs/screenshots/pc-ready.png and b/docs/screenshots/pc-ready.png differ diff --git a/docs/screenshots/pc-sent.png b/docs/screenshots/pc-sent.png index 3bbc46a..54ea5b1 100644 Binary files a/docs/screenshots/pc-sent.png and b/docs/screenshots/pc-sent.png differ diff --git a/packaging/debian/control.template b/packaging/debian/control.template index 6e15b78..98d7bc0 100644 --- a/packaging/debian/control.template +++ b/packaging/debian/control.template @@ -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, python3-gi, python3-gi-cairo, gir1.2-gtk-3.0, gir1.2-gtklayershell-0.1, libnotify-bin, curl, gnupg, ca-certificates, python3-paho-mqtt +Depends: plasma-desktop, plasma-workspace, kwin-wayland, plasma-nm, plasma-pa, plasma-widgets-addons, 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,11 @@ 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. . + plasma-widgets-addons is here for one widget: Quick Launch, which is + the only stock way to put a single launcher on the panel that reads + /usr/share/applications live. The Icon widget copies the entry into the + user's home, so an update could never change it. + . 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. diff --git a/tools/lab/Dockerfile.plasma b/tools/lab/Dockerfile.plasma index 9306ff4..a74523c 100644 --- a/tools/lab/Dockerfile.plasma +++ b/tools/lab/Dockerfile.plasma @@ -88,3 +88,7 @@ RUN DEBIAN_FRONTEND=noninteractive apt-get purge -y \ plasma-discover-backend-fwupd kdeconnect kup-backup \ && apt-get autoremove -y \ && rm -rf /var/lib/apt/lists/* + +# Quick Launch, for the one auxiliary button on the panel. +RUN apt-get update && apt-get install -y --no-install-recommends plasma-widgets-addons \ + && rm -rf /var/lib/apt/lists/* diff --git a/tools/lab/parent-call-rig b/tools/lab/parent-call-rig index b1b0cb2..4d8f11d 100755 --- a/tools/lab/parent-call-rig +++ b/tools/lab/parent-call-rig @@ -97,7 +97,9 @@ ENV sleep 4 # The room points at the loopback broker, never at the church's. - inlab python3 - <<'PY' + # docker exec needs -i or the heredoc reaches nothing at all, which is + # how this silently left the room pointing nowhere. + docker exec -i "$NAME" python3 - <<'PY' import pathlib p = pathlib.Path("/etc/ekklesia-classroom/device.conf") t = p.read_text()