From 226f06845826b6c03427d60a62256eb5076d422a Mon Sep 17 00:00:00 2001 From: Istvan Toth <37590873+waydabber@users.noreply.github.com> Date: Tue, 16 Nov 2021 22:18:19 +0100 Subject: [PATCH] Virtual displays now use serial number as preferences ID appendix. (#793) --- MonitorControl/Info.plist | 2 +- MonitorControl/Model/AppleDisplay.swift | 4 ++-- MonitorControl/Model/Display.swift | 24 +++++++++++---------- MonitorControl/Model/OtherDisplay.swift | 4 ++-- MonitorControl/Support/DisplayManager.swift | 5 +++-- MonitorControlHelper/Info.plist | 2 +- 6 files changed, 22 insertions(+), 19 deletions(-) diff --git a/MonitorControl/Info.plist b/MonitorControl/Info.plist index 85621d8..9031017 100644 --- a/MonitorControl/Info.plist +++ b/MonitorControl/Info.plist @@ -19,7 +19,7 @@ CFBundleShortVersionString $(MARKETING_VERSION) CFBundleVersion - 6957 + 6965 LSApplicationCategoryType public.app-category.utilities LSMinimumSystemVersion diff --git a/MonitorControl/Model/AppleDisplay.swift b/MonitorControl/Model/AppleDisplay.swift index 68dd948..85bc92f 100644 --- a/MonitorControl/Model/AppleDisplay.swift +++ b/MonitorControl/Model/AppleDisplay.swift @@ -6,9 +6,9 @@ import os.log class AppleDisplay: Display { private var displayQueue: DispatchQueue - override init(_ identifier: CGDirectDisplayID, name: String, vendorNumber: UInt32?, modelNumber: UInt32?, isVirtual: Bool = false, isDummy: Bool = false) { + override init(_ identifier: CGDirectDisplayID, name: String, vendorNumber: UInt32?, modelNumber: UInt32?, serialNumber: UInt32?, isVirtual: Bool = false, isDummy: Bool = false) { self.displayQueue = DispatchQueue(label: String("displayQueue-\(identifier)")) - super.init(identifier, name: name, vendorNumber: vendorNumber, modelNumber: modelNumber, isVirtual: isVirtual, isDummy: isDummy) + super.init(identifier, name: name, vendorNumber: vendorNumber, modelNumber: modelNumber, serialNumber: serialNumber, isVirtual: isVirtual, isDummy: isDummy) } public func getAppleBrightness() -> Float { diff --git a/MonitorControl/Model/Display.swift b/MonitorControl/Model/Display.swift index 7cdae8c..b661249 100644 --- a/MonitorControl/Model/Display.swift +++ b/MonitorControl/Model/Display.swift @@ -5,14 +5,15 @@ import Foundation import os.log class Display: Equatable { - internal let identifier: CGDirectDisplayID - internal let prefsId: String - internal var name: String - internal var vendorNumber: UInt32? - internal var modelNumber: UInt32? - internal var smoothBrightnessTransient: Float = 1 - internal var smoothBrightnessRunning: Bool = false - internal var smoothBrightnessSlow: Bool = false + let identifier: CGDirectDisplayID + let prefsId: String + var name: String + var vendorNumber: UInt32? + var modelNumber: UInt32? + var serialNumber: UInt32? + var smoothBrightnessTransient: Float = 1 + var smoothBrightnessRunning: Bool = false + var smoothBrightnessSlow: Bool = false let swBrightnessSemaphore = DispatchSemaphore(value: 1) static func == (lhs: Display, rhs: Display) -> Bool { @@ -62,15 +63,16 @@ class Display: Equatable { (key ?? PrefKey.value).rawValue + (command != nil ? String((command ?? Command.none).rawValue) : "") + self.prefsId } - internal init(_ identifier: CGDirectDisplayID, name: String, vendorNumber: UInt32?, modelNumber: UInt32?, isVirtual: Bool = false, isDummy: Bool = false) { + init(_ identifier: CGDirectDisplayID, name: String, vendorNumber: UInt32?, modelNumber: UInt32?, serialNumber: UInt32?, isVirtual: Bool = false, isDummy: Bool = false) { self.identifier = identifier self.name = name self.vendorNumber = vendorNumber self.modelNumber = modelNumber - self.prefsId = "(" + String(name.filter { !$0.isWhitespace }) + String(vendorNumber ?? 0) + String(modelNumber ?? 0) + "@" + String(identifier) + ")" - os_log("Display init with prefsIdentifier %{public}@", type: .info, self.prefsId) + self.serialNumber = serialNumber self.isVirtual = DEBUG_VIRTUAL ? true : isVirtual self.isDummy = isDummy + self.prefsId = "(\(name.filter { !$0.isWhitespace })\(vendorNumber ?? 0)\(modelNumber ?? 0)@\(self.isVirtual ? (self.serialNumber ?? 9999) : identifier))" + os_log("Display init with prefsIdentifier %{public}@", type: .info, self.prefsId) self.swUpdateDefaultGammaTable() self.smoothBrightnessTransient = self.getBrightness() if self.isVirtual || self.readPrefAsBool(key: PrefKey.avoidGamma), !self.isDummy { diff --git a/MonitorControl/Model/OtherDisplay.swift b/MonitorControl/Model/OtherDisplay.swift index e91a918..dee05dd 100644 --- a/MonitorControl/Model/OtherDisplay.swift +++ b/MonitorControl/Model/OtherDisplay.swift @@ -26,8 +26,8 @@ class OtherDisplay: Display { set { prefs.set(newValue, forKey: PrefKey.pollingCount.rawValue + self.prefsId) } } - override init(_ identifier: CGDirectDisplayID, name: String, vendorNumber: UInt32?, modelNumber: UInt32?, isVirtual: Bool = false, isDummy: Bool = false) { - super.init(identifier, name: name, vendorNumber: vendorNumber, modelNumber: modelNumber, isVirtual: isVirtual, isDummy: isDummy) + override init(_ identifier: CGDirectDisplayID, name: String, vendorNumber: UInt32?, modelNumber: UInt32?, serialNumber: UInt32?, isVirtual: Bool = false, isDummy: Bool = false) { + super.init(identifier, name: name, vendorNumber: vendorNumber, modelNumber: modelNumber, serialNumber: serialNumber, isVirtual: isVirtual, isDummy: isDummy) if !isVirtual, !Arm64DDC.isArm64 { self.ddc = IntelDDC(for: identifier) } diff --git a/MonitorControl/Support/DisplayManager.swift b/MonitorControl/Support/DisplayManager.swift index f6e07a3..36064c5 100644 --- a/MonitorControl/Support/DisplayManager.swift +++ b/MonitorControl/Support/DisplayManager.swift @@ -172,14 +172,15 @@ class DisplayManager { let id = onlineDisplayID let vendorNumber = CGDisplayVendorNumber(onlineDisplayID) let modelNumber = CGDisplayModelNumber(onlineDisplayID) + let serialNumber = CGDisplaySerialNumber(onlineDisplayID) let isDummy: Bool = DisplayManager.isDummy(displayID: onlineDisplayID) let isVirtual: Bool = DisplayManager.isVirtual(displayID: onlineDisplayID) if !DEBUG_SW, DisplayManager.isAppleDisplay(displayID: onlineDisplayID) { // MARK: (point of interest for testing) - let appleDisplay = AppleDisplay(id, name: name, vendorNumber: vendorNumber, modelNumber: modelNumber, isVirtual: isVirtual, isDummy: isDummy) + let appleDisplay = AppleDisplay(id, name: name, vendorNumber: vendorNumber, modelNumber: modelNumber, serialNumber: serialNumber, isVirtual: isVirtual, isDummy: isDummy) os_log("Apple display found - %{public}@", type: .info, "ID: \(appleDisplay.identifier), Name: \(appleDisplay.name) (Vendor: \(appleDisplay.vendorNumber ?? 0), Model: \(appleDisplay.modelNumber ?? 0))") self.addDisplay(display: appleDisplay) } else { - let otherDisplay = OtherDisplay(id, name: name, vendorNumber: vendorNumber, modelNumber: modelNumber, isVirtual: isVirtual, isDummy: isDummy) + let otherDisplay = OtherDisplay(id, name: name, vendorNumber: vendorNumber, modelNumber: modelNumber, serialNumber: serialNumber, isVirtual: isVirtual, isDummy: isDummy) os_log("Other display found - %{public}@", type: .info, "ID: \(otherDisplay.identifier), Name: \(otherDisplay.name) (Vendor: \(otherDisplay.vendorNumber ?? 0), Model: \(otherDisplay.modelNumber ?? 0))") self.addDisplay(display: otherDisplay) } diff --git a/MonitorControlHelper/Info.plist b/MonitorControlHelper/Info.plist index 0d25c8c..f9d7f9c 100644 --- a/MonitorControlHelper/Info.plist +++ b/MonitorControlHelper/Info.plist @@ -19,7 +19,7 @@ CFBundleShortVersionString $(MARKETING_VERSION) CFBundleVersion - 6957 + 6965 LSApplicationCategoryType public.app-category.utilities LSBackgroundOnly