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 @@ -7,7 +7,7 @@ - 100 + 150 5 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 @@ -185,11 +185,11 @@ property int volume: Volume property bool ignoreValueChange: true property bool forceRaiseMaxVolume: maxVolumeList.indexOf(maxVolumeTarget) != -1 - readonly property bool raiseMaxVolume: forceRaiseMaxVolume || volume >= PulseAudio.NormalVolume * 1.01 + readonly property int expectedValue: forceRaiseMaxVolume ? maxVolumeValue : PulseAudio.NormalVolume Layout.fillWidth: true minimumValue: PulseAudio.MinimalVolume - maximumValue: raiseMaxVolume ? PulseAudio.MaximalVolume : PulseAudio.NormalVolume + maximumValue: volume >= expectedValue * 1.01 ? PulseAudio.MaximalVolume : expectedValue stepSize: maximumValue / (maximumValue / PulseAudio.NormalVolume * 100.0) visible: HasVolume enabled: VolumeWritable 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 @@ -43,6 +43,18 @@ // DEFAULT_SINK_NAME in module-always-sink.c readonly property string dummyOutputName: "auto_null" + property int preferredSinkMaxVolume: { + var port = paSinkModel.preferredSink.ports[paSinkModel.preferredSink.activePortIndex]; + var maxVolumeTarget = port ? port.description + " (" + paSinkModel.preferredSink.description + ")" + : paSinkModel.preferredSink.description; + + if (maxVolumeList.indexOf(maxVolumeTarget) == -1) { + return PulseAudio.NormalVolume; + } else { + return maxVolumeValue; + } + } + Layout.minimumHeight: units.gridUnit * 18 Layout.minimumWidth: units.gridUnit * 18 Layout.preferredHeight: units.gridUnit * 20 @@ -70,8 +82,11 @@ return output && output.name === dummyOutputName; } - function boundVolume(volume) { - return Math.max(PulseAudio.MinimalVolume, Math.min(volume, maxVolumeValue)); + function boundVolume(volume, max) { + if (!max) { + max = maxVolumeValue; + } + return Math.max(PulseAudio.MinimalVolume, Math.min(volume, max)); } function volumePercent(volume, max) { @@ -85,8 +100,8 @@ if (!paSinkModel.preferredSink || isDummyOutput(paSinkModel.preferredSink)) { return; } - var volume = boundVolume(paSinkModel.preferredSink.volume + volumeStep); - var percent = volumePercent(volume, maxVolumeValue); + var volume = boundVolume(paSinkModel.preferredSink.volume + volumeStep, preferredSinkMaxVolume); + var percent = volumePercent(volume, preferredSinkMaxVolume); paSinkModel.preferredSink.muted = percent == 0; paSinkModel.preferredSink.volume = volume; osd.show(percent); @@ -97,8 +112,8 @@ if (!paSinkModel.preferredSink || isDummyOutput(paSinkModel.preferredSink)) { return; } - var volume = boundVolume(paSinkModel.preferredSink.volume - volumeStep); - var percent = volumePercent(volume, maxVolumeValue); + var volume = boundVolume(paSinkModel.preferredSink.volume - volumeStep, preferredSinkMaxVolume); + var percent = volumePercent(volume, preferredSinkMaxVolume); paSinkModel.preferredSink.muted = percent == 0; paSinkModel.preferredSink.volume = volume; osd.show(percent); @@ -111,7 +126,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, preferredSinkMaxVolume)); if (!toMute) { playFeedback(); }