diff --git a/modules/gui/macosx/views/VLCTimeField.h b/modules/gui/macosx/views/VLCTimeField.h index 7b4b37464b7bf5539fed35e074e2e47e30df81c9..6236197ab7869bc2630103b96aed3274818e2dbc 100644 --- a/modules/gui/macosx/views/VLCTimeField.h +++ b/modules/gui/macosx/views/VLCTimeField.h @@ -2,6 +2,7 @@ * VLCTimeField.h: NSTextField subclass for playback time fields ***************************************************************************** * Copyright (C) 2003-2017 VLC authors and VideoLAN + * $Id$ * * Authors: Jon Lech Johansen <jon-vl@nanocrew.net> * Felix Paul Kühne <fkuehne at videolan dot org> @@ -34,8 +35,7 @@ extern NSString *VLCTimeFieldDisplayTimeAsRemaining; @interface VLCTimeField : NSTextField -@property (readonly) BOOL timeRemaining; - -- (void)setRemainingIdentifier:(NSString *)o_string; +- (void)setRemainingIdentifier:(NSString *)identifier; +- (void)setTime:(NSString *)time withRemainingTime:(NSString *)remainingTime; @end diff --git a/modules/gui/macosx/views/VLCTimeField.m b/modules/gui/macosx/views/VLCTimeField.m index 578cb9b6f7315a746a5ef118d609dd75aaa6e66e..fccd62ddccb9ecfcc962c0abc59f5baafa763c33 100644 --- a/modules/gui/macosx/views/VLCTimeField.m +++ b/modules/gui/macosx/views/VLCTimeField.m @@ -2,6 +2,7 @@ * VLCTimeField.m: NSTextField subclass for playback time fields ***************************************************************************** * Copyright (C) 2003-2017 VLC authors and VideoLAN + * $Id$ * * Authors: Jon Lech Johansen <jon-vl@nanocrew.net> * Felix Paul Kühne <fkuehne at videolan dot org> @@ -31,8 +32,11 @@ NSString *VLCTimeFieldDisplayTimeAsRemaining = @"DisplayTimeAsTimeRemaining"; @interface VLCTimeField () { - NSString *o_remaining_identifier; - BOOL b_time_remaining; + NSString *_identifier; + BOOL _isTimeRemaining; + + NSString *_cachedTime; + NSString *_remainingTime; } @end @@ -48,10 +52,10 @@ NSString *VLCTimeFieldDisplayTimeAsRemaining = @"DisplayTimeAsTimeRemaining"; } -- (void)setRemainingIdentifier:(NSString *)o_string +- (void)setRemainingIdentifier:(NSString *)identifier { - o_remaining_identifier = o_string; - b_time_remaining = [[NSUserDefaults standardUserDefaults] boolForKey:o_remaining_identifier]; + _identifier = identifier; + _isTimeRemaining = [[NSUserDefaults standardUserDefaults] boolForKey:_identifier]; } - (void)mouseDown: (NSEvent *)ourEvent @@ -60,24 +64,54 @@ NSString *VLCTimeFieldDisplayTimeAsRemaining = @"DisplayTimeAsTimeRemaining"; [[[VLCMain sharedInstance] mainMenu] goToSpecificTime: nil]; else { - if (o_remaining_identifier) { - b_time_remaining = [[NSUserDefaults standardUserDefaults] boolForKey:o_remaining_identifier]; - b_time_remaining = !b_time_remaining; - [[NSUserDefaults standardUserDefaults] setObject:(b_time_remaining ? @"YES" : @"NO") forKey:o_remaining_identifier]; + if (_identifier) { + _isTimeRemaining = [[NSUserDefaults standardUserDefaults] boolForKey:_identifier]; + _isTimeRemaining = !_isTimeRemaining; + [[NSUserDefaults standardUserDefaults] setObject:(_isTimeRemaining ? @"YES" : @"NO") forKey:_identifier]; } else { - b_time_remaining = !b_time_remaining; + _isTimeRemaining = !_isTimeRemaining; } + + [self updateTimeValue]; } [[self nextResponder] mouseDown:ourEvent]; } +- (void)setTime:(NSString *)time withRemainingTime:(NSString *)remainingTime +{ + _cachedTime = time; + _remainingTime = remainingTime; + + [self updateTimeValue]; +} + +- (void)updateTimeValue +{ + if (!_cachedTime || !_remainingTime) + return; + + if ([self timeRemaining]) { + [super setStringValue:_remainingTime]; + } else { + [super setStringValue:_cachedTime]; + } +} + +- (void)setStringValue:(NSString *)stringValue +{ + [super setStringValue:stringValue]; + + _cachedTime = nil; + _remainingTime = nil; +} + - (BOOL)timeRemaining { - if (o_remaining_identifier) - return [[NSUserDefaults standardUserDefaults] boolForKey:o_remaining_identifier]; + if (_identifier) + return [[NSUserDefaults standardUserDefaults] boolForKey:_identifier]; else - return b_time_remaining; + return _isTimeRemaining; } @end diff --git a/modules/gui/macosx/windows/mainwindow/VLCControlsBarCommon.m b/modules/gui/macosx/windows/mainwindow/VLCControlsBarCommon.m index bd2c1fa2ccc937299385c91e8d4c0741423c2310..997ba860d2719a5a4ca0dc4b8ccf93953ef2bcd4 100644 --- a/modules/gui/macosx/windows/mainwindow/VLCControlsBarCommon.m +++ b/modules/gui/macosx/windows/mainwindow/VLCControlsBarCommon.m @@ -295,10 +295,13 @@ [self.timeSlider setEnabled:_playerController.seekable]; } - NSString *time = [NSString stringWithDuration:duration - currentTime:_playerController.time - negative:self.timeField.timeRemaining]; - [self.timeField setStringValue:time]; + NSString *timeString = [NSString stringWithDuration:duration + currentTime:_playerController.time + negative:NO]; + NSString *remainingTime = [NSString stringWithDuration:duration + currentTime:_playerController.time + negative:YES]; + [self.timeField setTime:timeString withRemainingTime:remainingTime]; [self.timeField setNeedsDisplay:YES]; } diff --git a/modules/gui/macosx/windows/video/VLCFSPanelController.m b/modules/gui/macosx/windows/video/VLCFSPanelController.m index 96bf8c8f3ed587c6bb295966f17bb113cfa974c8..3e32c679fed3f63fbb3d413082d4baeafb489cc0 100644 --- a/modules/gui/macosx/windows/video/VLCFSPanelController.m +++ b/modules/gui/macosx/windows/video/VLCFSPanelController.m @@ -335,8 +335,11 @@ static NSString *kAssociatedFullscreenRect = @"VLCFullscreenAssociatedWindowRect /* Update total duration (right field) */ NSString *timeString = [NSString stringWithDuration:duration currentTime:time - negative:_remainingOrTotalTime.timeRemaining]; - [_remainingOrTotalTime setStringValue:timeString]; + negative:NO]; + NSString *remainingTime = [NSString stringWithDuration:duration + currentTime:time + negative:YES]; + [_remainingOrTotalTime setTime:timeString withRemainingTime:remainingTime]; [_remainingOrTotalTime setNeedsDisplay:YES]; [_remainingOrTotalTime setHidden:duration <= 0];