Watch
1
0
Fork
You've already forked souveraine
0
souveraine/surfaces/quickshell/shell.qml
Fimeg 5c618f1514 lock: hoist the lock out of the Config.ready loaders so a reload can adopt
PanelLoader is a LazyLoader gated on Config.ready, behind a second one.
On reload both are shut when quickshell propagates, so LazyLoader has no
item to hand its successor and the new WlSessionLock never adopts the live
compositor lock. Lock is a direct child of ShellRoot now, as the boot-order
doc already asked.

Ungated means Config may not have loaded, and touchKeypad reads false from
the adapter defaults — which would bind the desktop surface on the phone and
cannot be changed once the lock is active. The choice rides the reload too.
2026-07-31 21:25:05 -04:00

79 lines
2.9 KiB
QML

//@ pragma UseQApplication
//@ pragma Env QS_NO_RELOAD_POPUP=1
//@ pragma Env QT_QUICK_CONTROLS_STYLE=Basic
//@ pragma Env QT_QUICK_FLICKABLE_WHEEL_DECELERATION=10000
// Souveraine shell entry — `qs -c souveraine`.
// One family, two modes (desktop and phone), converging over time. Panels
// that differ by form factor are gated on Config.options.souveraine.phone
// inside SouveraineFamily; a panel is "homogenized" when its gate is gone.
// No panelFamily switching: this config loads SouveraineFamily, period.
// ii's tree is borrowed underneath (composed by deploy.sh) until each piece
// is owned outright.
import "modules/common"
import "modules/ii/lock"
import "modules/souveraine/boot"
import "services"
import "panelFamilies"
import QtQuick
import QtQuick.Window
import Quickshell
import Quickshell.Io
import Quickshell.Hyprland
ShellRoot {
id: root
// NOTE: no DeviceConnectNotification here — the phone's ii snapshot
// predates it, and version-dependent types don't belong in the entry file.
ReloadPopup {}
// Boot bloom overlay. Top-level (NOT inside the Config.ready LazyLoader) so
// it maps as Hyprland's first surface, before the rest of the shell loads —
// covering all of Hyprland's boot render and continuing the C splash's
// bloom until the lockscreen is secure. Signals the splash to release DRM
// master on its first frame; LockScreen clears GlobalStates.bootBloomActive.
BootBloom {}
// The lock, top-level and ungated, for both of the reasons the docs give.
//
// Boot (`session-authority-boot-order.md` Phase A.1): no surface may
// precede the lock decision. Behind `Config.ready` it could, and once did —
// an NM password dialog rendered before the lockscreen.
//
// Reload (TASK-48): a `LazyLoader` whose `active` is false when quickshell
// propagates reloads has no item to hand its successor, so the new
// `WlSessionLock` never adopts the live compositor lock. As a direct child
// of `ShellRoot` — itself a `ReloadPropagator` — this matches its
// predecessor positionally, with no `reloadableId` needed, and the adopt
// path in `LockScreen.qml` finally has something to adopt.
//
// It must stay a direct child. Wrapping it in any conditional loader
// reintroduces both failures at once.
Lock {}
// A normal XDG app window in this process. Its desktop/sidebar launchers
// call the `settings` IPC target; no second Quickshell/session scope is
// created.
SettingsWindow {}
Component.onCompleted: {
MaterialThemeLoader.reapplyTheme()
SessiondBridge.claimAuthority()
SessiondBridge.load()
Hyprsunset.load()
FirstRunExperience.load()
ConflictKiller.load()
CrashReporter.start()
Cliphist.refresh()
Wallpapers.load()
Updates.load()
}
LazyLoader {
active: Config.ready
component: SouveraineFamily {}
}
}