105 lines
2.7 KiB
QML
105 lines
2.7 KiB
QML
pragma ComponentBehavior: Bound
|
|
|
|
import Quickshell
|
|
import Quickshell.Wayland
|
|
import Quickshell.Services.Notifications
|
|
import QtQuick
|
|
import QtQuick.Effects
|
|
|
|
import "../bar"
|
|
import "../volume"
|
|
import "../notifications"
|
|
|
|
import "../../services"
|
|
import "../../config"
|
|
|
|
Variants {
|
|
model: Quickshell.screens
|
|
|
|
Scope {
|
|
id: scope
|
|
required property ShellScreen modelData
|
|
|
|
Exclusions {
|
|
screen: scope.modelData
|
|
bar: bar
|
|
}
|
|
|
|
PanelWindow {
|
|
id: win
|
|
|
|
screen: scope.modelData
|
|
color: "transparent"
|
|
|
|
WlrLayershell.exclusionMode: ExclusionMode.Ignore
|
|
WlrLayershell.keyboardFocus: WlrKeyboardFocus.None
|
|
|
|
// Clickthrough mask.
|
|
// Clickable areas of the window are determined by the provided region.
|
|
mask: Region {
|
|
// Start at the bottom left; right of the bar and on top of the border
|
|
x: bar.implicitWidth
|
|
y: Config.border.thickness
|
|
|
|
// Width is the window width - the bar's width - the border thickness
|
|
width: win.width - bar.implicitWidth - Config.border.thickness
|
|
|
|
// Height is window width - the border thickness x2 —top border and bottom border.
|
|
height: win.height - Config.border.thickness * 2
|
|
|
|
// Setting the intersection mode to Xor will invert the mask and make everything in the mask region not clickable and pass through clicks inside it through the window.
|
|
intersection: Intersection.Xor
|
|
Region {
|
|
item: volume
|
|
intersection: Intersection.Subtract
|
|
}
|
|
}
|
|
|
|
anchors {
|
|
top: true
|
|
bottom: true
|
|
left: true
|
|
right: true
|
|
}
|
|
|
|
Item {
|
|
id: background
|
|
|
|
anchors.fill: parent
|
|
visible: false
|
|
|
|
Border {
|
|
bar: bar
|
|
}
|
|
|
|
Backgrounds {
|
|
bar: bar
|
|
}
|
|
}
|
|
|
|
MultiEffect {
|
|
anchors.fill: source
|
|
source: background
|
|
shadowEnabled: true
|
|
blurMax: 15
|
|
}
|
|
|
|
Bar {
|
|
id: bar
|
|
screen: scope.modelData
|
|
}
|
|
|
|
VolumeSlider {
|
|
id: volume
|
|
isInRightPanel: hover.isInRightPanel
|
|
screen: scope.modelData
|
|
}
|
|
|
|
Hover {
|
|
id: hover
|
|
screen: scope.modelData
|
|
bar: bar
|
|
}
|
|
}
|
|
}
|
|
}
|