quickshell-toki-night/modules/bar/modules/Tray.qml

92 lines
2.3 KiB
QML

pragma ComponentBehavior: Bound
import QtQuick
import Quickshell
import Quickshell.Widgets
import Quickshell.Services.SystemTray
import qs.config
import qs.custom
Item {
id: root
clip: true
anchors.verticalCenter: parent.verticalCenter
implicitWidth: layout.implicitWidth
implicitHeight: layout.implicitHeight
// To avoid warnings about being visible with no size
visible: width > 0 && height > 0
readonly property Item repeater: repeater
Row {
id: layout
add: Transition {
Anim {
property: "scale"
from: 0
to: 1
easing.bezierCurve: Config.anim.curves.standardDecel
}
}
move: Transition {
Anim {
property: "scale"
to: 1
easing.bezierCurve: Config.anim.curves.standardDecel
}
Anim {
properties: "x,y"
easing.bezierCurve: Config.anim.curves.standard
}
}
Repeater {
id: repeater
model: SystemTray.items
MouseArea {
id: trayItem
required property SystemTrayItem modelData
implicitWidth: icon.implicitWidth + 10
implicitHeight: icon.implicitHeight
onClicked: modelData.activate()
IconImage {
id: icon
anchors.centerIn: parent
source: {
let icon = trayItem.modelData.icon;
if (icon.includes("?path=")) {
const [name, path] = icon.split("?path=");
icon = `file://${path}/${name.slice(name.lastIndexOf("/") + 1)}`;
}
return icon;
}
asynchronous: true
implicitSize: Config.font.size.larger
}
}
}
}
Behavior on implicitWidth {
Anim {
easing.bezierCurve: Config.anim.curves.emphasized
}
}
Behavior on implicitHeight {
Anim {
easing.bezierCurve: Config.anim.curves.emphasized
}
}
}