vlc/vlc-1.1 | branch: master | Felix Paul Kühne <[email protected]> | Mon Jul 11 16:01:21 2011 +0200| [99fbdecc596055536b61739414d98d819d7643a4] | committer: Felix Paul Kühne
macosx: make sure that we don't block media keys for iTunes in case the user doesn't want to use them within VLC Changing this option requires a relaunch now, which is automatically offered when needed. > http://git.videolan.org/gitweb.cgi/vlc/vlc-1.1.git/?a=commit;h=99fbdecc596055536b61739414d98d819d7643a4 --- NEWS | 1 + modules/gui/macosx/SPMediaKeyTap.m | 6 ++-- modules/gui/macosx/intf.m | 42 ++++++++++++++++++++++++++++++------ modules/gui/macosx/simple_prefs.m | 7 +++-- 4 files changed, 43 insertions(+), 13 deletions(-) diff --git a/NEWS b/NEWS index 6debe5d..9e609d2 100644 --- a/NEWS +++ b/NEWS @@ -6,6 +6,7 @@ Mac OS X: * Update Auhal audio output to the latest API * Fix images disappearing issue on the interface * Reduced installation size by up to 30 MB + * Resolved conflict between iTunes and VLC wrt Media Key handling Mozilla/ActiveX webplugin: * Fullscreen mode is fixed on Win32 diff --git a/modules/gui/macosx/SPMediaKeyTap.m b/modules/gui/macosx/SPMediaKeyTap.m index 5f6063a..fe6ff24 100644 --- a/modules/gui/macosx/SPMediaKeyTap.m +++ b/modules/gui/macosx/SPMediaKeyTap.m @@ -34,7 +34,7 @@ static CGEventRef tapEventCallback(CGEventTapProxy proxy, CGEventType type, CGEv #pragma mark Setup and teardown -(id)initWithDelegate:(id)delegate; { - _delegate = delegate; + _delegate = delegate; [self startWatchingAppSwitching]; singleton = self; _mediaKeyAppList = [NSMutableArray new]; @@ -42,7 +42,7 @@ static CGEventRef tapEventCallback(CGEventTapProxy proxy, CGEventType type, CGEv } -(void)dealloc; { - [self stopWatchingMediaKeys]; + [self stopWatchingMediaKeys]; [self stopWatchingAppSwitching]; [_mediaKeyAppList release]; [super dealloc]; @@ -68,7 +68,7 @@ static CGEventRef tapEventCallback(CGEventTapProxy proxy, CGEventType type, CGEv } -(void)startWatchingMediaKeys;{ - [self setShouldInterceptMediaKeyEvents:YES]; + [self setShouldInterceptMediaKeyEvents:YES]; // Add an event tap to intercept the system defined media key events _eventPort = CGEventTapCreate(kCGSessionEventTap, diff --git a/modules/gui/macosx/intf.m b/modules/gui/macosx/intf.m index 8abc6be..535e9b9 100644 --- a/modules/gui/macosx/intf.m +++ b/modules/gui/macosx/intf.m @@ -574,14 +574,16 @@ static VLCMain *_o_sharedMainInstance = nil; if( !p_intf ) return; /* init media key support */ - o_mediaKeyController = [[SPMediaKeyTap alloc] initWithDelegate:self]; b_mediaKeySupport = config_GetInt( VLCIntf, "macosx-mediakeys" ); - [o_mediaKeyController startWatchingMediaKeys]; - [o_mediaKeyController setShouldInterceptMediaKeyEvents:b_mediaKeySupport]; + if( b_mediaKeySupport ) + { + o_mediaKeyController = [[SPMediaKeyTap alloc] initWithDelegate:self]; + [o_mediaKeyController startWatchingMediaKeys]; + [[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithObjectsAndKeys: + [SPMediaKeyTap defaultMediaKeyUserBundleIdentifiers], kMediaKeyUsingBundleIdentifiersDefaultsKey, + nil]]; + } [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(coreChangedMediaKeySupportSetting:) name: @"VLCMediaKeySupportSettingChanged" object: nil]; - [[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithObjectsAndKeys: - [SPMediaKeyTap defaultMediaKeyUserBundleIdentifiers], kMediaKeyUsingBundleIdentifiersDefaultsKey, - nil]]; [self _removeOldPreferences]; @@ -838,6 +840,9 @@ static VLCMain *_o_sharedMainInstance = nil; /* release some other objects here, because it isn't sure whether dealloc * will be called later on */ + if( o_mediaKeyController ) + [o_mediaKeyController release]; + if( nib_about_loaded ) [o_about release]; @@ -2843,7 +2848,30 @@ end: - (void)coreChangedMediaKeySupportSetting: (NSNotification *)o_notification { b_mediaKeySupport = config_GetInt( VLCIntf, "macosx-mediakeys" ); - [o_mediaKeyController setShouldInterceptMediaKeyEvents:b_mediaKeySupport]; + if (b_mediaKeySupport) { + if (!o_mediaKeyController) + o_mediaKeyController = [[SPMediaKeyTap alloc] initWithDelegate:self]; + [o_mediaKeyController startWatchingMediaKeys]; + } + else if (!b_mediaKeySupport && o_mediaKeyController) + { + int returnedValue = NSRunInformationalAlertPanel(_NS("Relaunch required"), + _NS("To make sure that VLC no longer listens to your media key events, it needs to be restarted."), + _NS("Relaunch VLC"), _NS("Ignore"), nil, nil); + if( returnedValue == NSOKButton ) + { + /* Relaunch now */ + const char * path = [[[NSBundle mainBundle] executablePath] UTF8String]; + + /* For some reason we need to fork(), not just execl(), which reports a ENOTSUP then. */ + if(fork() != 0) + { + exit(0); + return; + } + execl(path, path, NULL); + } + } } @end diff --git a/modules/gui/macosx/simple_prefs.m b/modules/gui/macosx/simple_prefs.m index 72f43a8..f87b807 100644 --- a/modules/gui/macosx/simple_prefs.m +++ b/modules/gui/macosx/simple_prefs.m @@ -844,9 +844,6 @@ static inline void save_module_list( intf_thread_t * p_intf, id object, const ch [[[VLCMain sharedInstance] appleRemoteController] startListening: [VLCMain sharedInstance]]; else [[[VLCMain sharedInstance] appleRemoteController] stopListening: [VLCMain sharedInstance]]; - [[NSNotificationCenter defaultCenter] postNotificationName: @"VLCMediaKeySupportSettingChanged" - object: nil - userInfo: nil]; /* okay, let's save our changes to vlcrc */ i = config_SaveConfigFile( p_intf, "main" ); @@ -1092,6 +1089,10 @@ static inline void save_module_list( intf_thread_t * p_intf, id object, const ch } b_hotkeyChanged = NO; } + + [[NSNotificationCenter defaultCenter] postNotificationName: @"VLCMediaKeySupportSettingChanged" + object: nil + userInfo: nil]; } - (void)showSettingsForCategory: (id)o_new_category_view _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
