Files
quickshell/modules/notification/Notification.qml
T

103 lines
2.7 KiB
QML

import QtQuick
import Quickshell
import Quickshell.Services.Notifications
import "../../config"
import "./notificationServer"
PanelWindow {
// mask: Region {}
id: notificationWindow
anchors.top: true
anchors.left: true
// implicitHeight: screen.height/6
implicitHeight: contentHeight+(content.spacing*(notificationListModel.count-1))
implicitWidth: contentWidth
color: "transparent"
ListModel {
id: notificationListModel
}
Connections {
target: NotificationS
function onNotificationReceived(notification) {
if (!NotificationS.correctMonitor(screen))
return
if (NotificationS.correctMonitor(screen)) {
console.log("[Notification]: This notification belongs to me!", screen.x, screen.y)
notificationListModel.append({notificationData: notification})
}
}
}
Rectangle {
anchors.fill: parent
border.width: Config.border_width
border.color: Colors.primary
color: "transparent"
Column {
id: content
anchors.fill: parent
spacing: -2
Repeater {
id: notificationRepeater
model: notificationListModel
delegate: NotificationBody {
required property int index
required property var notificationData
notification: notificationData
onDismissed: function(notification) {
notificationListModel.remove(index)
notification.dismiss()
console.log("[Notification]: Dismissed Notification:", notification.appName, notification.id, notification.summary, notification.body)
}
}
onItemAdded: updateContentSize()
onItemRemoved: updateContentSize()
}
}
}
property real contentWidth: 0
property real contentHeight: 0
function updateContentSize() {
let width = 0
let height = 0
for (let i = 0; i < notificationRepeater.count; ++i) {
let item = notificationRepeater.itemAt(i)
if (item) {
width = Math.max(width, item.width)
height += item.height
}
}
contentWidth = width
contentHeight = height
console.log("[updateContentSize] contentWidth:", contentWidth, "contentHeight:", contentHeight)
}
Component.onCompleted: {
console.log(
"[Notification]:",
NotificationS,
"notification:",
NotificationS.newestNotification
)
}
}