mac: fix crash if we can't get an event tap

without assistive-device permissions the event tap can't be create on
10.14 any more which lead to an assertion.

System Preferences > Security & Privacy > Privacy > Accessibility and
add mpv or your terminal App to the list.

(cherry picked from commit ada4f7c600)
This commit is contained in:
Rodger Combs 2018-06-27 20:22:35 -05:00 committed by Jan Ekström
parent a985e8ed6b
commit 5b9cf1d0a6
1 changed files with 12 additions and 9 deletions

View File

@ -375,7 +375,8 @@ void cocoa_set_mpv_handle(struct mpv_handle *ctx)
- (void)restartMediaKeys - (void)restartMediaKeys
{ {
CGEventTapEnable(self->_mk_tap_port, true); if (self->_mk_tap_port)
CGEventTapEnable(self->_mk_tap_port, true);
} }
- (void)setHighestPriotityMediaKeysTap - (void)setHighestPriotityMediaKeysTap
@ -410,10 +411,10 @@ void cocoa_set_mpv_handle(struct mpv_handle *ctx)
tap_event_callback, tap_event_callback,
self); self);
assert(self->_mk_tap_port != nil); if (self->_mk_tap_port) {
NSMachPort *port = (NSMachPort *)self->_mk_tap_port;
NSMachPort *port = (NSMachPort *)self->_mk_tap_port; [[NSRunLoop mainRunLoop] addPort:port forMode:NSRunLoopCommonModes];
[[NSRunLoop mainRunLoop] addPort:port forMode:NSRunLoopCommonModes]; }
}); });
} }
@ -421,10 +422,12 @@ void cocoa_set_mpv_handle(struct mpv_handle *ctx)
{ {
dispatch_async(dispatch_get_main_queue(), ^{ dispatch_async(dispatch_get_main_queue(), ^{
NSMachPort *port = (NSMachPort *)self->_mk_tap_port; NSMachPort *port = (NSMachPort *)self->_mk_tap_port;
CGEventTapEnable(self->_mk_tap_port, false); if (port) {
[[NSRunLoop mainRunLoop] removePort:port forMode:NSRunLoopCommonModes]; CGEventTapEnable(self->_mk_tap_port, false);
CFRelease(self->_mk_tap_port); [[NSRunLoop mainRunLoop] removePort:port forMode:NSRunLoopCommonModes];
self->_mk_tap_port = nil; CFRelease(self->_mk_tap_port);
self->_mk_tap_port = nil;
}
}); });
} }