Skip to content

Commit 4dddd27

Browse files
JoniVRthe0neyouseek
authored andcommitted
🔧 Improved Accessibility Permissions handling (MonitorControl#77)
- Restart mediakeytap after changing accessibility permissions
1 parent e8a53f2 commit 4dddd27

5 files changed

Lines changed: 22 additions & 2 deletions

File tree

MonitorControl.xcodeproj/project.pbxproj

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
28D1DE15227FD006004CB494 /* DDC.framework.dSYM in [Carthage] Copy Framework Debug Symbols */ = {isa = PBXBuildFile; fileRef = 28D1DE11227FD006004CB494 /* DDC.framework.dSYM */; };
2727
56754EAF1D9A4016007BCDC5 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56754EAE1D9A4016007BCDC5 /* AppDelegate.swift */; };
2828
56754EB11D9A4016007BCDC5 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 56754EB01D9A4016007BCDC5 /* Assets.xcassets */; };
29+
8C0E20562296ABBA000CBF15 /* NSNotification+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C0E20552296ABBA000CBF15 /* NSNotification+Extension.swift */; };
2930
F01B067922822141008E64DB /* Display+Whitelist.swift in Sources */ = {isa = PBXBuildFile; fileRef = F01B067822822141008E64DB /* Display+Whitelist.swift */; };
3031
F01B0699228221B7008E64DB /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = F01B0680228221B6008E64DB /* Localizable.strings */; };
3132
F01B069A228221B7008E64DB /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = F01B0683228221B6008E64DB /* Utils.swift */; };
@@ -99,6 +100,7 @@
99100
56754EAB1D9A4016007BCDC5 /* MonitorControl.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MonitorControl.app; sourceTree = BUILT_PRODUCTS_DIR; };
100101
56754EAE1D9A4016007BCDC5 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; lineEnding = 0; path = AppDelegate.swift; sourceTree = "<group>"; };
101102
56754EB01D9A4016007BCDC5 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
103+
8C0E20552296ABBA000CBF15 /* NSNotification+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSNotification+Extension.swift"; sourceTree = "<group>"; };
102104
F01B067822822141008E64DB /* Display+Whitelist.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Display+Whitelist.swift"; sourceTree = "<group>"; };
103105
F01B0681228221B6008E64DB /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = "<group>"; };
104106
F01B0682228221B6008E64DB /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
@@ -174,6 +176,7 @@
174176
F01B067822822141008E64DB /* Display+Whitelist.swift */,
175177
28D1DDEC227FB8F2004CB494 /* EDID+Extension.swift */,
176178
28D1DDF1227FBE71004CB494 /* NSScreen+Extension.swift */,
179+
8C0E20552296ABBA000CBF15 /* NSNotification+Extension.swift */,
177180
);
178181
path = Extensions;
179182
sourceTree = "<group>";
@@ -186,6 +189,7 @@
186189
F06792E8200A73460066C438 /* MonitorControlHelper */,
187190
56754EAC1D9A4016007BCDC5 /* Products */,
188191
);
192+
indentWidth = 2;
189193
sourceTree = "<group>";
190194
};
191195
56754EAC1D9A4016007BCDC5 /* Products */ = {
@@ -448,6 +452,7 @@
448452
F01B067922822141008E64DB /* Display+Whitelist.swift in Sources */,
449453
F03A8DF21FFBAA6F0034DC27 /* Display.swift in Sources */,
450454
F0445D40200259C10025AE82 /* DisplayPrefsViewController.swift in Sources */,
455+
8C0E20562296ABBA000CBF15 /* NSNotification+Extension.swift in Sources */,
451456
28D1DDF0227FBD99004CB494 /* EDID+Extension.swift in Sources */,
452457
F0445D3D200254FA0025AE82 /* KeysPrefsViewController.swift in Sources */,
453458
F0445D3820023E710025AE82 /* MainPrefsViewController.swift in Sources */,

MonitorControl/AppDelegate.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ class AppDelegate: NSObject, NSApplicationDelegate {
2424
var mediaKeyTap: MediaKeyTap?
2525
var prefsController: NSWindowController?
2626

27+
var accessibilityObserver: NSObjectProtocol!
28+
2729
func applicationDidFinishLaunching(_: Notification) {
2830
app = self
2931

@@ -40,6 +42,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
4042

4143
func applicationWillTerminate(_: Notification) {
4244
AMCoreAudio.NotificationCenter.defaultCenter.unsubscribe(self, eventType: AudioHardwareEvent.self)
45+
DistributedNotificationCenter.default().removeObserver(self.accessibilityObserver as Any, name: .accessibilityApi, object: nil)
4346
}
4447

4548
@IBAction func quitClicked(_: AnyObject) {
@@ -181,6 +184,13 @@ class AppDelegate: NSObject, NSApplicationDelegate {
181184

182185
// subscribe Audio output detector (AMCoreAudio)
183186
AMCoreAudio.NotificationCenter.defaultCenter.subscribe(self, eventType: AudioHardwareEvent.self, dispatchQueue: DispatchQueue.main)
187+
188+
// listen for accessibility status changes
189+
accessibilityObserver = DistributedNotificationCenter.default().addObserver(forName: .accessibilityApi, object: nil, queue: nil) { _ in
190+
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
191+
self.startOrRestartMediaKeyTap()
192+
}
193+
}
184194
}
185195
}
186196

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import Cocoa
2+
3+
extension NSNotification.Name {
4+
static let accessibilityApi = NSNotification.Name.init(rawValue: "com.apple.accessibility.api")
5+
}

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>1.5.2</string>
2121
<key>CFBundleVersion</key>
22-
<string>516</string>
22+
<string>533</string>
2323
<key>LSApplicationCategoryType</key>
2424
<string>public.app-category.utilities</string>
2525
<key>LSMinimumSystemVersion</key>

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>1.5.2</string>
2121
<key>CFBundleVersion</key>
22-
<string>516</string>
22+
<string>533</string>
2323
<key>LSApplicationCategoryType</key>
2424
<string>public.app-category.utilities</string>
2525
<key>LSBackgroundOnly</key>

0 commit comments

Comments
 (0)