-
Notifications
You must be signed in to change notification settings - Fork 0
Splash and Now Playing
Three transient overlays sit at the boundary between Kartend's idle state and an active launch:
- Boot splash — short overlay during application startup.
- Startup video — optional one-time intro video on launch.
- Resume-focus splash — short overlay when the window regains focus after a launched item exits.
And one persistent overlay during a launched item's lifetime:
- Now Playing overlay — covers the grid while a launched item is running, if runtime detection is on.
Where to find this — Settings Dialog → General tab → Splash Screens, Startup Video, Runtime Detection sections.
A short overlay shown while Kartend initializes — it covers the brief window between the executable starting and the first collection rendering. Used to mask Qt's "white flash" startup and to signal that the app is loading.
[General]
bootSplashEnabled=trueDefault true. Disabled installs go straight to a black screen until
the first paint, then to the grid.
The overlay shows:
- App name (
Kartend) - Version
- Optional logo
- A subtle progress indicator
It auto-dismisses when the first collection has rendered, typically within 200–500 ms.
There's no per-collection theming for the boot splash today (the overlay is global and runs before any collection is selected).
The title and subtitle default to the app name and a built-in tagline. Override either to taste:
[General]
bootSplashTitle=Welcome to my cabinet
bootSplashSubtitle=Loading…| Key | Default | Note |
|---|---|---|
bootSplashTitle |
App display name | Used verbatim — no %1 substitution. To include the app name, type it. |
bootSplashSubtitle |
Built-in tagline | Empty string preserves the default. |
Leave a key empty (or unset) to fall back to the default. The same font and colors apply regardless of the source.
A one-time intro video played at launch — branded splash, distributor logo, retro-system bumper, etc. Plays full-screen with audio (unmuted).
[General]
startupVideoEnabled=false
startupVideoPath=~/themes/intro.mp4Default disabled. When enabled, plays once on every launch.
| Behavior | Detail |
|---|---|
| Plays once | Per-launch; does not loop |
| Skippable | Any keypress, mouse click, or gamepad input dismisses |
| Audio | Unmuted (uses system volume; not the previewVideoVolume slider) |
| Format support | Same Qt Multimedia / GStreamer codec list as Video Previews |
The startup video is separate from any per-collection background
video (backgroundVideo) — those are persistent looping wallpapers,
this is a one-shot intro.
If startupVideoEnabled=true but startupVideoPath is empty or the
file doesn't exist, Kartend logs a warning and skips silently.
A short overlay shown when the Kartend window regains focus after a launched item closes (window manager re-focus event). Used to bridge the moment between "external app exits" and "Kartend window comes back" so the user sees a consistent surface.
[General]
resumeFocusSplashEnabled=trueDefault true. Set to false for an instant return to the grid.
The overlay is brief (typically 200–600 ms) and skippable with any input. It also serves as a moment for the layout / video-preview pipeline to re-warm before the user starts navigating.
When runtime detection is enabled, the resume-focus splash is also the transition out of the Now Playing overlay when the launched process exits.
[General]
resumeFocusSplashTitle=Back!
resumeFocusSplashSubtitle=Pick your next one.| Key | Default | Note |
|---|---|---|
resumeFocusSplashTitle |
Localized Welcome back | Used verbatim — no %1 substitution. |
resumeFocusSplashSubtitle |
Built-in default | Empty string preserves the default. |
Both keys are localizable by the operator — they're not auto-translated, so type the text in whatever language your install uses.
While a launched item is running and runtime detection is enabled, Kartend renders a Now Playing overlay over the items grid. The overlay shows what's running and optionally fades the grid behind it.
[General]
runtimeDetectionEnabled=falseDefault false. Off = Kartend launches items detached and forgets
them; the grid stays interactive while the launched app runs.
| Effect | Detail |
|---|---|
| Now Playing overlay | Renders while child process is alive |
| Time-played tracking |
launch_history.duration_seconds is populated, sidebar shows accurate play times |
| Attract mode suspension | Attract won't scroll behind a launched window |
| Process-aware quit | Kartend can detect crashed launches and surface error dialogs |
| Cost | Detail |
|---|---|
| Kartend stays focused | The window is in the foreground while the launched app runs (may be behind the launched app's window if the launched app is fullscreen) |
| Process tracking | One QProcess per launch; a small amount of memory and a file descriptor pair |
| Cleanup needed | Crashed Kartend can leave orphaned processes (rare) |
If your launchers always go fullscreen anyway and you don't return to
Kartend until they exit, runtime detection is a clear win — you get
accurate stats and the Now Playing overlay for "free." If you launch
items as background tasks (e.g. xdg-open for a PDF you read in
another window while continuing to browse Kartend), turn it off.
| Element | Detail |
|---|---|
| Item name | Centered, large |
| Item artwork | If available, large in the background |
| Status | "Running…" message; updates if the process emits any tracked output |
| Elapsed timer | Live counter |
| Progress indicator | Subtle pulse while alive |
Escape does not close the overlay (it would lose the runtime
detection link). The overlay closes when the child process exits — at
which point the resume-focus splash takes over
briefly before the grid returns.
Today Kartend tracks one launched item at a time. If you launch a second item while the first is still running, the first launch's runtime tracking is detached and only the second is tracked. Concurrent runtime tracking is on the wishlist.
| Splash / overlay | Enable when |
|---|---|
| Boot splash | You want a polished startup transition (default — leave on). |
| Startup video | You want a branded intro / kiosk welcome. |
| Resume-focus splash | You want the same polished transition coming back from a launch (default — leave on). |
| Runtime detection | You want accurate time-played stats and the Now Playing overlay; your launchers usually go fullscreen. |
[General]
bootSplashEnabled=true
startupVideoEnabled=true
startupVideoPath=~/themes/kiosk-intro.mp4
resumeFocusSplashEnabled=true
runtimeDetectionEnabled=true
attractModeEnabled=true
attractModeIdleTimeoutSec=60
fullscreen=true
showMenuBar=false
showToolbar=falseBoot splash → intro video → grid → attract mode after 60 s of idle → Now Playing while running launched items → resume-focus splash on return.
[General]
bootSplashEnabled=false
startupVideoEnabled=false
resumeFocusSplashEnabled=false
runtimeDetectionEnabled=falseCold start straight to the grid. Launches are detached; you can keep browsing while a launched item runs.
[General]
bootSplashEnabled=true
resumeFocusSplashEnabled=true
runtimeDetectionEnabled=true
historyEnabled=true
historyMaxEntries=5000Splashes for polish; runtime detection for accurate stats. The Now Playing overlay only shows for the duration of a launch (which is typically when you're not looking at Kartend anyway, since the launched app is in front).
- Attract Mode — the idle-screensaver layer that composes with these overlays
- History & Statistics — what runtime detection enables in the data layer
- Themes & Appearance — for persistent background video (different from startup video)
- Boot splash:
MainWindowpaints the splash widget before the first collection load completes;bootSplashEnabledgates the path. - Startup video: src/ui/widgets/overlays/startupvideooverlay.h
(
StartupVideoOverlay). Reuses theQMediaPlayerinfrastructure; unmuted (QAudioOutput::setVolume(1.0)). - Resume-focus splash: same widget path, triggered by
QApplication::focusWindowChangedafter a known-launched-item exit. - Now Playing overlay: src/ui/widgets/overlays/nowplayingoverlay.h.
Active while
LaunchManager's trackedQProcessis alive. - Attract suspension hook:
AttractManager::setSuspended(true)is called byLaunchManagerwhen runtime detection is on;setSuspended(false)on exit. - Runtime detection mode change: requires
LaunchManagerto use non-detachedQProcess::start()instead ofQProcess::startDetached(). SeeLaunchManager::launchItem(). - Adding a new transient overlay (e.g. "loading collection" overlay):
follow
StartupVideoOverlay's widget pattern, anchor to MainWindow, drive lifetime from the relevant manager.