mirror of
https://invent.kde.org/marcoa/shift-shell.git
synced 2026-04-29 15:03:09 +00:00
quicksettings/audio: Fix displayed volume fetching
Fixes https://invent.kde.org/plasma/plasma-mobile/-/issues/422 This commit simplifies the AudioInfo data provider to fetch the volume directly, rather than relying on a series of complicated connections. It also does some cleanup of AudioInfo, removing unused functions.
This commit is contained in:
parent
0e09a434ef
commit
082323baa8
2 changed files with 7 additions and 70 deletions
|
|
@ -32,57 +32,13 @@ QtObject {
|
||||||
// the maximum volume amount
|
// the maximum volume amount
|
||||||
readonly property int maxVolumeValue: maxVolumePercent * PulseAudio.NormalVolume / 100
|
readonly property int maxVolumeValue: maxVolumePercent * PulseAudio.NormalVolume / 100
|
||||||
|
|
||||||
// step that increments when adjusting the volume
|
|
||||||
readonly property int volumeStep: Math.round(5 * PulseAudio.NormalVolume / 100.0)
|
|
||||||
|
|
||||||
// The current audio volume (updated by connecting to sinks)
|
// The current audio volume (updated by connecting to sinks)
|
||||||
property int volumeValue
|
readonly property int volumeValue: PreferredDevice.sink ? (PreferredDevice.sink.volume / PulseAudio.NormalVolume) * 100 : 0
|
||||||
|
|
||||||
function isDummyOutput(output) {
|
function isDummyOutput(output) {
|
||||||
return output && output.name === dummyOutputName;
|
return output && output.name === dummyOutputName;
|
||||||
}
|
}
|
||||||
|
|
||||||
function boundVolume(volume) {
|
|
||||||
return Math.max(PulseAudio.MinimalVolume, Math.min(volume, maxVolumeValue));
|
|
||||||
}
|
|
||||||
|
|
||||||
function volumePercent(volume, max){
|
|
||||||
if (!max) {
|
|
||||||
max = PulseAudio.NormalVolume;
|
|
||||||
}
|
|
||||||
return Math.round(volume / max * maxVolumePercent);
|
|
||||||
}
|
|
||||||
|
|
||||||
function increaseVolume() {
|
|
||||||
if (!PreferredDevice.sink || isDummyOutput(PreferredDevice.sink)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var volume = boundVolume(PreferredDevice.sink.volume + volumeStep);
|
|
||||||
var percent = volumePercent(volume, maxVolumeValue);
|
|
||||||
PreferredDevice.sink.muted = percent == 0;
|
|
||||||
PreferredDevice.sink.volume = volume;
|
|
||||||
}
|
|
||||||
|
|
||||||
function decreaseVolume() {
|
|
||||||
if (!PreferredDevice.sink || isDummyOutput(PreferredDevice.sink)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var volume = boundVolume(PreferredDevice.sink.volume - volumeStep);
|
|
||||||
var percent = volumePercent(volume, maxVolumeValue);
|
|
||||||
PreferredDevice.sink.muted = percent == 0;
|
|
||||||
PreferredDevice.sink.volume = volume;
|
|
||||||
}
|
|
||||||
|
|
||||||
function muteVolume() {
|
|
||||||
if (!PreferredDevice.sink || isDummyOutput(PreferredDevice.sink)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
PreferredDevice.sink.muted = !PreferredDevice.sink.muted;
|
|
||||||
}
|
|
||||||
|
|
||||||
function iconName(volume, muted, prefix) {
|
function iconName(volume, muted, prefix) {
|
||||||
if (!prefix) {
|
if (!prefix) {
|
||||||
prefix = "audio-volume";
|
prefix = "audio-volume";
|
||||||
|
|
@ -100,28 +56,4 @@ QtObject {
|
||||||
}
|
}
|
||||||
return icon;
|
return icon;
|
||||||
}
|
}
|
||||||
|
|
||||||
property var updateVolume: Connections {
|
|
||||||
target: root.paSinkModel ? (PreferredDevice.sink ? PreferredDevice.sink : null) : null
|
|
||||||
enabled: target !== null
|
|
||||||
|
|
||||||
function onVolumeChanged() {
|
|
||||||
root.volumeValue = root.volumePercent(PreferredDevice.sink.volume, root.maxVolumeValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
function onMutedChanged() {
|
|
||||||
root.volumeValue = PreferredDevice.sink.muted ? 0 : root.volumePercent(PreferredDevice.sink.volume, root.maxVolumeValue);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
property var updateVolumeOnSinkChange: Connections {
|
|
||||||
target: root.paSinkModel ? root.paSinkModel : null
|
|
||||||
enabled: target !== null
|
|
||||||
|
|
||||||
function onPreferredSinkChanged() {
|
|
||||||
if (PreferredDevice.sink) {
|
|
||||||
root.volumeValue = root.volumePercent(PreferredDevice.sink.volume, root.maxVolumeValue);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,12 @@ import org.kde.plasma.private.mobileshell.quicksettingsplugin as QS
|
||||||
QS.QuickSetting {
|
QS.QuickSetting {
|
||||||
text: i18n("Sound")
|
text: i18n("Sound")
|
||||||
icon: MobileShell.AudioInfo.icon
|
icon: MobileShell.AudioInfo.icon
|
||||||
status: i18n("%1%", MobileShell.AudioInfo.volumeValue)
|
status: {
|
||||||
|
if (!MobileShell.AudioInfo.isVisible) {
|
||||||
|
return i18n("No audio devices");
|
||||||
|
}
|
||||||
|
return i18n("%1%", MobileShell.AudioInfo.volumeValue);
|
||||||
|
}
|
||||||
enabled: false
|
enabled: false
|
||||||
settingsCommand: "plasma-open-settings kcm_pulseaudio"
|
settingsCommand: "plasma-open-settings kcm_pulseaudio"
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue