Skip to content

Commit 226f068

Browse files
authored
Virtual displays now use serial number as preferences ID appendix. (MonitorControl#793)
1 parent a2203ab commit 226f068

File tree

6 files changed

+22
-19
lines changed

6 files changed

+22
-19
lines changed

MonitorControl/Info.plist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<key>CFBundleShortVersionString</key>
2020
<string>$(MARKETING_VERSION)</string>
2121
<key>CFBundleVersion</key>
22-
<string>6957</string>
22+
<string>6965</string>
2323
<key>LSApplicationCategoryType</key>
2424
<string>public.app-category.utilities</string>
2525
<key>LSMinimumSystemVersion</key>

MonitorControl/Model/AppleDisplay.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ import os.log
66
class AppleDisplay: Display {
77
private var displayQueue: DispatchQueue
88

9-
override init(_ identifier: CGDirectDisplayID, name: String, vendorNumber: UInt32?, modelNumber: UInt32?, isVirtual: Bool = false, isDummy: Bool = false) {
9+
override init(_ identifier: CGDirectDisplayID, name: String, vendorNumber: UInt32?, modelNumber: UInt32?, serialNumber: UInt32?, isVirtual: Bool = false, isDummy: Bool = false) {
1010
self.displayQueue = DispatchQueue(label: String("displayQueue-\(identifier)"))
11-
super.init(identifier, name: name, vendorNumber: vendorNumber, modelNumber: modelNumber, isVirtual: isVirtual, isDummy: isDummy)
11+
super.init(identifier, name: name, vendorNumber: vendorNumber, modelNumber: modelNumber, serialNumber: serialNumber, isVirtual: isVirtual, isDummy: isDummy)
1212
}
1313

1414
public func getAppleBrightness() -> Float {

MonitorControl/Model/Display.swift

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,15 @@ import Foundation
55
import os.log
66

77
class Display: Equatable {
8-
internal let identifier: CGDirectDisplayID
9-
internal let prefsId: String
10-
internal var name: String
11-
internal var vendorNumber: UInt32?
12-
internal var modelNumber: UInt32?
13-
internal var smoothBrightnessTransient: Float = 1
14-
internal var smoothBrightnessRunning: Bool = false
15-
internal var smoothBrightnessSlow: Bool = false
8+
let identifier: CGDirectDisplayID
9+
let prefsId: String
10+
var name: String
11+
var vendorNumber: UInt32?
12+
var modelNumber: UInt32?
13+
var serialNumber: UInt32?
14+
var smoothBrightnessTransient: Float = 1
15+
var smoothBrightnessRunning: Bool = false
16+
var smoothBrightnessSlow: Bool = false
1617
let swBrightnessSemaphore = DispatchSemaphore(value: 1)
1718

1819
static func == (lhs: Display, rhs: Display) -> Bool {
@@ -62,15 +63,16 @@ class Display: Equatable {
6263
(key ?? PrefKey.value).rawValue + (command != nil ? String((command ?? Command.none).rawValue) : "") + self.prefsId
6364
}
6465

65-
internal init(_ identifier: CGDirectDisplayID, name: String, vendorNumber: UInt32?, modelNumber: UInt32?, isVirtual: Bool = false, isDummy: Bool = false) {
66+
init(_ identifier: CGDirectDisplayID, name: String, vendorNumber: UInt32?, modelNumber: UInt32?, serialNumber: UInt32?, isVirtual: Bool = false, isDummy: Bool = false) {
6667
self.identifier = identifier
6768
self.name = name
6869
self.vendorNumber = vendorNumber
6970
self.modelNumber = modelNumber
70-
self.prefsId = "(" + String(name.filter { !$0.isWhitespace }) + String(vendorNumber ?? 0) + String(modelNumber ?? 0) + "@" + String(identifier) + ")"
71-
os_log("Display init with prefsIdentifier %{public}@", type: .info, self.prefsId)
71+
self.serialNumber = serialNumber
7272
self.isVirtual = DEBUG_VIRTUAL ? true : isVirtual
7373
self.isDummy = isDummy
74+
self.prefsId = "(\(name.filter { !$0.isWhitespace })\(vendorNumber ?? 0)\(modelNumber ?? 0)@\(self.isVirtual ? (self.serialNumber ?? 9999) : identifier))"
75+
os_log("Display init with prefsIdentifier %{public}@", type: .info, self.prefsId)
7476
self.swUpdateDefaultGammaTable()
7577
self.smoothBrightnessTransient = self.getBrightness()
7678
if self.isVirtual || self.readPrefAsBool(key: PrefKey.avoidGamma), !self.isDummy {

MonitorControl/Model/OtherDisplay.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ class OtherDisplay: Display {
2626
set { prefs.set(newValue, forKey: PrefKey.pollingCount.rawValue + self.prefsId) }
2727
}
2828

29-
override init(_ identifier: CGDirectDisplayID, name: String, vendorNumber: UInt32?, modelNumber: UInt32?, isVirtual: Bool = false, isDummy: Bool = false) {
30-
super.init(identifier, name: name, vendorNumber: vendorNumber, modelNumber: modelNumber, isVirtual: isVirtual, isDummy: isDummy)
29+
override init(_ identifier: CGDirectDisplayID, name: String, vendorNumber: UInt32?, modelNumber: UInt32?, serialNumber: UInt32?, isVirtual: Bool = false, isDummy: Bool = false) {
30+
super.init(identifier, name: name, vendorNumber: vendorNumber, modelNumber: modelNumber, serialNumber: serialNumber, isVirtual: isVirtual, isDummy: isDummy)
3131
if !isVirtual, !Arm64DDC.isArm64 {
3232
self.ddc = IntelDDC(for: identifier)
3333
}

MonitorControl/Support/DisplayManager.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,14 +172,15 @@ class DisplayManager {
172172
let id = onlineDisplayID
173173
let vendorNumber = CGDisplayVendorNumber(onlineDisplayID)
174174
let modelNumber = CGDisplayModelNumber(onlineDisplayID)
175+
let serialNumber = CGDisplaySerialNumber(onlineDisplayID)
175176
let isDummy: Bool = DisplayManager.isDummy(displayID: onlineDisplayID)
176177
let isVirtual: Bool = DisplayManager.isVirtual(displayID: onlineDisplayID)
177178
if !DEBUG_SW, DisplayManager.isAppleDisplay(displayID: onlineDisplayID) { // MARK: (point of interest for testing)
178-
let appleDisplay = AppleDisplay(id, name: name, vendorNumber: vendorNumber, modelNumber: modelNumber, isVirtual: isVirtual, isDummy: isDummy)
179+
let appleDisplay = AppleDisplay(id, name: name, vendorNumber: vendorNumber, modelNumber: modelNumber, serialNumber: serialNumber, isVirtual: isVirtual, isDummy: isDummy)
179180
os_log("Apple display found - %{public}@", type: .info, "ID: \(appleDisplay.identifier), Name: \(appleDisplay.name) (Vendor: \(appleDisplay.vendorNumber ?? 0), Model: \(appleDisplay.modelNumber ?? 0))")
180181
self.addDisplay(display: appleDisplay)
181182
} else {
182-
let otherDisplay = OtherDisplay(id, name: name, vendorNumber: vendorNumber, modelNumber: modelNumber, isVirtual: isVirtual, isDummy: isDummy)
183+
let otherDisplay = OtherDisplay(id, name: name, vendorNumber: vendorNumber, modelNumber: modelNumber, serialNumber: serialNumber, isVirtual: isVirtual, isDummy: isDummy)
183184
os_log("Other display found - %{public}@", type: .info, "ID: \(otherDisplay.identifier), Name: \(otherDisplay.name) (Vendor: \(otherDisplay.vendorNumber ?? 0), Model: \(otherDisplay.modelNumber ?? 0))")
184185
self.addDisplay(display: otherDisplay)
185186
}

MonitorControlHelper/Info.plist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<key>CFBundleShortVersionString</key>
2020
<string>$(MARKETING_VERSION)</string>
2121
<key>CFBundleVersion</key>
22-
<string>6957</string>
22+
<string>6965</string>
2323
<key>LSApplicationCategoryType</key>
2424
<string>public.app-category.utilities</string>
2525
<key>LSBackgroundOnly</key>

0 commit comments

Comments
 (0)