Files
QtPotato/src/qml/VolumeSlider.qml
T
tri 0098641425 fix(ui): keep Space for playback after mouse clicks
Controls take focus only via Tab, so a click leaves Space for playback.
2026-11-11 20:12:06 +07:00

48 lines
1.6 KiB
QML

// SPDX-FileCopyrightText: 2020 George Florea Bănuș <georgefb899@gmail.com>
// SPDX-FileCopyrightText: 2026 Tri Vo Khac
// SPDX-License-Identifier: GPL-3.0-or-later
import QtQuick
import QtQuick.Controls
import org.kde.kirigami as Kirigami
import org.kde.ki18n
// Use the desktop style's handle and hover/focus feedback.
Slider {
id: root
required property MpvItem mpv
Accessible.name: KI18n.i18nc("@label:slider", "Volume")
Accessible.description: root.mpv.mute ? KI18n.i18nc("@info volume muted", "Muted") : KI18n.i18nc("@info volume percentage", "%1%", Math.round(value))
from: 0
to: root.mpv.volumeMax
implicitWidth: Kirigami.Units.gridUnit * 5
wheelEnabled: true
stepSize: QtPotatoSettings.volumeStep
focusPolicy: Qt.TabFocus
// Let the Slider consume navigation keys before window playback shortcuts.
Keys.onShortcutOverride: event => {
if (event.modifiers === Qt.NoModifier && [Qt.Key_Left, Qt.Key_Right, Qt.Key_Up, Qt.Key_Down, Qt.Key_Home, Qt.Key_End].includes(event.key)) {
event.accepted = true
}
}
Keys.onPressed: event => {
if (event.modifiers === Qt.NoModifier && (event.key === Qt.Key_Home || event.key === Qt.Key_End)) {
value = event.key === Qt.Key_Home ? from : to
moved()
event.accepted = true
}
}
onMoved: root.mpv.volume = Math.round(value)
// Follow mpv, but not while the user drags.
Binding on value {
value: root.mpv.volume
when: !root.pressed
restoreMode: Binding.RestoreNone
}
}