launcher: list item interactivity

This commit is contained in:
2 * r + 2 * t 2025-05-02 22:23:15 +10:00
parent bbe650e327
commit 1ec02cb54e
4 changed files with 63 additions and 4 deletions

View file

@ -1,4 +1,5 @@
import "root:/widgets"
import "root:/services"
import "root:/config"
import Quickshell
import Quickshell.Widgets
@ -8,11 +9,19 @@ PaddedRect {
id: root
required property DesktopEntry modelData
required property Scope launcher
implicitWidth: ListView.view.width
padding: [Appearance.padding.smaller, Appearance.padding.normal]
radius: Appearance.rounding.normal
// color: ListView.isCurrentItem ? Appearance.alpha(Appearance.colours.m3surfaceContainerHighest, true) : "transparent"
StateLayer {
radius: Appearance.rounding.normal
function onClicked(): void {
Apps.launch(root.modelData);
root.launcher.launcherVisible = false;
}
}
IconImage {
id: icon

View file

@ -48,7 +48,9 @@ Item {
anchors.bottom: parent.bottom
anchors.margins: root.padding
delegate: AppItem {}
delegate: AppItem {
launcher: root.launcher
}
ScrollBar.vertical: StyledScrollBar {
// Move half out

View file

@ -35,8 +35,11 @@ Singleton {
Process {
required property DesktopEntry entry
running: true
command: ["app2unit", "--", `${entry.id}.desktop`]
Component.onCompleted: {
startDetached();
destroy();
}
}
}
}

45
widgets/StateLayer.qml Normal file
View file

@ -0,0 +1,45 @@
import "root:/widgets"
import "root:/config"
import QtQuick
Rectangle {
id: root
function onClicked(event: MouseEvent): void {
}
anchors.fill: parent
color: Appearance.colours.m3onSurface
opacity: mouse.pressed ? 0.1 : mouse.hovered ? 0.08 : 0
MouseArea {
id: mouse
property bool hovered
anchors.fill: parent
hoverEnabled: true
onEntered: hovered = true
onExited: hovered = false
onClicked: event => root.onClicked(event)
}
Behavior on opacity {
NumberAnimation {
duration: Appearance.anim.durations.smaller
easing.type: Easing.BezierSpline
easing.bezierCurve: Appearance.anim.curves.standard
}
}
Behavior on color {
ColorAnimation {
duration: Appearance.anim.durations.normal
easing.type: Easing.BezierSpline
easing.bezierCurve: Appearance.anim.curves.standard
}
}
}