1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-08-02 03:28:28 -04:00
Files
DankMaterialShell/quickshell/Modules/DankBar/Widgets/NotificationCenterButton.qml
T
2026-07-26 14:51:51 -04:00

82 lines
2.4 KiB
QML

import QtQuick
import qs.Common
import qs.Modules.Notifications.Center
import qs.Modules.Plugins
import qs.Widgets
BasePill {
id: root
property bool hasUnread: false
property bool isActive: false
content: Component {
Item {
implicitWidth: notifIcon.width
implicitHeight: root.widgetThickness - root.horizontalPadding * 2
DankIcon {
id: notifIcon
anchors.centerIn: parent
name: SessionData.doNotDisturb ? "notifications_off" : "notifications"
size: Theme.barIconSize(root.barThickness, -4, root.barConfig?.maximizeWidgetIcons, root.barConfig?.iconScale)
color: SessionData.doNotDisturb ? Theme.primary : (root.isActive ? Theme.primary : Theme.widgetIconColor)
}
Rectangle {
width: 6
height: 6
radius: 3
color: Theme.error
anchors.right: notifIcon.right
anchors.top: notifIcon.top
visible: root.hasUnread
}
}
}
onRightClicked: {
const screen = root.parentScreen || Screen;
if (!screen)
return;
const isVertical = root.axis?.isVertical ?? false;
const edge = root.axis?.edge ?? "top";
const gap = Math.max(Theme.spacingXS, root.barSpacing ?? Theme.spacingXS);
const barOffset = root.barThickness + root.barSpacing + gap;
const localPos = root.visualContent.mapToItem(null, root.visualContent.width / 2, root.visualContent.height / 2);
let anchorX;
let anchorY;
if (isVertical) {
anchorX = edge === "left" ? barOffset : screen.width - barOffset;
anchorY = localPos.y;
} else {
anchorX = localPos.x;
anchorY = edge === "bottom" ? screen.height - barOffset : barOffset;
}
dndPopupLoader.active = true;
const popup = dndPopupLoader.item;
if (!popup)
return;
popup.showAt(anchorX, anchorY, isVertical, edge, screen);
}
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.MiddleButton
onPressed: mouse => {
root.triggerRipple(this, mouse.x, mouse.y);
SessionData.setDoNotDisturb(!SessionData.doNotDisturb);
}
}
Loader {
id: dndPopupLoader
active: false
sourceComponent: DndDurationPopup {}
}
}