vlc | branch: master | Felix Paul Kühne <[email protected]> | Sat Mar 9 21:56:24 2013 +0100| [59609879532da1990e8ad8cad3bd9ad603cb29cd] | committer: Felix Paul Kühne
macosx: automagically update the audio device list when the OS tells us to (close #8282) > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=59609879532da1990e8ad8cad3bd9ad603cb29cd --- modules/gui/macosx/MainMenu.m | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/modules/gui/macosx/MainMenu.m b/modules/gui/macosx/MainMenu.m index 35cded5..a016c61 100644 --- a/modules/gui/macosx/MainMenu.m +++ b/modules/gui/macosx/MainMenu.m @@ -24,6 +24,7 @@ #import "MainMenu.h" #import <vlc_common.h> #import <vlc_playlist.h> +#import <CoreAudio/CoreAudio.h> #import "intf.h" #import "open.h" @@ -45,6 +46,19 @@ #import "ExtensionsManager.h" #import "ConvertAndSave.h" +static OSStatus HardwareListener (AudioObjectID, UInt32, const AudioObjectPropertyAddress *, void *); + +static OSStatus HardwareListener(AudioObjectID inObjectID, UInt32 inNumberAddresses, const AudioObjectPropertyAddress inAddresses[], void*inClientData) +{ + VLC_UNUSED(inObjectID); + VLC_UNUSED(inNumberAddresses); + VLC_UNUSED(inAddresses); + // give the core some time update its internal structure for the new device setup + [[VLCMainMenu sharedInstance] performSelector:@selector(refreshAudioDeviceList) withObject:nil afterDelay:.5]; + + return noErr; +} + @implementation VLCMainMenu static VLCMainMenu *_o_sharedInstance = nil; @@ -86,6 +100,11 @@ static VLCMainMenu *_o_sharedInstance = nil; - (void)dealloc { + AudioObjectPropertyAddress audioDevicesAddress = { kAudioHardwarePropertyDevices, kAudioObjectPropertyScopeGlobal, kAudioObjectPropertyElementMaster }; + OSStatus err = AudioObjectRemovePropertyListener(kAudioObjectSystemObject, &audioDevicesAddress, HardwareListener, nil); + if (err != noErr) + msg_Err(p_intf, "failed to add audio hardware listener (%i)", err); + [[NSNotificationCenter defaultCenter] removeObserver: self]; if (b_nib_about_loaded) @@ -263,6 +282,13 @@ static VLCMainMenu *_o_sharedInstance = nil; [self setupExtensionsMenu]; [self refreshAudioDeviceList]; + + AudioObjectPropertyAddress audioDevicesAddress = { kAudioHardwarePropertyDevices, + kAudioObjectPropertyScopeGlobal, + kAudioObjectPropertyElementMaster }; + OSStatus err = AudioObjectAddPropertyListener(kAudioObjectSystemObject, &audioDevicesAddress, HardwareListener, nil); + if (err != noErr) + msg_Err(p_intf, "failed to add audio hardware listener (%i)", err); } - (void)initStrings _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
