InputAppleMediaKeys.mm 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. //
  2. // Created by Tobias Hieta on 21/08/15.
  3. //
  4. #include "InputAppleMediaKeys.h"
  5. #include "SPMediaKeyTap.h"
  6. #include "QsLog.h"
  7. @interface MediaKeysDelegate : NSObject
  8. {
  9. SPMediaKeyTap* keyTap;
  10. InputAppleMediaKeys* input;
  11. }
  12. -(instancetype)initWithInput:(InputAppleMediaKeys*)input;
  13. @end
  14. @implementation MediaKeysDelegate
  15. - (instancetype)initWithInput:(InputAppleMediaKeys*)input_
  16. {
  17. self = [super init];
  18. if (self) {
  19. input = input_;
  20. keyTap = [[SPMediaKeyTap alloc] initWithDelegate:self];
  21. if ([SPMediaKeyTap usesGlobalMediaKeyTap])
  22. [keyTap startWatchingMediaKeys];
  23. else
  24. QLOG_WARN() << "Could not grab global media keys";
  25. }
  26. return self;
  27. }
  28. - (void)dealloc
  29. {
  30. [super dealloc];
  31. }
  32. -(void)mediaKeyTap:(SPMediaKeyTap *)keyTap receivedMediaKeyEvent:(NSEvent *)event
  33. {
  34. int keyCode = (([event data1] & 0xFFFF0000) >> 16);
  35. int keyFlags = ([event data1] & 0x0000FFFF);
  36. BOOL keyIsPressed = (((keyFlags & 0xFF00) >> 8)) == 0xA;
  37. QString keyPressed;
  38. switch (keyCode) {
  39. case NX_KEYTYPE_PLAY:
  40. keyPressed = INPUT_KEY_PLAY;
  41. break;
  42. case NX_KEYTYPE_FAST:
  43. keyPressed = "KEY_FAST";
  44. break;
  45. case NX_KEYTYPE_REWIND:
  46. keyPressed = "KEY_REWIND";
  47. break;
  48. case NX_KEYTYPE_NEXT:
  49. keyPressed = INPUT_KEY_NEXT;
  50. break;
  51. case NX_KEYTYPE_PREVIOUS:
  52. keyPressed = INPUT_KEY_PREV;
  53. break;
  54. default:
  55. break;
  56. // More cases defined in hidsystem/ev_keymap.h
  57. }
  58. emit input->receivedInput("AppleMediaKeys", keyPressed, keyIsPressed ? InputBase::KeyDown : InputBase::KeyUp);
  59. }
  60. @end
  61. ///////////////////////////////////////////////////////////////////////////////////////////////////
  62. bool InputAppleMediaKeys::initInput()
  63. {
  64. m_delegate = [[MediaKeysDelegate alloc] initWithInput:this];
  65. return true;
  66. }