pragma ComponentBehavior: Bound import qs.widgets import qs.services import qs.config import qs.modules.bar import Quickshell import Quickshell.Wayland import Quickshell.Hyprland import QtQuick import QtQuick.Effects Variants { model: Quickshell.screens Scope { id: scope required property ShellScreen modelData Exclusions { screen: scope.modelData bar: bar } StyledWindow { id: win screen: scope.modelData name: "drawers" WlrLayershell.exclusionMode: ExclusionMode.Ignore WlrLayershell.keyboardFocus: visibilities.launcher || visibilities.session ? WlrKeyboardFocus.OnDemand : WlrKeyboardFocus.None mask: Region { x: bar.implicitWidth y: Config.border.thickness width: win.width - bar.implicitWidth - Config.border.thickness height: win.height - Config.border.thickness * 2 intersection: Intersection.Xor regions: regions.instances } anchors.top: true anchors.bottom: true anchors.left: true anchors.right: true Variants { id: regions model: panels.children Region { required property Item modelData x: modelData.x + bar.implicitWidth y: modelData.y + Config.border.thickness width: modelData.width height: modelData.height intersection: Intersection.Subtract } } HyprlandFocusGrab { active: (visibilities.launcher && Config.launcher.enabled) || (visibilities.session && Config.session.enabled) windows: [win] onCleared: { visibilities.launcher = false; visibilities.session = false; } } StyledRect { anchors.fill: parent opacity: visibilities.session && Config.session.enabled ? 0.5 : 0 color: Colours.palette.m3scrim Behavior on opacity { NumberAnimation { duration: Appearance.anim.durations.normal easing.type: Easing.BezierSpline easing.bezierCurve: Appearance.anim.curves.standard } } } Item { anchors.fill: parent layer.enabled: true layer.effect: MultiEffect { shadowEnabled: true blurMax: 15 shadowColor: Qt.alpha(Colours.palette.m3shadow, 0.7) } Border { bar: bar } Backgrounds { panels: panels bar: bar } } PersistentProperties { id: visibilities property bool bar property bool osd property bool session property bool launcher property bool dashboard property bool utilities Component.onCompleted: Visibilities.load(scope.modelData, this) } Interactions { screen: scope.modelData popouts: panels.popouts visibilities: visibilities panels: panels bar: bar Panels { id: panels screen: scope.modelData visibilities: visibilities bar: bar } } BarWrapper { id: bar anchors.top: parent.top anchors.bottom: parent.bottom screen: scope.modelData visibilities: visibilities popouts: panels.popouts } } } }