InputAppleMediaKeys.mm 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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* m_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. m_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)mediaKeyTap:(SPMediaKeyTap *)keyTap receivedMediaKeyEvent:(NSEvent *)event
  29. {
  30. int keyCode = (([event data1] & 0xFFFF0000) >> 16);
  31. int keyFlags = ([event data1] & 0x0000FFFF);
  32. BOOL keyIsPressed = (((keyFlags & 0xFF00) >> 8)) == 0xA;
  33. QString keyPressed;
  34. if (keyIsPressed) {
  35. switch (keyCode) {
  36. case NX_KEYTYPE_PLAY:
  37. keyPressed = INPUT_KEY_PLAY;
  38. break;
  39. case NX_KEYTYPE_FAST:
  40. keyPressed = "KEY_FAST";
  41. break;
  42. case NX_KEYTYPE_REWIND:
  43. keyPressed = "KEY_REWIND";
  44. break;
  45. case NX_KEYTYPE_NEXT:
  46. keyPressed = INPUT_KEY_NEXT;
  47. break;
  48. case NX_KEYTYPE_PREVIOUS:
  49. keyPressed = INPUT_KEY_PREV;
  50. break;
  51. default:
  52. break;
  53. // More cases defined in hidsystem/ev_keymap.h
  54. }
  55. emit m_input->receivedInput("AppleMediaKeys", keyPressed);
  56. }
  57. }
  58. @end
  59. ///////////////////////////////////////////////////////////////////////////////////////////////////
  60. bool InputAppleMediaKeys::initInput()
  61. {
  62. m_delegate = [[MediaKeysDelegate alloc] initWithInput:this];
  63. return true;
  64. }