vlc | branch: master | Felix Paul Kühne <[email protected]> | Wed Apr 17 00:06:55 2019 +0200| [7d109ecf350da49a1e52287c0a2d720743c63453] | committer: Felix Paul Kühne
macosx: fix legacy media key support activation This also fixes #21358. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=7d109ecf350da49a1e52287c0a2d720743c63453 --- .../gui/macosx/os-integration/VLCClickerManager.m | 57 +++++++++++++++++----- 1 file changed, 46 insertions(+), 11 deletions(-) diff --git a/modules/gui/macosx/os-integration/VLCClickerManager.m b/modules/gui/macosx/os-integration/VLCClickerManager.m index c75045aafa..c0a87cf4a8 100644 --- a/modules/gui/macosx/os-integration/VLCClickerManager.m +++ b/modules/gui/macosx/os-integration/VLCClickerManager.m @@ -66,6 +66,14 @@ name:VLCMediaKeySupportSettingChangedNotification object:nil]; [notificationCenter addObserver:self + selector:@selector(playlistUpdated:) + name:VLCPlaylistItemsAdded + object:nil]; + [notificationCenter addObserver:self + selector:@selector(playlistUpdated:) + name:VLCPlaylistItemsRemoved + object:nil]; + [notificationCenter addObserver:self selector:@selector(coreChangedAppleRemoteSetting:) name:VLCAppleRemoteSettingChangedNotification object:nil]; @@ -115,24 +123,51 @@ VLCMain *main = [VLCMain sharedInstance]; if (b_mediaKeySupport && ([[[main playlistController] playlistModel] numberOfPlaylistItems] > 0)) { if (!b_mediaKeyTrapEnabled) { - msg_Dbg(p_intf, "Enabling media key support"); - if ([_mediaKeyController startWatchingMediaKeys]) { - b_mediaKeyTrapEnabled = YES; - } else { - msg_Warn(p_intf, "Failed to enable media key support, likely " - "app needs to be whitelisted in Security Settings."); - } + [self enableMediaKeySupport]; } } else { if (b_mediaKeyTrapEnabled) { - b_mediaKeyTrapEnabled = NO; - msg_Dbg(p_intf, "Disabling media key support"); - [_mediaKeyController stopWatchingMediaKeys]; + [self disableMediaKeySupport]; } + _mediaKeyController = nil; + } +} + +- (void)enableMediaKeySupport +{ + intf_thread_t *p_intf = getIntf(); + msg_Dbg(p_intf, "Enabling media key support"); + if ([_mediaKeyController startWatchingMediaKeys]) { + b_mediaKeyTrapEnabled = YES; + } else { + msg_Warn(p_intf, "Failed to enable media key support, likely " + "app needs to be whitelisted in Security Settings."); + } +} + +- (void)disableMediaKeySupport +{ + b_mediaKeyTrapEnabled = NO; + msg_Dbg(getIntf(), "Disabling media key support"); + [_mediaKeyController stopWatchingMediaKeys]; +} + +- (void)playlistUpdated:(NSNotification *)aNotification +{ + if (!_mediaKeyController) { + return; + } + + BOOL numberOfMediaLargerThanZero = [[[[VLCMain sharedInstance] playlistController] playlistModel] numberOfPlaylistItems] > 0; + + if (b_mediaKeyTrapEnabled && !numberOfMediaLargerThanZero) { + [self disableMediaKeySupport]; + } else if (!b_mediaKeyTrapEnabled && numberOfMediaLargerThanZero) { + [self enableMediaKeySupport]; } } --(void)mediaKeyTap:(SPMediaKeyTap*)keyTap receivedMediaKeyEvent:(NSEvent*)event +- (void)mediaKeyTap:(SPMediaKeyTap*)keyTap receivedMediaKeyEvent:(NSEvent*)event { if (b_mediaKeySupport) { assert([event type] == NSSystemDefined && [event subtype] == SPSystemDefinedEventMediaKeys); _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
