First commit
This commit is contained in:
143
config/hybar/modules/Notifications.qml
Normal file
143
config/hybar/modules/Notifications.qml
Normal file
@@ -0,0 +1,143 @@
|
||||
import Quickshell
|
||||
import QtQuick // for Text
|
||||
import QtQuick.Controls
|
||||
import QtQuick.Layouts
|
||||
import Quickshell.Services.Notifications
|
||||
import Quickshell.Io
|
||||
import Quickshell.Widgets
|
||||
import Quickshell.Hyprland
|
||||
|
||||
Item {
|
||||
width: 50
|
||||
height: 30
|
||||
|
||||
ClippingWrapperRectangle {
|
||||
id: barbutton
|
||||
radius: 5
|
||||
anchors.fill: parent
|
||||
Button {
|
||||
id: button
|
||||
text: ""
|
||||
font.pointSize: 16
|
||||
|
||||
onClicked: {
|
||||
|
||||
|
||||
menu.visible = true
|
||||
grab.active = true
|
||||
}
|
||||
implicitHeight: parent.height
|
||||
}
|
||||
}
|
||||
|
||||
NotificationServer {
|
||||
id: server
|
||||
persistenceSupported: true
|
||||
imageSupported: true
|
||||
actionsSupported: true
|
||||
bodyImagesSupported: true
|
||||
bodySupported: true
|
||||
bodyHyperlinksSupported: true
|
||||
inlineReplySupported: true
|
||||
actionIconsSupported: true
|
||||
|
||||
onNotification: (n) => {
|
||||
n.tracked = true
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
required property PanelWindow window
|
||||
id: root
|
||||
|
||||
PopupWindow {
|
||||
|
||||
id: menu
|
||||
|
||||
anchor.window: window
|
||||
anchor.rect.x: window.width - width
|
||||
anchor.rect.y: 50
|
||||
implicitWidth: 400
|
||||
implicitHeight: 1080 - anchor.rect.y
|
||||
visible: false
|
||||
|
||||
color: "transparent"
|
||||
|
||||
ClippingWrapperRectangle {
|
||||
radius: 5
|
||||
|
||||
color: Pywal.special.background
|
||||
|
||||
implicitHeight: parent.height - 20
|
||||
implicitWidth: parent.width
|
||||
|
||||
ColumnLayout {
|
||||
id: lay
|
||||
|
||||
spacing: 10
|
||||
|
||||
ClippingWrapperRectangle {
|
||||
color: Pywal.colors.color2
|
||||
radius: 5
|
||||
Layout.margins: 5
|
||||
Layout.alignment: Qt.AlignVCenter | Qt.AlignTop
|
||||
implicitWidth: menu.width - 2 * Layout.margins
|
||||
|
||||
RowLayout {
|
||||
width: parent.width
|
||||
Text {
|
||||
color: Pywal.colors.color0
|
||||
Layout.margins: 5
|
||||
Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter
|
||||
text: 'Notifications'
|
||||
}
|
||||
Button {
|
||||
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
||||
Layout.margins: 5
|
||||
implicitWidth: 20
|
||||
implicitHeight: 20
|
||||
|
||||
text: 'x'
|
||||
|
||||
onClicked: {
|
||||
while(server.trackedNotifications.values.length > 0) {
|
||||
server.trackedNotifications.values[0].dismiss()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
Layout.alignment: Qt.AlignVCenter | Qt.AlignTop
|
||||
Repeater {
|
||||
id: rep
|
||||
|
||||
model: server.trackedNotifications.values
|
||||
|
||||
Notif {
|
||||
required property int index
|
||||
src: rep.model[index]
|
||||
}
|
||||
|
||||
onItemAdded: (idx, it) => {
|
||||
button.text = ' ' + rep.count
|
||||
}
|
||||
|
||||
onItemRemoved: (idx, it) => {
|
||||
button.text = (rep.count - 1) <= 0 ? "" : ' ' + (rep.count - 1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
HyprlandFocusGrab {
|
||||
id: grab
|
||||
windows: [ menu ]
|
||||
onCleared: menu.visible = false
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user