quickshell/modules/notifications/Notification.qml
lucy a4a2c89d09 add notifications
use notification blueprint from old version but improve it because its
lowk retarded
2026-01-17 22:47:32 +01:00

124 lines
4.1 KiB
QML

pragma ComponentBehavior: Bound
import QtQuick
import Quickshell
import Quickshell.Wayland
import Quickshell.Hyprland
import "."
import "../../"
import QtQuick.Layouts
import Quickshell.Widgets
import "../../settings/"
Variants {
model: Quickshell.screens
delegate: WlrLayershell {
id: root
required property var modelData
screen: modelData
anchors {
top: true
right: true
bottom: true
}
margins {
top: Settings.config.barHeight + 10
right: 10
left: 10
}
mask: Region { item: notifList }
implicitHeight: notifList.contentHeight + 20
implicitWidth: modelData.width / 8
layer: WlrLayer.Overlay
exclusionMode: ExclusionMode.Ignore
color: "transparent"
ListView {
id: notifList
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
spacing: 10
height: contentHeight
model: NotiServer.trackedNotifications
delegate: Item {
anchors.right: parent ? parent.right : root.right
id: notifyItem
required property var index
implicitWidth: root.modelData.width / 8
implicitHeight: notiIcon.implicitHeight + 20
required property var modelData
Rectangle {
anchors.fill: parent
color: Colors.background
border.color: Colors.color5
border.width: 2
RowLayout {
id: fullLayout
anchors.margins: 10
anchors.fill: parent
spacing: 10
ClippingWrapperRectangle {
id: notiIcon
radius: 0
implicitWidth: 64
implicitHeight: 64
visible: notifyItem.modelData.image !== ""
IconImage {
source: notifyItem.modelData.image
visible: notifyItem.modelData.image !== ""
implicitSize: 30
asynchronous: true
}
}
ColumnLayout {
id: textLayout
Layout.fillWidth: true
Layout.alignment: Qt.AlignTop
spacing: 2
Text {
text: notifyItem.modelData.summary
color: Colors.foreground
font.family: Settings.config.font
font.pixelSize: Settings.config.fontSize
font.bold: true
elide: Text.ElideRight
Layout.fillWidth: true
}
Text {
text: notifyItem.modelData.body
color: Colors.foreground
font.family: Settings.config.font
font.pixelSize: Settings.config.fontSize - 2
maximumLineCount: 3
wrapMode: Text.WordWrap
elide: Text.ElideRight
Layout.fillWidth: true
}
}
}
MouseArea {
anchors.fill: parent
Layout.fillWidth: true
Layout.fillHeight: true
acceptedButtons: Qt.LeftButton
onClicked: notifyItem.modelData.dismiss()
}
}
}
}
}
}