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