diff --git a/MonitorControl/Display.swift b/MonitorControl/Display.swift
index 7931184..40a7b42 100644
--- a/MonitorControl/Display.swift
+++ b/MonitorControl/Display.swift
@@ -21,6 +21,7 @@ class Display {
self.name = name
self.isEnabled = isEnabled
self.ddc = DDC(for: identifier)
+ self.isMuted = self.getValue(for: .audioMuteScreenBlank) == 1
}
// On some displays, the display's OSD overlaps the macOS OSD,
@@ -35,22 +36,32 @@ class Display {
}
}
- func mute() {
+ func mute(forceVolume: Int? = nil) {
var value = 0
- if self.isMuted {
- value = self.getValue(for: DDC.Command.audioSpeakerVolume)
+
+ if self.isMuted, forceVolume == nil || forceVolume! > 0 {
+ value = forceVolume ?? self.getValue(for: .audioSpeakerVolume)
+ self.saveValue(value, for: .audioSpeakerVolume)
+
self.isMuted = false
- } else {
+ } else if !self.isMuted, forceVolume == nil || forceVolume == 0 {
self.isMuted = true
}
DispatchQueue.global(qos: .userInitiated).async {
- guard self.ddc?.write(command: .audioSpeakerVolume, value: UInt16(value), errorRecoveryWaitTime: self.hideOsd ? 0 : nil) == true else {
+ let muteValue = self.isMuted ? 1 : 2
+ guard self.ddc?.write(command: .audioMuteScreenBlank, value: UInt16(muteValue), errorRecoveryWaitTime: self.hideOsd ? 0 : nil) == true else {
+ self.setVolume(to: value)
return
}
- self.hideDisplayOsd()
- self.showOsd(command: .audioSpeakerVolume, value: value)
+ if forceVolume == nil || forceVolume == 0 {
+ self.hideDisplayOsd()
+ self.showOsd(command: .audioSpeakerVolume, value: value)
+ self.playVolumeChangedSound()
+ }
+
+ self.saveValue(muteValue, for: .audioMuteScreenBlank)
}
if let slider = volumeSliderHandler?.slider {
@@ -59,8 +70,11 @@ class Display {
}
func setVolume(to value: Int) {
- if value > 0 {
- self.isMuted = false
+ if value > 0, self.isMuted {
+ self.mute(forceVolume: value)
+ } else if value == 0 {
+ self.mute(forceVolume: 0)
+ return
}
DispatchQueue.global(qos: .userInitiated).async {
diff --git a/MonitorControl/Info.plist b/MonitorControl/Info.plist
index bc3049e..4f1f672 100644
--- a/MonitorControl/Info.plist
+++ b/MonitorControl/Info.plist
@@ -19,7 +19,7 @@
CFBundleShortVersionString
1.5.2
CFBundleVersion
- 515
+ 516
LSApplicationCategoryType
public.app-category.utilities
LSMinimumSystemVersion
diff --git a/MonitorControlHelper/Info.plist b/MonitorControlHelper/Info.plist
index c5e87d5..ef32104 100644
--- a/MonitorControlHelper/Info.plist
+++ b/MonitorControlHelper/Info.plist
@@ -19,7 +19,7 @@
CFBundleShortVersionString
1.5.2
CFBundleVersion
- 515
+ 516
LSApplicationCategoryType
public.app-category.utilities
LSBackgroundOnly