[vlc-devel] [PATCH] macosx: cancel the resume dialog after switching playlist items
Clemens Werther
clemenswerther at googlemail.com
Fri Jul 1 11:14:55 CEST 2016
fix bug where VLC segfaults on OSX: After switching a playlist item
while presented a resume dialog, the resume dialog still shows for
the previous item. Clicking "continue" crashes VLC.
---
modules/gui/macosx/ResumeDialogController.h | 4 ++++
modules/gui/macosx/ResumeDialogController.m | 25 +++++++++++++++----------
modules/gui/macosx/VLCPlaylist.m | 2 ++
3 files changed, 21 insertions(+), 10 deletions(-)
diff --git a/modules/gui/macosx/ResumeDialogController.h b/modules/gui/macosx/ResumeDialogController.h
index d6d937d..7790947 100644
--- a/modules/gui/macosx/ResumeDialogController.h
+++ b/modules/gui/macosx/ResumeDialogController.h
@@ -42,6 +42,8 @@ typedef void(^CompletionBlock)(enum ResumeResult);
IBOutlet id o_restart_btn;
IBOutlet id o_resume_btn;
IBOutlet id o_always_resume_btn;
+
+ NSTimer *o_countdown_timer;
}
- (IBAction)buttonClicked:(id)sender;
@@ -50,4 +52,6 @@ typedef void(^CompletionBlock)(enum ResumeResult);
- (void)updateCocoaWindowLevel:(NSInteger)i_level;
+- (void)cancel;
+
@end
diff --git a/modules/gui/macosx/ResumeDialogController.m b/modules/gui/macosx/ResumeDialogController.m
index 7fbfe79..9ecebf6 100644
--- a/modules/gui/macosx/ResumeDialogController.m
+++ b/modules/gui/macosx/ResumeDialogController.m
@@ -55,11 +55,6 @@
{
NSWindow *w = [self window];
- if ([w isVisible]) {
- msg_Err(getIntf(), "Resume dialog in use already");
- return;
- }
-
currentResumeTimeout = 10;
completionBlock = [block copy];
@@ -74,11 +69,11 @@
NSString *labelString = [NSString stringWithFormat:_NS("Playback of \"%@\" will continue at %@"), o_title, [[VLCStringUtility sharedInstance] stringForTime:pos]];
[o_text_lbl setStringValue:labelString];
- NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1
- target:self
- selector:@selector(updateAlertWindow:)
- userInfo:nil
- repeats:YES];
+ o_countdown_timer = [NSTimer scheduledTimerWithTimeInterval:1
+ target:self
+ selector:@selector(updateAlertWindow:)
+ userInfo:nil
+ repeats:YES];
[w setLevel:[[[VLCMain sharedInstance] voutController] currentStatusWindowLevel]];
[w center];
@@ -126,4 +121,14 @@
[self.window setLevel: i_level];
}
+- (void)cancel
+{
+ if (o_countdown_timer != nil) {
+ [o_countdown_timer invalidate];
+ o_countdown_timer = nil;
+ }
+
+ [[self window] close];
+}
+
@end
diff --git a/modules/gui/macosx/VLCPlaylist.m b/modules/gui/macosx/VLCPlaylist.m
index bdf8819..d43e65b 100644
--- a/modules/gui/macosx/VLCPlaylist.m
+++ b/modules/gui/macosx/VLCPlaylist.m
@@ -867,6 +867,8 @@
- (void)continuePlaybackWhereYouLeftOff:(input_thread_t *)p_input_thread
{
+ [[[VLCMain sharedInstance] resumeDialog] cancel];
+
NSDictionary *recentlyPlayedFiles = [[NSUserDefaults standardUserDefaults] objectForKey:@"recentlyPlayedMedia"];
if (!recentlyPlayedFiles)
return;
--
2.9.0
More information about the vlc-devel
mailing list