Files
quickshell/modules/bar/widgets/BarPopup.qml
T
2026-06-15 23:30:42 +02:00

83 lines
2.0 KiB
QML

import QtQuick
import Quickshell
import "../../../config"
PopupWindow {
id: popup
property Item anchorItem
property bool anchorHovered: false
property int popupWidth: 300
property int popupVerticalOffset: 0
default property alias content: contentColumn.data
visible: false
color: "transparent"
// width: popupWidth
// height: background.height
onAnchorHoveredChanged: popup.updateVisibility()
function updateVisibility() {
if (anchorHovered || mouseArea.containsMouse) {
closeTimer.stop()
visible = true
} else {
closeTimer.restart()
}
}
Timer {
id: closeTimer
interval: 1
onTriggered: {
if (!anchorHovered && !mouseArea.containsMouse) {
visible = false
}
}
}
anchor {
item: anchorItem
edges: Edges.Top | Edges.Left
gravity: Edges.Bottom | Edges.Right
adjustment: PopupAdjustment.FlipY | PopupAdjustment.SlideX
onAnchoring: {
anchor.rect.x = (anchorItem.width - popup.width) / 2
anchor.rect.y = anchorItem.height + popupVerticalOffset
}
}
MouseArea {
id: mouseArea
anchors.fill: parent
hoverEnabled: true
onContainsMouseChanged: popup.updateVisibility()
Rectangle {
id: background
width: parent.width
height: contentColumn.implicitHeight + 2 * 12
color: Qt.alpha(Colors.primaryContainer, 0.9)
radius: 12
border {
color: Colors.primaryContainer_fg
width: Config.border_width
}
Column {
id: contentColumn
height: implicitHeight
anchors {
top: parent.top
left: parent.left
right: parent.right
margins: 12
}
spacing: Config.small_spacing_fun(24)
}
}
}
}