The current kiosk window intentionally has EWMH below so fpv-video is visually dominant. That is correct for the no-WFB fallback, but a single below window cannot later render flight OSD over a separate fpv-video window.
Required architecture
Create two visual layers per Viture target:
fallback/menu canvas → fullscreen, below video
flight OSD overlay → transparent/input-transparent, above video
When there is no decoded stream, fallback/menu is visible. When video is present, keep video visually dominant over the fallback but allow only the dedicated transparent OSD layer above it.
Constraints
Do not move WFB/decode into the UI process merely to solve z-order.
UI telemetry may be delayed; pilot video may not be blocked, restarted, or buffered by the overlay.
Keep the later MIPI/touch target independent with its own layout/template.
## Why
The current kiosk window intentionally has EWMH `below` so `fpv-video` is visually dominant. That is correct for the no-WFB fallback, but a single below window cannot later render flight OSD over a separate `fpv-video` window.
## Required architecture
Create two visual layers per Viture target:
```text
fallback/menu canvas → fullscreen, below video
flight OSD overlay → transparent/input-transparent, above video
```
When there is no decoded stream, fallback/menu is visible. When video is present, keep video visually dominant over the fallback but allow only the dedicated transparent OSD layer above it.
## Constraints
- Do not move WFB/decode into the UI process merely to solve z-order.
- UI telemetry may be delayed; pilot video may not be blocked, restarted, or buffered by the overlay.
- Keep the later MIPI/touch target independent with its own layout/template.
This is the next task after #2. It depends on the completed video-presence lifecycle from #2, and must be completed before #3 begins rendering flight OSD.
## Priority / dependency
This is the next task after #2. It depends on the completed video-presence lifecycle from #2, and must be completed before #3 begins rendering flight OSD.
Order: **#2 → #8 → #3**.
Końcowa walidacja po synchronizacji z aktualnym main:
go test -count=1 -race ./... — wszystkie 6 pakietów przeszły
go vet ./... i gofmt -l .
build ARM64 obu binariów
git diff --check origin/main
skan nowych linii pod kątem sekretów i bezpieczeństwa
Niezależny review potwierdził rozdzielenie warstw, z-order, przezroczystość i przepuszczanie wejścia, bez sprzężenia overlayu z potokiem wideo. Wykryty problem chodzenia po ramkach window managera został naprawiony i objęty testem regresyjnym.
CI dla SHA PR: brak skonfigurowanego uruchomienia — workflow .gitea/workflows/build-arm64.yml reaguje wyłącznie na push do main lub ręczne uruchomienie; Gitea potwierdza 0 statusów i 0 runów dla tego SHA. Test na docelowej sesji Orange Pi/X11 pozostaje walidacją wdrożeniową.
Gotowe: PR https://git.piksar.eu/piotr/groundstation/pulls/12
Head: `cc916517ef7968292d636c581f2cc2cfd599c495`.
Końcowa walidacja po synchronizacji z aktualnym `main`:
- `go test -count=1 -race ./...` — wszystkie 6 pakietów przeszły
- `go vet ./...` i `gofmt -l .`
- build ARM64 obu binariów
- `git diff --check origin/main`
- skan nowych linii pod kątem sekretów i bezpieczeństwa
Niezależny review potwierdził rozdzielenie warstw, z-order, przezroczystość i przepuszczanie wejścia, bez sprzężenia overlayu z potokiem wideo. Wykryty problem chodzenia po ramkach window managera został naprawiony i objęty testem regresyjnym.
CI dla SHA PR: brak skonfigurowanego uruchomienia — workflow `.gitea/workflows/build-arm64.yml` reaguje wyłącznie na push do `main` lub ręczne uruchomienie; Gitea potwierdza 0 statusów i 0 runów dla tego SHA. Test na docelowej sesji Orange Pi/X11 pozostaje walidacją wdrożeniową.
Rebasing (1/1)
error: could not apply c911872... feat: split kiosk into fallback canvas and OSD overlay layers (#8)
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
hint: Disable this message with "git config set advice.mergeConflict false"
Could not apply c911872... # feat: split kiosk into fallback canvas and OSD overlay layers (#8)
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
fix conflict
Rebasing (1/1)
error: could not apply c911872... feat: split kiosk into fallback canvas and OSD overlay layers (#8)
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
hint: Disable this message with "git config set advice.mergeConflict false"
Could not apply c911872... # feat: split kiosk into fallback canvas and OSD overlay layers (#8)
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Branch został liniowo przebazowany na main@056cd5440a472c088fc5dddfbae4f1969d07b578; konflikt w README.md rozwiązano z zachowaniem treści z main oraz opisu architektury #8. Zaktualizowany head: 41552b4797e9d5761feefe0aaeb1a3c2411272a0.
Końcowe drzewo jest identyczne z wcześniej w pełni zwalidowanym drzewem cc916517ef7968292d636c581f2cc2cfd599c495; dodatkowo git diff --check origin/main przechodzi, diff obejmuje wyłącznie 9 ścieżek issue, a historia nie zawiera już merge commita. Push wykonano przez --force-with-lease, zdalny SHA został potwierdzony.
PR #12 został scalony przez Piotra. main oraz merge SHA wskazują dokładnie 41552b4797e9d5761feefe0aaeb1a3c2411272a0; issue #8 zostało automatycznie zamknięte. Końcowy workflow Build Ground Station / build (run 186) zakończył się sukcesem dla tego samego SHA.
Konflikt rebase w PR #12 naprawiony.
Branch został liniowo przebazowany na `main@056cd5440a472c088fc5dddfbae4f1969d07b578`; konflikt w `README.md` rozwiązano z zachowaniem treści z `main` oraz opisu architektury #8. Zaktualizowany head: `41552b4797e9d5761feefe0aaeb1a3c2411272a0`.
Końcowe drzewo jest identyczne z wcześniej w pełni zwalidowanym drzewem `cc916517ef7968292d636c581f2cc2cfd599c495`; dodatkowo `git diff --check origin/main` przechodzi, diff obejmuje wyłącznie 9 ścieżek issue, a historia nie zawiera już merge commita. Push wykonano przez `--force-with-lease`, zdalny SHA został potwierdzony.
PR #12 został scalony przez Piotra. `main` oraz merge SHA wskazują dokładnie `41552b4797e9d5761feefe0aaeb1a3c2411272a0`; issue #8 zostało automatycznie zamknięte. Końcowy workflow `Build Ground Station / build` (run 186) zakończył się sukcesem dla tego samego SHA.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Why
The current kiosk window intentionally has EWMH
belowsofpv-videois visually dominant. That is correct for the no-WFB fallback, but a single below window cannot later render flight OSD over a separatefpv-videowindow.Required architecture
Create two visual layers per Viture target:
When there is no decoded stream, fallback/menu is visible. When video is present, keep video visually dominant over the fallback but allow only the dedicated transparent OSD layer above it.
Constraints
Priority / dependency
This is the next task after #2. It depends on the completed video-presence lifecycle from #2, and must be completed before #3 begins rendering flight OSD.
Order: #2 → #8 → #3.
Gotowe: PR #12
Head:
cc916517ef7968292d636c581f2cc2cfd599c495.Końcowa walidacja po synchronizacji z aktualnym
main:go test -count=1 -race ./...— wszystkie 6 pakietów przeszłygo vet ./...igofmt -l .git diff --check origin/mainNiezależny review potwierdził rozdzielenie warstw, z-order, przezroczystość i przepuszczanie wejścia, bez sprzężenia overlayu z potokiem wideo. Wykryty problem chodzenia po ramkach window managera został naprawiony i objęty testem regresyjnym.
CI dla SHA PR: brak skonfigurowanego uruchomienia — workflow
.gitea/workflows/build-arm64.ymlreaguje wyłącznie na push domainlub ręczne uruchomienie; Gitea potwierdza 0 statusów i 0 runów dla tego SHA. Test na docelowej sesji Orange Pi/X11 pozostaje walidacją wdrożeniową.fix conflict
Rebasing (1/1)
error: could not apply c911872... feat: split kiosk into fallback canvas and OSD overlay layers (#8)
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
hint: Disable this message with "git config set advice.mergeConflict false"
Could not apply c911872... # feat: split kiosk into fallback canvas and OSD overlay layers (#8)
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Konflikt rebase w PR #12 naprawiony.
Branch został liniowo przebazowany na
main@056cd5440a472c088fc5dddfbae4f1969d07b578; konflikt wREADME.mdrozwiązano z zachowaniem treści zmainoraz opisu architektury #8. Zaktualizowany head:41552b4797e9d5761feefe0aaeb1a3c2411272a0.Końcowe drzewo jest identyczne z wcześniej w pełni zwalidowanym drzewem
cc916517ef7968292d636c581f2cc2cfd599c495; dodatkowogit diff --check origin/mainprzechodzi, diff obejmuje wyłącznie 9 ścieżek issue, a historia nie zawiera już merge commita. Push wykonano przez--force-with-lease, zdalny SHA został potwierdzony.PR #12 został scalony przez Piotra.
mainoraz merge SHA wskazują dokładnie41552b4797e9d5761feefe0aaeb1a3c2411272a0; issue #8 zostało automatycznie zamknięte. Końcowy workflowBuild Ground Station / build(run 186) zakończył się sukcesem dla tego samego SHA.grzesiu referenced this issue2026-10-17 08:49:56 +02:00