-
Notifications
You must be signed in to change notification settings - Fork 0
/
TUPMediaKeyEventMonitor.h
101 lines (82 loc) · 3.59 KB
/
TUPMediaKeyEventMonitor.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/*
* Author: Eelco Lempsink <eml@tupil.com>
*
* Inspired by SPMediaKeyTap https://github.com/nevyn/SPMediaKeyTap
*
* Copyright (c) 2015-2015 Tupil B.V.
* All rights reserved.
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following
* conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/
// TODO: Cocoapod
// TODO: Drop-in replacement code?
@import Cocoa;
@import IOKit.hidsystem;
/*! The media key codes. Not all keys are available on all keyboards. */
typedef NS_ENUM(NSInteger, TUPMediaKeyCode)
{
/// Play key
TUPMediaKeyPlay = NX_KEYTYPE_PLAY,
/// Next key
TUPMediaKeyNext = NX_KEYTYPE_NEXT,
/// Previous key
TUPMediaKeyPrevious = NX_KEYTYPE_PREVIOUS,
/// Fast-forward key
TUPMediaKeyFast = NX_KEYTYPE_FAST,
/// Rewind key
TUPMediaKeyRewind = NX_KEYTYPE_REWIND
};
@protocol TUPMediaKeyEventMonitorDelegate;
/*! @class TUPMediaKeyEventMonitor
@discussion The \c TUPMediaKeyEventMonitor can monitor keypresses to the media keys even if the
application is not frontmost. It will prevent conflicts with other applications
implementing media key monitoring by only calling the \c TUPMediaKeyEventMonitorDelegate
if this application was the most recent media key receiving application.
*/
@interface TUPMediaKeyEventMonitor : NSObject
@property (weak) id<TUPMediaKeyEventMonitorDelegate> delegate;
/*! Start monitoring all system events for media key presses.
If a media key is pressed and this application was the last active application known to
handle media key presses, a call to \f mediaKeyEventMonitor:keyPressWithCode:repeat:
delegate method will be made.
*/
- (void)startMonitoring;
/*! Stop monitoring all system events for media key presses. */
- (void)stopMonitoring;
/*! Handle media keys directly from local events.
If the monitor is active, calls to this method will be ignored.
If the event does not contain a media key press it will do nothing.
@param event The event might contain a media key press.
*/
- (void)handleLocalMediaKeyEvent:(NSEvent*)event;
@end
/*! @protocol TUPMediaKeyEventMonitorDelegate
Implement the \c TUPMediaKeyEventMonitorDelegate protocol to receive media key presses.
*/
@protocol TUPMediaKeyEventMonitorDelegate <NSObject>
/*! Called when a media key is pressed and the application should handle it
@param monitor The \c TUPMediaKeyEventMonitor that monitored the key event.
@param code The key code of the pressed key.
@param repeat YES if the key is held down and repeats.
*/
- (void)mediaKeyEventMonitor:(TUPMediaKeyEventMonitor*)monitor keyPressWithCode:(TUPMediaKeyCode)code repeat:(BOOL)repeat;
@end