@@ -67,7 +67,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
6767 func clearDisplays( ) {
6868 if self . statusMenu. items. count > 2 {
6969 var items : [ NSMenuItem ] = [ ]
70- for i in 0 ..< self . statusMenu. items. count - 2 {
70+ for i in 0 ..< self . statusMenu. items. count - 2 {
7171 items. append ( self . statusMenu. items [ i] )
7272 }
7373
@@ -192,12 +192,35 @@ class AppDelegate: NSObject, NSApplicationDelegate {
192192 }
193193 return nil
194194 }
195+
196+ func handleOpenPrefPane( mediaKey: MediaKey , event: KeyEvent ? , modifiers: NSEvent . ModifierFlags ? ) -> Bool {
197+ guard let modifiers = modifiers else { return false }
198+ if !( modifiers. contains ( . option) && !modifiers. contains ( . shift) ) {
199+ return false
200+ }
201+ if event? . keyRepeat == true {
202+ return false
203+ }
204+ switch mediaKey {
205+ case . brightnessUp, . brightnessDown:
206+ NSWorkspace . shared. open ( URL ( fileURLWithPath: " /System/Library/PreferencePanes/Displays.prefPane " ) )
207+ case . mute, . volumeUp, . volumeDown:
208+ NSWorkspace . shared. open ( URL ( fileURLWithPath: " /System/Library/PreferencePanes/Sound.prefPane " ) )
209+ default :
210+ return false
211+ }
212+ return true
213+ }
195214}
196215
197216// MARK: - Media Key Tap delegate
198217
199218extension AppDelegate : MediaKeyTapDelegate {
200219 func handle( mediaKey: MediaKey , event: KeyEvent ? , modifiers: NSEvent . ModifierFlags ? ) {
220+ if self . handleOpenPrefPane ( mediaKey: mediaKey, event: event, modifiers: modifiers) {
221+ return
222+ }
223+
201224 let isSmallIncrement = modifiers? . isSuperset ( of: NSEvent . ModifierFlags ( [ . shift, . option] ) ) ?? false
202225
203226 // control internal display when holding ctrl modifier
@@ -222,7 +245,10 @@ extension AppDelegate: MediaKeyTapDelegate {
222245 }
223246 mediaKeyTimer. invalidate ( )
224247 }
248+ self . sendDisplayCommand ( mediaKey: mediaKey, isRepeat: isRepeat, isSmallIncrement: isSmallIncrement)
249+ }
225250
251+ private func sendDisplayCommand( mediaKey: MediaKey , isRepeat: Bool , isSmallIncrement: Bool ) {
226252 let displays = DisplayManager . shared. getAllDisplays ( )
227253 guard let currentDisplay = DisplayManager . shared. getCurrentDisplay ( ) else { return }
228254
0 commit comments