Merge pull request #226 from Ebullioscopic/ui/fixes

Fix: Individual disable HUDs
This commit is contained in:
Hariharan Mudaliar 2026-01-02 12:31:43 +05:30 • committed by GitHub
commit ea6e9e6117
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 48 additions and 13 deletions

View file

@ -1302,6 +1302,9 @@ private struct HUDAndOSDSettingsView: View {
@Default(.enableVerticalHUD) var enableVerticalHUD
@Default(.enableCircularHUD) var enableCircularHUD
@Default(.verticalHUDPosition) var verticalHUDPosition
@Default(.enableVolumeHUD) var enableVolumeHUD
@Default(.enableBrightnessHUD) var enableBrightnessHUD
@Default(.enableKeyboardBacklightHUD) var enableKeyboardBacklightHUD
// Vertical HUD Props
@Default(.verticalHUDShowValue) var verticalHUDShowValue
@ -1531,6 +1534,20 @@ private struct HUDAndOSDSettingsView: View {
}
}
if accessibilityPermission.isAuthorized {
Section {
Toggle("Volume HUD", isOn: $enableVolumeHUD)
Toggle("Brightness HUD", isOn: $enableBrightnessHUD)
Toggle("Keyboard Backlight HUD", isOn: $enableKeyboardBacklightHUD)
} header: {
Text("Controls")
} footer: {
Text("Choose which system controls should display HUD notifications.")
.foregroundStyle(.secondary)
.font(.caption)
}
}
Section {
Toggle("Show Percentage", isOn: $verticalHUDShowValue)
Toggle("Use Accent Color", isOn: $verticalHUDUseAccentColor)
@ -1599,6 +1616,20 @@ private struct HUDAndOSDSettingsView: View {
}
}
if accessibilityPermission.isAuthorized {
Section {
Toggle("Volume HUD", isOn: $enableVolumeHUD)
Toggle("Brightness HUD", isOn: $enableBrightnessHUD)
Toggle("Keyboard Backlight HUD", isOn: $enableKeyboardBacklightHUD)
} header: {
Text("Controls")
} footer: {
Text("Choose which system controls should display HUD notifications.")
.foregroundStyle(.secondary)
.font(.caption)
}
}
Section {
Toggle("Show Percentage", isOn: $circularHUDShowValue)
Toggle("Use Accent Color", isOn: $circularHUDUseAccentColor)

View file

@ -182,7 +182,7 @@ final class SystemChangesObserver: MediaKeyInterceptorDelegate {
}
// Send to Circular HUD if enabled
if Defaults[.enableCircularHUD] {
if Defaults[.enableCircularHUD] && Defaults[.enableVolumeHUD] {
Task { @MainActor in
CircularHUDWindowManager.shared.show(type: .volume, value: CGFloat(value))
}
@ -190,7 +190,7 @@ final class SystemChangesObserver: MediaKeyInterceptorDelegate {
}
// Send to Vertical HUD if enabled
if Defaults[.enableVerticalHUD] {
if Defaults[.enableVerticalHUD] && Defaults[.enableVolumeHUD] {
let icon = resolvedVolumeIcon(isMuted: isMuted)
VerticalHUDWindowManager.shared.show(type: .volume, value: CGFloat(value), icon: icon)
return
@ -228,7 +228,7 @@ final class SystemChangesObserver: MediaKeyInterceptorDelegate {
private func sendBrightnessNotification(value: Float) {
// Send to Circular HUD if enabled
if Defaults[.enableCircularHUD] {
if Defaults[.enableCircularHUD] && Defaults[.enableBrightnessHUD] {
Task { @MainActor in
CircularHUDWindowManager.shared.show(type: .brightness, value: CGFloat(value))
}
@ -236,7 +236,7 @@ final class SystemChangesObserver: MediaKeyInterceptorDelegate {
}
// Send to Vertical HUD if enabled
if Defaults[.enableVerticalHUD] {
if Defaults[.enableVerticalHUD] && Defaults[.enableBrightnessHUD] {
Task { @MainActor in
VerticalHUDWindowManager.shared.show(type: .brightness, value: CGFloat(value))
}
@ -266,7 +266,7 @@ final class SystemChangesObserver: MediaKeyInterceptorDelegate {
private func sendKeyboardBacklightNotification(value: Float) {
// Send to Circular HUD if enabled
if Defaults[.enableCircularHUD] {
if Defaults[.enableCircularHUD] && Defaults[.enableKeyboardBacklightHUD] {
Task { @MainActor in
CircularHUDWindowManager.shared.show(type: .backlight, value: CGFloat(value))
}
@ -274,7 +274,7 @@ final class SystemChangesObserver: MediaKeyInterceptorDelegate {
}
// Send to Vertical HUD if enabled
if Defaults[.enableVerticalHUD] {
if Defaults[.enableVerticalHUD] && Defaults[.enableKeyboardBacklightHUD] {
Task { @MainActor in
VerticalHUDWindowManager.shared.show(type: .backlight, value: CGFloat(value))
}

View file

@ -98,7 +98,7 @@ class SystemHUDManager {
// Observe individual HUD toggles
Defaults.publisher(.enableVolumeHUD, options: []).sink { [weak self] change in
guard let self = self, self.isSetupComplete, Defaults[.enableSystemHUD] else {
guard let self = self, self.isSetupComplete, self.requiresSystemToggleHandling else {
return
}
self.changesObserver?.update(
@ -109,7 +109,7 @@ class SystemHUDManager {
}.store(in: &cancellables)
Defaults.publisher(.enableBrightnessHUD, options: []).sink { [weak self] change in
guard let self = self, self.isSetupComplete, Defaults[.enableSystemHUD] else {
guard let self = self, self.isSetupComplete, self.requiresSystemToggleHandling else {
return
}
self.changesObserver?.update(
@ -120,7 +120,7 @@ class SystemHUDManager {
}.store(in: &cancellables)
Defaults.publisher(.enableKeyboardBacklightHUD, options: []).sink { [weak self] change in
guard let self = self, self.isSetupComplete, Defaults[.enableSystemHUD] else {
guard let self = self, self.isSetupComplete, self.requiresSystemToggleHandling else {
return
}
self.changesObserver?.update(
@ -167,6 +167,10 @@ class SystemHUDManager {
private var cancellables = Set<AnyCancellable>()
private var requiresSystemToggleHandling: Bool {
Defaults[.enableSystemHUD] || Defaults[.enableVerticalHUD] || Defaults[.enableCircularHUD]
}
/// Public property to check if system operations are in progress
var isOperationInProgress: Bool {
return isSystemOperationInProgress
@ -206,10 +210,10 @@ class SystemHUDManager {
let keyboardBacklightEnabled: Bool
if Defaults[.enableCircularHUD] || Defaults[.enableVerticalHUD] {
// Vertical and Circular HUD support all events
volumeEnabled = true
brightnessEnabled = true
keyboardBacklightEnabled = true
// Respect per-control toggles so the system HUD can handle disabled events
volumeEnabled = Defaults[.enableVolumeHUD]
brightnessEnabled = Defaults[.enableBrightnessHUD]
keyboardBacklightEnabled = Defaults[.enableKeyboardBacklightHUD]
} else if Defaults[.enableCustomOSD] {
volumeEnabled = Defaults[.enableOSDVolume]
brightnessEnabled = Defaults[.enableOSDBrightness]