waffles: popup notifs

This commit is contained in:
end-4
2025-12-22 23:01:42 +01:00
parent 29c8001785
commit d7ae6014ed
4 changed files with 78 additions and 7 deletions
@@ -15,6 +15,9 @@ MouseArea {
required property var notification
property bool expanded: notification.actions.length > 0
property string groupExpandControlMessage: ""
readonly property bool isPopup: notification?.popup ?? false
signal groupExpandToggle
hoverEnabled: true
@@ -56,8 +59,8 @@ MouseArea {
Rectangle {
id: contentItem
width: parent.width
color: Looks.colors.bgPanelBody
radius: Looks.radius.medium
color: root.isPopup ? Looks.colors.bg0 : Looks.colors.bgPanelBody
radius: root.isPopup ? Looks.radius.large : Looks.radius.medium
property real padding: 12
implicitHeight: notificationContent.implicitHeight + padding * 2
implicitWidth: notificationContent.implicitWidth + padding * 2
@@ -157,9 +160,9 @@ MouseArea {
NotificationHeaderButton {
Layout.rightMargin: 4
opacity: root.containsMouse ? 1 : 0
opacity: (root.containsMouse || root.isPopup) ? 1 : 0
icon.name: "dismiss"
implicitSize: 12
implicitSize: 14
onClicked: root.dismiss()
}
}
@@ -0,0 +1,66 @@
import QtQuick
import QtQuick.Controls
import Quickshell
import Quickshell.Wayland
import Quickshell.Hyprland
import qs
import qs.services
import qs.modules.common
import qs.modules.common.widgets
import qs.modules.waffle.looks
import qs.modules.waffle.notificationCenter
Scope {
id: notificationPopup
PanelWindow {
id: root
visible: (Notifications.popupList.length > 0) && !GlobalStates.screenLocked
screen: Quickshell.screens.find(s => s.name === Hyprland.focusedMonitor?.name) ?? null
WlrLayershell.namespace: "quickshell:notificationPopup"
WlrLayershell.layer: WlrLayer.Overlay
exclusiveZone: 0
anchors {
top: true
right: true
bottom: true
}
mask: Region {
item: listview.contentItem
}
color: "transparent"
implicitWidth: listview.implicitWidth
WListView {
id: listview
anchors {
bottom: parent.bottom
right: parent.right
left: parent.left
}
leftMargin: 16
rightMargin: 16
topMargin: 16
bottomMargin: 16
height: Math.min(contentItem.height + topMargin + bottomMargin, parent.height)
width: parent.width - Appearance.sizes.elevationMargin * 2
implicitWidth: 396
spacing:12
model: ScriptModel {
values: Notifications.popupList
}
delegate: WSingleNotification {
required property var modelData
notification: modelData
width: ListView.view.width - ListView.view.leftMargin - ListView.view.rightMargin
}
}
}
}