From ec70bddf535eb108b32ec6379737c3986d646c63 Mon Sep 17 00:00:00 2001
From: waydabber <37590873+waydabber@users.noreply.github.com>
Date: Fri, 13 Aug 2021 17:44:27 +0200
Subject: [PATCH] Partial fix for incompatibility with Custom ColorSync
Profiles.
---
MonitorControl/AppDelegate.swift | 18 ++++---
MonitorControl/Info.plist | 4 +-
MonitorControl/Manager/DisplayManager.swift | 10 ++--
MonitorControl/Model/Display.swift | 7 ++-
MonitorControl/UI/Base.lproj/Main.storyboard | 53 ++++++++++++-------
.../AdvancedPrefsViewController.swift | 2 -
.../MainPrefsViewController.swift | 3 +-
MonitorControlHelper/Info.plist | 4 +-
8 files changed, 62 insertions(+), 39 deletions(-)
diff --git a/MonitorControl/AppDelegate.swift b/MonitorControl/AppDelegate.swift
index 5f4c0e6..ac70c6b 100644
--- a/MonitorControl/AppDelegate.swift
+++ b/MonitorControl/AppDelegate.swift
@@ -60,7 +60,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
func applicationWillTerminate(_: Notification) {
os_log("Goodbye!", type: .info)
- DisplayManager.shared.resetSwBrightness()
+ DisplayManager.shared.resetSwBrightnessForAllDisplays()
self.statusItem.isVisible = true
}
@@ -114,7 +114,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
// externalDisplay.arm64ddc = true
// }
if !serviceMatch.isDiscouraged {
- externalDisplay.arm64ddc = true // MARK: (point of interest when testing)
+ externalDisplay.arm64ddc = false // MARK: (point of interest when testing)
}
}
}
@@ -182,7 +182,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
}
}
}
- if CGDisplayIsBuiltin(onlineDisplayID) != 0 { // MARK: (point of interest for testing)
+ if false, CGDisplayIsBuiltin(onlineDisplayID) != 0 { // MARK: (point of interest for testing)
display = InternalDisplay(id, name: name, vendorNumber: vendorNumber, modelNumber: modelNumber, isVirtual: isVirtual)
} else {
display = ExternalDisplay(id, name: name, vendorNumber: vendorNumber, modelNumber: modelNumber, isVirtual: isVirtual)
@@ -190,9 +190,11 @@ class AppDelegate: NSObject, NSApplicationDelegate {
DisplayManager.shared.addDisplay(display: display)
}
if firstrun {
- DisplayManager.shared.resetSwBrightness()
+ DisplayManager.shared.resetSwBrightnessForAllDisplays(settingsOnly: true)
} else {
- DisplayManager.shared.restoreSwBrightness()
+ if prefs.bool(forKey: Utils.PrefKeys.fallbackSw.rawValue) || prefs.bool(forKey: Utils.PrefKeys.lowerSwAfterBrightness.rawValue) {
+ DisplayManager.shared.restoreSwBrightnessForAllDisplays()
+ }
}
self.updateArm64AVServices()
NotificationCenter.default.post(name: Notification.Name(Utils.PrefKeys.displayListUpdate.rawValue), object: nil)
@@ -422,7 +424,6 @@ extension AppDelegate: MediaKeyTapDelegate {
}
@objc func handleFallbackSwChanged() {
- DisplayManager.shared.resetSwBrightness()
self.updateDisplays()
}
@@ -432,10 +433,13 @@ extension AppDelegate: MediaKeyTapDelegate {
@objc func handlePreferenceReset() {
os_log("Resetting all preferences.")
+ if prefs.bool(forKey: Utils.PrefKeys.fallbackSw.rawValue) || prefs.bool(forKey: Utils.PrefKeys.lowerSwAfterBrightness.rawValue) {
+ DisplayManager.shared.resetSwBrightnessForAllDisplays()
+ }
if let bundleID = Bundle.main.bundleIdentifier {
UserDefaults.standard.removePersistentDomain(forName: bundleID)
}
- DisplayManager.shared.resetSwBrightness()
+ app.statusItem.isVisible = true
self.setDefaultPrefs()
self.checkPermissions()
self.updateMediaKeyTap()
diff --git a/MonitorControl/Info.plist b/MonitorControl/Info.plist
index cfb2c99..4891b38 100644
--- a/MonitorControl/Info.plist
+++ b/MonitorControl/Info.plist
@@ -19,7 +19,7 @@
CFBundleShortVersionString
$(MARKETING_VERSION)
CFBundleVersion
- 1980
+ 2075
LSApplicationCategoryType
public.app-category.utilities
LSMinimumSystemVersion
@@ -33,4 +33,4 @@
NSPrincipalClass
NSApplication
-
\ No newline at end of file
+
diff --git a/MonitorControl/Manager/DisplayManager.swift b/MonitorControl/Manager/DisplayManager.swift
index eae5403..2a819cd 100644
--- a/MonitorControl/Manager/DisplayManager.swift
+++ b/MonitorControl/Manager/DisplayManager.swift
@@ -71,10 +71,12 @@ class DisplayManager {
self.displays = []
}
- func resetSwBrightness() {
+ func resetSwBrightnessForAllDisplays(settingsOnly: Bool = false) {
for externalDisplay in self.getNonVirtualExternalDisplays() {
- guard externalDisplay.setSwBrightness(value: externalDisplay.getSwMaxBrightness()) else {
- continue
+ if !settingsOnly {
+ _ = externalDisplay.setSwBrightness(value: externalDisplay.getSwMaxBrightness())
+ } else {
+ externalDisplay.saveSwBirghtnessPrefValue(Int(externalDisplay.getSwMaxBrightness()))
}
if externalDisplay.isSw() {
externalDisplay.saveValue(Int(externalDisplay.getSwMaxBrightness()), for: .brightness)
@@ -82,7 +84,7 @@ class DisplayManager {
}
}
- func restoreSwBrightness() {
+ func restoreSwBrightnessForAllDisplays() {
for externalDisplay in self.getExternalDisplays() {
if externalDisplay.getValue(for: .brightness) == 0 || externalDisplay.isSw() {
// Out of caution we won't let it restore to complete darkness, not to interfere with login, etc. This is how Apple devices work as well.
diff --git a/MonitorControl/Model/Display.swift b/MonitorControl/Model/Display.swift
index b57ee03..705bacb 100644
--- a/MonitorControl/Model/Display.swift
+++ b/MonitorControl/Model/Display.swift
@@ -71,7 +71,8 @@ class Display {
func setSwBrightness(value: UInt8) -> Bool {
let brightnessValue: UInt8 = min(getSwMaxBrightness(), value)
- let floatValue = Float(Float(brightnessValue) / Float(self.getSwMaxBrightness()))
+ var floatValue = Float(Float(brightnessValue) / Float(self.getSwMaxBrightness()))
+ floatValue = floatValue * 0.95 + 0.05 // We don't allow decrease lower than 5% for safety reasons and because some displays blank off after a while on full screen black
if CGSetDisplayTransferByFormula(self.identifier, 0, floatValue, 1, 0, floatValue, 1, 0, floatValue, 1) == CGError.success {
self.saveSwBirghtnessPrefValue(Int(brightnessValue))
return true
@@ -96,6 +97,10 @@ class Display {
return self.getSwMaxBrightness()
}
+ func resetSwBrightness() -> Bool {
+ return self.setSwBrightness(value: self.getSwMaxBrightness())
+ }
+
func saveSwBirghtnessPrefValue(_ value: Int) {
self.prefs.set(value, forKey: "SwBrightness-\(self.identifier)")
}
diff --git a/MonitorControl/UI/Base.lproj/Main.storyboard b/MonitorControl/UI/Base.lproj/Main.storyboard
index fbe7f0d..d868055 100644
--- a/MonitorControl/UI/Base.lproj/Main.storyboard
+++ b/MonitorControl/UI/Base.lproj/Main.storyboard
@@ -1,6 +1,7 @@
+
@@ -301,17 +302,17 @@
-
+
-
-
+
+
-
+
@@ -324,6 +325,7 @@
+
@@ -336,7 +338,7 @@
-
+
@@ -346,7 +348,7 @@
-
+
diff --git a/MonitorControl/View Controllers/AdvancedPrefsViewController.swift b/MonitorControl/View Controllers/AdvancedPrefsViewController.swift
index 92967f5..19963ef 100644
--- a/MonitorControl/View Controllers/AdvancedPrefsViewController.swift
+++ b/MonitorControl/View Controllers/AdvancedPrefsViewController.swift
@@ -51,8 +51,6 @@ class AdvancedPrefsViewController: NSViewController, PreferencePane, NSTableView
if let window = self.view.window {
alert.beginSheetModal(for: window, completionHandler: { modalResponse in
if modalResponse == NSApplication.ModalResponse.alertFirstButtonReturn {
- DisplayManager.shared.resetSwBrightness()
- app.statusItem.isVisible = true
NotificationCenter.default.post(name: Notification.Name(Utils.PrefKeys.preferenceReset.rawValue), object: nil)
}
})
diff --git a/MonitorControl/View Controllers/MainPrefsViewController.swift b/MonitorControl/View Controllers/MainPrefsViewController.swift
index 80323db..fdd4bf6 100644
--- a/MonitorControl/View Controllers/MainPrefsViewController.swift
+++ b/MonitorControl/View Controllers/MainPrefsViewController.swift
@@ -119,7 +119,7 @@ class MainPrefsViewController: NSViewController, PreferencePane {
self.prefs.set(true, forKey: Utils.PrefKeys.lowerSwAfterBrightness.rawValue)
case .off:
self.prefs.set(false, forKey: Utils.PrefKeys.lowerSwAfterBrightness.rawValue)
- DisplayManager.shared.resetSwBrightness()
+ DisplayManager.shared.resetSwBrightnessForAllDisplays()
default: break
}
#if DEBUG
@@ -133,6 +133,7 @@ class MainPrefsViewController: NSViewController, PreferencePane {
self.prefs.set(true, forKey: Utils.PrefKeys.fallbackSw.rawValue)
case .off:
self.prefs.set(false, forKey: Utils.PrefKeys.fallbackSw.rawValue)
+ DisplayManager.shared.resetSwBrightnessForAllDisplays()
default: break
}
#if DEBUG
diff --git a/MonitorControlHelper/Info.plist b/MonitorControlHelper/Info.plist
index 50121d9..5aec371 100644
--- a/MonitorControlHelper/Info.plist
+++ b/MonitorControlHelper/Info.plist
@@ -19,7 +19,7 @@
CFBundleShortVersionString
$(MARKETING_VERSION)
CFBundleVersion
- 1980
+ 2075
LSApplicationCategoryType
public.app-category.utilities
LSBackgroundOnly
@@ -33,4 +33,4 @@
NSPrincipalClass
NSApplication
-
\ No newline at end of file
+