Moves PolkitPrompt from shell.qml into HyprChromeShell. Whether a prompt is open is shell state by the same rule as the screen and the layer pair: two surfaces read it. The prompt no longer carries a backdrop of its own. There is one ChromeBackdrop per output and a prompt raises them all, so a prompt over an already-expanded rail reuses the scrim that is there rather than stacking a second one on it, and a prompt over a collapsed rail expands that same scrim from its bar-height band to the whole output. The layer pair now keys off `scrimUp` (expanded OR prompting) rather than off the density, which keeps bar and backdrop exactly one level apart in every state. A prompt over a collapsed rail raises both: BACKGROUND sits under ordinary windows so a scrim there dims nothing, and the bar has to stay one above the scrim or the shell dims its own chrome. The rail is raised but stays collapsed — its layer answers to the scrim, its height to `expanded`. Outputs the rail does not live on get a scrim only while a prompt is up; a modal that dims one monitor and leaves the others lit does not read as modal. Expanding the rail still dims only the rail's screen, which is the existing behaviour and the right one. The dialog follows Hyprland.focusedMonitor rather than the rail's screen — a password prompt belongs where the user is looking — matched by name against Quickshell.screens, falling back to the rail's screen rather than to nothing. SUPER A is frozen while a prompt is open, and dropped rather than queued, so the rail does not spring open the moment the dialog goes. Verified on two monitors via hyprctl layers, both densities, plus the toggle block with an odd number of presses (two cancel out and prove nothing). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GAq2kKCLazZmrKvkd3akud
77 lines
2.4 KiB
QML
77 lines
2.4 KiB
QML
//@ pragma UseQApplication
|
||
|
||
import QtQuick
|
||
import Quickshell
|
||
import Quickshell.Widgets
|
||
import qs.widgets.bar
|
||
import qs.widgets.launcher
|
||
import qs.widgets.notifications
|
||
import qs.widgets.osd
|
||
import qs.widgets.systray
|
||
import qs.widgets.theme
|
||
import qs.widgets.vitals
|
||
import qs.HyprChrome
|
||
import qs.HyprChrome.Widgets
|
||
import qs.HyprChrome.Widgets.Bar.Debug
|
||
import qs.HyprChrome.Widgets.Bar.Host
|
||
import qs.HyprChrome.Widgets.Bar.Vitals
|
||
|
||
Scope {
|
||
// Dense multi-monitor status rail; visual core is headlessly renderable.
|
||
HyprChromeShell {}
|
||
|
||
// App launcher variants — 1–11; variant 8 remains the primary HUD.
|
||
LauncherStack {} // 1 — left vertical list
|
||
LauncherGrid {} // 2 — centered icon grid
|
||
LauncherSpotlight {} // 3 — top-center command bar
|
||
LauncherConsole {} // 4 — full-width deck unfolding from the top bar
|
||
LauncherDock {} // 5 — deck rising from the bottom bar
|
||
LauncherSlant {} // 6 — angular / sheared panel
|
||
LauncherCorner {} // 7 — Slant (V6) copy + floating power panel (shutdown/reboot)
|
||
ApplicationLauncher {} // 8 — dense HUD command index (primary)
|
||
BladeLauncher {} // 9 — asymmetric blade matrix
|
||
OrbitLauncher {} // 10 — radial targeting arena
|
||
CyberDock {} // 11 — cyberpunk bottom cartridge dock
|
||
|
||
Notifications {}
|
||
|
||
VolumeOsd {}
|
||
|
||
// Host vitals HUD — toggle with SUPER CTRL V.
|
||
Vitals {}
|
||
|
||
// Widget staging area, centered on the secondary monitor (HDMI-A-1),
|
||
// toggled with SUPER CTRL D. Swap the children below for whatever widget
|
||
// is being worked on; they must carry their own size (see DebugWindow).
|
||
// DebugWindow {
|
||
// id: debugStage
|
||
|
||
// // VitalsPanel has no implicit width — the slot measures its children, so
|
||
// // each staged panel states its own. Height follows the mode it is in.
|
||
// // Click a panel to collapse or expand it.
|
||
// Column {
|
||
// spacing: 12
|
||
// padding: 12
|
||
|
||
// HostPanel {
|
||
// width: 560
|
||
// }
|
||
|
||
// HostPanel {
|
||
// width: 560
|
||
// expanded: false
|
||
// }
|
||
|
||
// VitalsPanel {
|
||
// width: 560
|
||
// }
|
||
|
||
// VitalsPanel {
|
||
// width: 560
|
||
// expanded: false
|
||
// }
|
||
|
||
// }
|
||
// }
|
||
}
|