76 lines
1.9 KiB
QML
76 lines
1.9 KiB
QML
import QtQuick
|
|
import Quickshell
|
|
import "root:/config"
|
|
import "root:/components"
|
|
import "root:/services"
|
|
import "root:/popouts"
|
|
|
|
// Notification bell with an unread badge. Click opens the history, right click
|
|
// toggles do-not-disturb.
|
|
BarPill {
|
|
id: root
|
|
|
|
required property var screenRef
|
|
|
|
accent: Notifs.dnd ? Theme.muted : Theme.primary
|
|
padding: Theme.padS
|
|
implicitWidth: Theme.barHeight - 4 + contentPad
|
|
|
|
onClicked: {
|
|
popout.pinned = !popout.pinned;
|
|
Notifs.markRead();
|
|
}
|
|
onRightClicked: Notifs.toggleDnd()
|
|
|
|
Icon {
|
|
id: bell
|
|
anchors.centerIn: parent
|
|
text: Notifs.icon
|
|
font.pixelSize: Theme.fsLarge
|
|
color: {
|
|
if (Notifs.dnd) return Theme.muted;
|
|
if (Notifs.hasUnread) return Theme.accent;
|
|
return root.hovered ? Theme.glow : Theme.primary;
|
|
}
|
|
}
|
|
|
|
// Unread badge, chopped like everything else.
|
|
Rectangle {
|
|
visible: Notifs.unread > 0 && !Notifs.dnd
|
|
anchors.right: parent.right
|
|
anchors.rightMargin: 2
|
|
anchors.top: parent.top
|
|
anchors.topMargin: 4
|
|
width: Math.max(12, badge.implicitWidth + 5)
|
|
height: 12
|
|
color: Theme.accent
|
|
|
|
Text {
|
|
id: badge
|
|
anchors.centerIn: parent
|
|
text: Notifs.unread > 9 ? "9+" : Notifs.unread
|
|
color: Theme.text
|
|
font.family: Theme.fontMono
|
|
font.pixelSize: 8
|
|
font.weight: Font.Bold
|
|
renderType: Text.NativeRendering
|
|
}
|
|
|
|
transform: Matrix4x4 {
|
|
matrix: Qt.matrix4x4(1, -Theme.skew, 0, 12 * Theme.skew,
|
|
0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)
|
|
}
|
|
}
|
|
|
|
Connections {
|
|
target: Notifs
|
|
function onPopupRequested() { bell.bump(); }
|
|
}
|
|
|
|
NotifPopout {
|
|
id: popout
|
|
anchorItem: root
|
|
triggerHovered: root.hovered
|
|
}
|
|
}
|