Skip to content

Commit d5d5157

Browse files
committed
Merge pull request #180 from octalmage/fix-mac-multimedia
Fix mac multimedia keycode conflict.
2 parents 9f3818e + 3d8ba52 commit d5d5157

File tree

3 files changed

+31
-30
lines changed

3 files changed

+31
-30
lines changed

src/keycode.h

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -50,24 +50,24 @@ enum _MMKeyCode {
5050
K_SPACE = kVK_Space,
5151
K_PRINTSCREEN = K_NOT_A_KEY,
5252

53-
K_AUDIO_VOLUME_MUTE = NX_KEYTYPE_MUTE,
54-
K_AUDIO_VOLUME_DOWN = NX_KEYTYPE_SOUND_DOWN,
55-
K_AUDIO_VOLUME_UP = NX_KEYTYPE_SOUND_UP,
56-
K_AUDIO_PLAY = NX_KEYTYPE_PLAY,
53+
K_AUDIO_VOLUME_MUTE = 1007,
54+
K_AUDIO_VOLUME_DOWN = 1001,
55+
K_AUDIO_VOLUME_UP = 1000,
56+
K_AUDIO_PLAY = 1016,
5757
K_AUDIO_STOP = K_NOT_A_KEY,
58-
K_AUDIO_PAUSE = NX_KEYTYPE_PLAY,
59-
K_AUDIO_PREV = NX_KEYTYPE_PREVIOUS,
60-
K_AUDIO_NEXT = NX_KEYTYPE_NEXT,
58+
K_AUDIO_PAUSE = 1016,
59+
K_AUDIO_PREV = 1018,
60+
K_AUDIO_NEXT = 1017,
6161
K_AUDIO_REWIND = K_NOT_A_KEY,
6262
K_AUDIO_FORWARD = K_NOT_A_KEY,
6363
K_AUDIO_REPEAT = K_NOT_A_KEY,
6464
K_AUDIO_RANDOM = K_NOT_A_KEY,
6565

66-
K_LIGHTS_MON_UP = NX_KEYTYPE_BRIGHTNESS_UP,
67-
K_LIGHTS_MON_DOWN = NX_KEYTYPE_BRIGHTNESS_DOWN,
68-
K_LIGHTS_KBD_TOGGLE = NX_KEYTYPE_ILLUMINATION_TOGGLE,
69-
K_LIGHTS_KBD_UP = NX_KEYTYPE_ILLUMINATION_UP,
70-
K_LIGHTS_KBD_DOWN = NX_KEYTYPE_ILLUMINATION_DOWN
66+
K_LIGHTS_MON_UP = 1002,
67+
K_LIGHTS_MON_DOWN = 1003,
68+
K_LIGHTS_KBD_TOGGLE = 1023,
69+
K_LIGHTS_KBD_UP = 1021,
70+
K_LIGHTS_KBD_DOWN = 1022
7171
};
7272

7373
typedef CGKeyCode MMKeyCode;

src/keypress.c

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -29,20 +29,6 @@
2929
#endif
3030

3131
#if defined(IS_MACOSX)
32-
bool keyCodeRequiresSystemDefinedEvent(MMKeyCode code) {
33-
return code == NX_KEYTYPE_SOUND_UP ||
34-
code == NX_KEYTYPE_SOUND_DOWN ||
35-
code == NX_KEYTYPE_MUTE ||
36-
code == NX_KEYTYPE_PLAY ||
37-
code == NX_KEYTYPE_BRIGHTNESS_UP ||
38-
code == NX_KEYTYPE_BRIGHTNESS_DOWN ||
39-
code == NX_KEYTYPE_PLAY ||
40-
code == NX_KEYTYPE_PREVIOUS ||
41-
code == NX_KEYTYPE_NEXT ||
42-
code == NX_KEYTYPE_ILLUMINATION_UP ||
43-
code == NX_KEYTYPE_ILLUMINATION_DOWN ||
44-
code == NX_KEYTYPE_ILLUMINATION_TOGGLE;
45-
}
4632
static io_connect_t _getAuxiliaryKeyDriver(void)
4733
{
4834
static mach_port_t sEventDrvrRef = 0;
@@ -123,7 +109,9 @@ void win32KeyEvent(int key, MMKeyFlags flags)
123109
void toggleKeyCode(MMKeyCode code, const bool down, MMKeyFlags flags)
124110
{
125111
#if defined(IS_MACOSX)
126-
if (keyCodeRequiresSystemDefinedEvent(code)) {
112+
/* The media keys all have 1000 added to them to help us detect them. */
113+
if (code >= 1000) {
114+
code = code - 1000; /* Get the real keycode. */
127115
NXEventData event;
128116
kern_return_t kr;
129117
IOGPoint loc = { 0, 0 };

test/keyboard.js

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,32 @@ var robot = require('..');
33

44
//TODO: Need tests for keyToggle, typeString, typeStringDelayed, and setKeyboardDelay.
55

6-
test('Tap a key.', function(t)
6+
test('Tap a key.', function(t)
77
{
88
t.plan(4);
99
t.ok(robot.keyTap("a") === 1, 'successfully tapped "a".');
1010
t.ok(robot.keyTap("a", "control") === 1, 'successfully tapped "ctrl+a".');
11-
11+
1212
t.throws(function()
1313
{
1414
robot.keyTap();
1515
}, /Invalid number/, 'tap nothing.');
16-
16+
1717
t.throws(function()
1818
{
1919
robot.keyTap();
2020
}, /Invalid number/, 'tap "ctrl+a" with an extra argument.');
21+
});
22+
23+
// This test won't fail if there's an issue, but it will help you identify an issue if ran locally.
24+
test('Tap all keys', function(t)
25+
{
26+
var chars = 'abcdefghijklmnopqrstuvwxyz1234567890,./;\'[]\\'.split('');
27+
28+
for (var x in chars)
29+
{
30+
t.ok(robot.keyTap(chars[x]), 'tap ' + chars[x] + '.');
31+
}
32+
33+
t.end();
2134
});

0 commit comments

Comments
 (0)