Grows Souveraine's own surfaces on top of the borrowed ii shell and drops the separate pill shell in favor of one integrated navigation rail. Session arbiter (functions/Session.qml): probe logind's Can* methods over busctl instead of guessing from installed binaries -- the answer carries the polkit tier (yes/challenge/na), so a swapless phone reports hibernate as na and refuses honestly rather than firing a verb that no-ops. Verbs run through a Process that logs exit codes and tracks lastAction; refusals log too. The busctl output is parsed with awk, not a sed regex buried under four escaping layers -- the sed version returned nothing on the phone and left every capability stuck at "unknown" (invisible on the laptop, where timing masked it). Every structured result is JSON-over-string; quickshell maps a var return to void. Lock trust: screenLocked (the shell's lock request) is now distinct from screenLockSecure (WlSessionLock.secure, the compositor's acknowledgement, mirrored from LockScreen). Cards that disclose personal data gate on secure, not on a button press. LockContentPolicy centralizes the ambient/personal/ step-up tiers so no card grows its own private rule. New first-party namespace modules/souveraine/: LockMediaCard, LockSurfaceHost, SystemGestureRail -- owned surfaces, not ii patches. IdleCoordinator gives one staged idle vocabulary (dim/lock) gated behind nativeCoordinatorEnabled, off until the native Wayland idle-notify is verified on the Pixel compositor; hypridle stays the adapter. WallpaperAssets selects aspect-aware variants for phone-vs-laptop display shapes. Pill retired: pill/shell.qml and PillConfig gone, replaced by NavigationConfig and the gesture rail. Hyprland starts qs -c souveraine directly; no secondary shell, no qsConfig flip. Verified on the phone: session.* reports challenge/na correctly, hibernate and unlock refuse, inhibit round-trips with its reason.
67 lines
2.7 KiB
QML
67 lines
2.7 KiB
QML
import QtQuick
|
|
import Quickshell
|
|
|
|
import qs.modules.common
|
|
// AppInventory.qml root is Item (not QtObject) so it can own its scanner
|
|
// Process child — the original QtObject root failed with "no default property."
|
|
import qs.modules.ii.appInventory
|
|
import qs.modules.ii.background
|
|
import qs.modules.ii.bar
|
|
import qs.modules.ii.cheatsheet
|
|
import qs.modules.ii.dock
|
|
import qs.modules.ii.lock
|
|
import qs.modules.ii.mediaControls
|
|
import qs.modules.ii.notificationPopup
|
|
import qs.modules.ii.onScreenDisplay
|
|
import qs.modules.ii.onScreenKeyboard
|
|
import qs.modules.ii.overview
|
|
import qs.modules.ii.polkit
|
|
import qs.modules.ii.regionSelector
|
|
import qs.modules.ii.screenCorners
|
|
import qs.modules.ii.screenTranslator
|
|
import qs.modules.ii.sessionScreen
|
|
import qs.modules.ii.sidebarLeft
|
|
import qs.modules.ii.sidebarRight
|
|
import qs.modules.ii.overlay
|
|
import qs.modules.ii.verticalBar
|
|
import qs.modules.ii.wallpaperSelector
|
|
import qs.modules.souveraine.navigation
|
|
|
|
// The Souveraine panel family — one family for both modes.
|
|
// Starts at exact panel parity with IllogicalImpulseFamily (our overridden
|
|
// components resolve in naturally); per-panel form-factor gates
|
|
// (Config.options.souveraine.phone) get added only where the modes genuinely
|
|
// differ, and removed as the modes homogenize. This file is the scoreboard
|
|
// of that convergence.
|
|
|
|
Scope {
|
|
// Non-UI service scope: hosts the app-inventory IPC surface (apps.*).
|
|
// Plain child, not a PanelLoader entry — it has no panel/visibility
|
|
// concerns, just a long-lived Scope holding the inventory + IpcHandler.
|
|
AppInventoryScope {}
|
|
|
|
PanelLoader { extraCondition: !Config.options.bar.vertical; component: Bar {} }
|
|
PanelLoader { component: Background {} }
|
|
PanelLoader { component: Cheatsheet {} }
|
|
PanelLoader { extraCondition: Config.options.dock.enable; component: Dock {} }
|
|
PanelLoader { component: Lock {} }
|
|
PanelLoader { component: MediaControls {} }
|
|
PanelLoader { component: NotificationPopup {} }
|
|
PanelLoader { component: OnScreenDisplay {} }
|
|
PanelLoader { component: OnScreenKeyboard {} }
|
|
PanelLoader { component: Overlay {} }
|
|
PanelLoader { component: Overview {} }
|
|
PanelLoader { component: Polkit {} }
|
|
PanelLoader { component: RegionSelector {} }
|
|
PanelLoader { component: ScreenCorners {} }
|
|
PanelLoader { component: ScreenTranslator {} }
|
|
PanelLoader { component: SessionScreen {} }
|
|
PanelLoader { component: SidebarLeft {} }
|
|
PanelLoader { component: SidebarRight {} }
|
|
PanelLoader {
|
|
extraCondition: Config.options.souveraine.phone
|
|
component: SystemGestureRail {}
|
|
}
|
|
PanelLoader { extraCondition: Config.options.bar.vertical; component: VerticalBar {} }
|
|
PanelLoader { component: WallpaperSelector {} }
|
|
}
|