diff --git a/applet/contents/config/main.xml b/applet/contents/config/main.xml
--- a/applet/contents/config/main.xml
+++ b/applet/contents/config/main.xml
@@ -6,8 +6,8 @@
-
- 100
+
+ false
5
diff --git a/applet/contents/ui/ConfigGeneral.qml b/applet/contents/ui/ConfigGeneral.qml
--- a/applet/contents/ui/ConfigGeneral.qml
+++ b/applet/contents/ui/ConfigGeneral.qml
@@ -27,7 +27,6 @@
import org.kde.plasma.private.volume 0.1
Kirigami.FormLayout {
- property alias cfg_maximumVolume: maximumVolume.value
property alias cfg_volumeStep: volumeStep.value
property alias cfg_volumeFeedback: volumeFeedback.checked
property alias cfg_outputChangeOsd: outputChangeOsd.checked
@@ -37,23 +36,6 @@
}
- QQC2.SpinBox {
- id: maximumVolume
-
- Kirigami.FormData.label: i18n("Maximum volume:")
-
- from: 10
- to: 150
- stepSize: 1
- editable: true
- textFromValue: function(value) {
- return value + "%";
- }
- valueFromText: function(text) {
- return parseInt(text);
- }
- }
-
QQC2.SpinBox {
id: volumeStep
implicitWidth: maximumVolume.width
diff --git a/applet/contents/ui/ListItemBase.qml b/applet/contents/ui/ListItemBase.qml
--- a/applet/contents/ui/ListItemBase.qml
+++ b/applet/contents/ui/ListItemBase.qml
@@ -184,12 +184,12 @@
// changes trigger volume changes trigger value changes.
property int volume: Volume
property bool ignoreValueChange: true
- property bool forceRaiseMaxVolume: false
- readonly property bool raiseMaxVolume: forceRaiseMaxVolume || volume >= PulseAudio.NormalVolume * 1.01
+ readonly property bool forceRaiseMaxVolume: (raiseMaximumVolume.checked && (type === "sink" || type === "source"))
+ || volume >= PulseAudio.NormalVolume * 1.01
Layout.fillWidth: true
minimumValue: PulseAudio.MinimalVolume
- maximumValue: raiseMaxVolume ? PulseAudio.MaximalVolume : PulseAudio.NormalVolume
+ maximumValue: forceRaiseMaxVolume ? PulseAudio.MaximalVolume : PulseAudio.NormalVolume
stepSize: maximumValue / (maximumValue / PulseAudio.NormalVolume * 100.0)
visible: HasVolume
enabled: VolumeWritable
@@ -201,6 +201,15 @@
ignoreValueChange = false;
}
+ // TODO Should be in raiseMaximumVolume.onCheckChanged
+ // but have not find a way to access all devices's Volume, from paSinkModel and paSourceModel in main.qml
+ readonly property bool maxVolumeRaised: raiseMaximumVolume.checked
+ onMaxVolumeRaisedChanged: {
+ if (!raiseMaximumVolume.checked && Volume > PulseAudio.NormalVolume && (type === "sink" || type === "source")) {
+ Volume = PulseAudio.NormalVolume;
+ }
+ }
+
onVolumeChanged: {
var oldIgnoreValueChange = ignoreValueChange;
ignoreValueChange = true;
@@ -306,19 +315,6 @@
function loadDynamicActions() {
contextMenu.clearMenuItems();
- // Raise max volume
- menuItem = newMenuItem();
- menuItem.text = i18n("Raise maximum volume");
- menuItem.checkable = true;
- menuItem.checked = slider.forceRaiseMaxVolume;
- menuItem.clicked.connect(function() {
- slider.forceRaiseMaxVolume = !slider.forceRaiseMaxVolume;
- if (!slider.forceRaiseMaxVolume && Volume > PulseAudio.NormalVolume) {
- Volume = PulseAudio.NormalVolume;
- }
- });
- contextMenu.addMenuItem(menuItem);
-
// Switch all streams of the relevant kind to this device
if (type == "source") {
menuItem = newMenuItem();
diff --git a/applet/contents/ui/main.qml b/applet/contents/ui/main.qml
--- a/applet/contents/ui/main.qml
+++ b/applet/contents/ui/main.qml
@@ -34,7 +34,9 @@
id: main
property bool volumeFeedback: Plasmoid.configuration.volumeFeedback
- property int maxVolumeValue: Math.round(Plasmoid.configuration.maximumVolume * PulseAudio.NormalVolume / 100.0)
+ property int raiseMaxVolumeValue: 150
+ property int maxVolumeValue: Math.round(raiseMaxVolumeValue * PulseAudio.NormalVolume / 100.0)
+ property int currentMaxVolumeValue: plasmoid.configuration.raiseMaximumVolume ? maxVolumeValue : PulseAudio.NormalVolume
property int volumeStep: Math.round(Plasmoid.configuration.volumeStep * PulseAudio.NormalVolume / 100.0)
property string displayName: i18n("Audio Volume")
property QtObject draggedStream: null
@@ -70,7 +72,7 @@
}
function boundVolume(volume) {
- return Math.max(PulseAudio.MinimalVolume, Math.min(volume, maxVolumeValue));
+ return Math.max(PulseAudio.MinimalVolume, Math.min(volume, currentMaxVolumeValue));
}
function volumePercent(volume, max) {
@@ -85,7 +87,7 @@
return;
}
var volume = boundVolume(paSinkModel.preferredSink.volume + volumeStep);
- var percent = volumePercent(volume, maxVolumeValue);
+ var percent = volumePercent(volume, currentMaxVolumeValue);
paSinkModel.preferredSink.muted = percent == 0;
paSinkModel.preferredSink.volume = volume;
osd.show(percent);
@@ -97,7 +99,7 @@
return;
}
var volume = boundVolume(paSinkModel.preferredSink.volume - volumeStep);
- var percent = volumePercent(volume, maxVolumeValue);
+ var percent = volumePercent(volume, currentMaxVolumeValue);
paSinkModel.preferredSink.muted = percent == 0;
paSinkModel.preferredSink.volume = volume;
osd.show(percent);
@@ -110,7 +112,7 @@
}
var toMute = !paSinkModel.preferredSink.muted;
paSinkModel.preferredSink.muted = toMute;
- osd.show(toMute ? 0 : volumePercent(paSinkModel.preferredSink.volume, maxVolumeValue));
+ osd.show(toMute ? 0 : volumePercent(paSinkModel.preferredSink.volume, currentMaxVolumeValue));
if (!toMute) {
playFeedback();
}
@@ -344,6 +346,14 @@
}
}
+ PlasmaComponents.CheckBox {
+ id: raiseMaximumVolume
+ Layout.alignment: Qt.AlignBottom
+ tooltip: i18n("Raise maximum volume to %1%.\nCan distort sound, if volume is already high.", raiseMaxVolumeValue)
+ checked: plasmoid.configuration.raiseMaximumVolume
+ onCheckedChanged: plasmoid.configuration.raiseMaximumVolume = checked
+ }
+
PlasmaComponents.ToolButton {
Layout.alignment: Qt.AlignBottom
tooltip: plasmoid.action("configure").text