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 {} } }