From 24816fb0d96bef5e3905495be817cb75da405441 Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Mon, 8 Jun 2026 16:05:32 +1000 Subject: [PATCH] fix: only update media position on slider release --- components/controls/StyledSlider.qml | 5 ++++- modules/dashboard/media/Details.qml | 12 ++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/components/controls/StyledSlider.qml b/components/controls/StyledSlider.qml index 751b7586..e2597e62 100644 --- a/components/controls/StyledSlider.qml +++ b/components/controls/StyledSlider.qml @@ -16,6 +16,8 @@ Slider { property real waveFrequency: 6 property int waveDuration: 1000 property int radius: Tokens.rounding.medium + property bool interactionOnMove: true + readonly property bool dragging: mouse.pressed property color fgColour: enabled ? Colours.palette.m3primary : Qt.alpha(Colours.palette.m3onSurface, 0.38) property color bgColour: enabled ? Colours.palette.m3secondaryContainer : Qt.alpha(Colours.palette.m3onSurface, 0.1) @@ -171,7 +173,8 @@ Slider { } onPositionChanged: e => { dragMovement = (e.x - pressStartX) / width; - root.interaction(posBinding.value); + if (root.interactionOnMove) + root.interaction(posBinding.value); } onReleased: e => { root.interaction(posBinding.value); diff --git a/modules/dashboard/media/Details.qml b/modules/dashboard/media/Details.qml index 2e15a7b0..5288efbe 100644 --- a/modules/dashboard/media/Details.qml +++ b/modules/dashboard/media/Details.qml @@ -72,6 +72,8 @@ ColumnLayout { } StyledText { + id: positionLabel + Layout.preferredWidth: timeMetrics.width text: root.lengthStr(Players.active?.position ?? -1) color: Colours.palette.m3onSurfaceVariant @@ -80,6 +82,8 @@ ColumnLayout { } StyledSlider { + id: positionSlider + Layout.fillWidth: true value: Players.active ? Players.active.position / (Players.active.length || 1) : 0 enabled: Players.active?.canSeek ?? false @@ -87,11 +91,19 @@ ColumnLayout { animateWave: Players.active?.isPlaying ?? false waveFrequency: 5 waveDuration: 2000 + interactionOnMove: false onInteraction: value => { const active = Players.active; if (active?.canSeek && active?.positionSupported) active.position = value * active.length; } + + Binding { + target: positionLabel + property: "text" + value: root.lengthStr(positionSlider.pos * (Players.active?.length ?? 0)) + when: positionSlider.dragging + } } StyledText {