vlc | branch: master | David Fuhrmann <[email protected]> | Fri Mar 1 19:44:22 2013 +0100| [768657f46a1b46b3cefa1934633312f49bc740c2] | committer: David Fuhrmann
macosx: fix playbackstatusUpdated in case of ended inputs As this method is called on main thread, END_S state was sometimes missed, resulting in a missing update for the play buttons. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=768657f46a1b46b3cefa1934633312f49bc740c2 --- modules/gui/macosx/intf.m | 109 ++++++++++++++++++++++----------------------- 1 file changed, 53 insertions(+), 56 deletions(-) diff --git a/modules/gui/macosx/intf.m b/modules/gui/macosx/intf.m index fcb005c..b65af72 100644 --- a/modules/gui/macosx/intf.m +++ b/modules/gui/macosx/intf.m @@ -1354,69 +1354,66 @@ static VLCMain *_o_sharedMainInstance = nil; - (void)playbackStatusUpdated { - input_thread_t * p_input; - - p_input = pl_CurrentInput(p_intf); - if (p_input) { - int state = var_GetInteger(p_input, "state"); - if (state == PLAYING_S) { - /* Declare user activity. - This wakes the display if it is off, and postpones display sleep according to the users system preferences - Available from 10.7.3 */ + int state = -1; + if (p_current_input) { + state = var_GetInteger(p_current_input, "state"); + } + + if (state == PLAYING_S) { + /* Declare user activity. + This wakes the display if it is off, and postpones display sleep according to the users system preferences + Available from 10.7.3 */ #ifdef MAC_OS_X_VERSION_10_7 - if ([self activeVideoPlayback] && IOPMAssertionDeclareUserActivity) - { - CFStringRef reasonForActivity = CFStringCreateWithCString(kCFAllocatorDefault, _("VLC media playback"), kCFStringEncodingUTF8); - IOPMAssertionDeclareUserActivity(reasonForActivity, - kIOPMUserActiveLocal, - &userActivityAssertionID); - CFRelease(reasonForActivity); - } + if ([self activeVideoPlayback] && IOPMAssertionDeclareUserActivity) + { + CFStringRef reasonForActivity = CFStringCreateWithCString(kCFAllocatorDefault, _("VLC media playback"), kCFStringEncodingUTF8); + IOPMAssertionDeclareUserActivity(reasonForActivity, + kIOPMUserActiveLocal, + &userActivityAssertionID); + CFRelease(reasonForActivity); + } #endif - /* prevent the system from sleeping */ - if (systemSleepAssertionID > 0) { - msg_Dbg(VLCIntf, "releasing old sleep blocker (%i)" , systemSleepAssertionID); - IOPMAssertionRelease(systemSleepAssertionID); - } - - IOReturn success; - /* work-around a bug in 10.7.4 and 10.7.5, so check for 10.7.x < 10.7.4, 10.8 and 10.6 */ - if ((NSAppKitVersionNumber >= 1115.2 && NSAppKitVersionNumber < 1138.45) || OSX_MOUNTAIN_LION || OSX_SNOW_LEOPARD) { - CFStringRef reasonForActivity = CFStringCreateWithCString(kCFAllocatorDefault, _("VLC media playback"), kCFStringEncodingUTF8); - if ([self activeVideoPlayback]) - success = IOPMAssertionCreateWithName(kIOPMAssertionTypeNoDisplaySleep, kIOPMAssertionLevelOn, reasonForActivity, &systemSleepAssertionID); - else - success = IOPMAssertionCreateWithName(kIOPMAssertionTypeNoIdleSleep, kIOPMAssertionLevelOn, reasonForActivity, &systemSleepAssertionID); - CFRelease(reasonForActivity); - } else { - /* fall-back on the 10.5 mode, which also works on 10.7.4 and 10.7.5 */ - if ([self activeVideoPlayback]) - success = IOPMAssertionCreate(kIOPMAssertionTypeNoDisplaySleep, kIOPMAssertionLevelOn, &systemSleepAssertionID); - else - success = IOPMAssertionCreate(kIOPMAssertionTypeNoIdleSleep, kIOPMAssertionLevelOn, &systemSleepAssertionID); - } + /* prevent the system from sleeping */ + if (systemSleepAssertionID > 0) { + msg_Dbg(VLCIntf, "releasing old sleep blocker (%i)" , systemSleepAssertionID); + IOPMAssertionRelease(systemSleepAssertionID); + } - if (success == kIOReturnSuccess) - msg_Dbg(VLCIntf, "prevented sleep through IOKit (%i)", systemSleepAssertionID); + IOReturn success; + /* work-around a bug in 10.7.4 and 10.7.5, so check for 10.7.x < 10.7.4, 10.8 and 10.6 */ + if ((NSAppKitVersionNumber >= 1115.2 && NSAppKitVersionNumber < 1138.45) || OSX_MOUNTAIN_LION || OSX_SNOW_LEOPARD) { + CFStringRef reasonForActivity = CFStringCreateWithCString(kCFAllocatorDefault, _("VLC media playback"), kCFStringEncodingUTF8); + if ([self activeVideoPlayback]) + success = IOPMAssertionCreateWithName(kIOPMAssertionTypeNoDisplaySleep, kIOPMAssertionLevelOn, reasonForActivity, &systemSleepAssertionID); else - msg_Warn(VLCIntf, "failed to prevent system sleep through IOKit"); - - [[self mainMenu] setPause]; - [o_mainwindow setPause]; + success = IOPMAssertionCreateWithName(kIOPMAssertionTypeNoIdleSleep, kIOPMAssertionLevelOn, reasonForActivity, &systemSleepAssertionID); + CFRelease(reasonForActivity); } else { - if (state == END_S) - [o_mainmenu setSubmenusEnabled: FALSE]; - [[self mainMenu] setPlay]; - [o_mainwindow setPlay]; - - /* allow the system to sleep again */ - if (systemSleepAssertionID > 0) { - msg_Dbg(VLCIntf, "releasing sleep blocker (%i)" , systemSleepAssertionID); - IOPMAssertionRelease(systemSleepAssertionID); - } + /* fall-back on the 10.5 mode, which also works on 10.7.4 and 10.7.5 */ + if ([self activeVideoPlayback]) + success = IOPMAssertionCreate(kIOPMAssertionTypeNoDisplaySleep, kIOPMAssertionLevelOn, &systemSleepAssertionID); + else + success = IOPMAssertionCreate(kIOPMAssertionTypeNoIdleSleep, kIOPMAssertionLevelOn, &systemSleepAssertionID); + } + + if (success == kIOReturnSuccess) + msg_Dbg(VLCIntf, "prevented sleep through IOKit (%i)", systemSleepAssertionID); + else + msg_Warn(VLCIntf, "failed to prevent system sleep through IOKit"); + + [[self mainMenu] setPause]; + [o_mainwindow setPause]; + } else { + [o_mainmenu setSubmenusEnabled: FALSE]; + [[self mainMenu] setPlay]; + [o_mainwindow setPlay]; + + /* allow the system to sleep again */ + if (systemSleepAssertionID > 0) { + msg_Dbg(VLCIntf, "releasing sleep blocker (%i)" , systemSleepAssertionID); + IOPMAssertionRelease(systemSleepAssertionID); } - vlc_object_release(p_input); } [[VLCMain sharedInstance] performSelectorOnMainThread:@selector(updateMainWindow) withObject: nil waitUntilDone: NO]; _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
