92 lines
2.3 KiB
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
|
|
}
|
|
}
|
|
}
|