Commit 225b543a authored by Pierre d'Herbemont's avatar Pierre d'Herbemont

macosx: Fix #1694 "Fullscreen video after end of playlist".

parent 79559bdf
...@@ -69,6 +69,9 @@ ...@@ -69,6 +69,9 @@
/* Not fullscreen when we wake up */ /* Not fullscreen when we wake up */
[o_btn_fullscreen setState: NO]; [o_btn_fullscreen setState: NO];
b_fullscreen = NO; b_fullscreen = NO;
/* Make sure setVisible: returns NO */
[self orderOut:self];
} }
- (void)controlTintChanged - (void)controlTintChanged
...@@ -200,7 +203,12 @@ ...@@ -200,7 +203,12 @@
msg_Dbg( p_vout, "chosen screen isn't present, using current screen for fullscreen mode" ); msg_Dbg( p_vout, "chosen screen isn't present, using current screen for fullscreen mode" );
screen = [self screen]; screen = [self screen];
} }
if (!screen)
{
msg_Dbg( p_vout, "Using deepest screen" );
screen = [NSScreen deepestScreen];
}
vlc_object_release( p_vout ); vlc_object_release( p_vout );
screen_rect = [screen frame]; screen_rect = [screen frame];
...@@ -231,10 +239,8 @@ ...@@ -231,10 +239,8 @@
* simply fade the display */ * simply fade the display */
CGDisplayFadeReservationToken token; CGDisplayFadeReservationToken token;
[o_fullscreen_window setFrame:screen_rect display:NO];
CGAcquireDisplayFadeReservation(kCGMaxDisplayReservationInterval, &token); CGAcquireDisplayFadeReservation(kCGMaxDisplayReservationInterval, &token);
CGDisplayFade( token, 0.3, kCGDisplayBlendNormal, kCGDisplayBlendSolidColor, 0, 0, 0, YES ); CGDisplayFade( token, 0.5, kCGDisplayBlendNormal, kCGDisplayBlendSolidColor, 0, 0, 0, YES );
if ([screen isMainScreen]) if ([screen isMainScreen])
SetSystemUIMode( kUIModeAllHidden, kUIOptionAutoShowMenuBar); SetSystemUIMode( kUIModeAllHidden, kUIOptionAutoShowMenuBar);
...@@ -242,10 +248,15 @@ ...@@ -242,10 +248,15 @@
[[self contentView] replaceSubview:o_view with:o_temp_view]; [[self contentView] replaceSubview:o_view with:o_temp_view];
[o_temp_view setFrame:[o_view frame]]; [o_temp_view setFrame:[o_view frame]];
[o_fullscreen_window setContentView:o_view]; [o_fullscreen_window setContentView:o_view];
[o_fullscreen_window makeKeyAndOrderFront:self];
[o_fullscreen_window makeKeyAndOrderFront:self]; [o_fullscreen_window makeKeyAndOrderFront:self];
[self orderOut: self]; [o_fullscreen_window orderFront:self animate:YES];
CGDisplayFade( token, 0.5, kCGDisplayBlendSolidColor, kCGDisplayBlendNormal, 0, 0, 0, NO ); [o_fullscreen_window setFrame:screen_rect display:YES];
CGDisplayFade( token, 0.3, kCGDisplayBlendSolidColor, kCGDisplayBlendNormal, 0, 0, 0, NO );
CGReleaseDisplayFadeReservation( token); CGReleaseDisplayFadeReservation( token);
/* Will release the lock */ /* Will release the lock */
...@@ -337,10 +348,12 @@ ...@@ -337,10 +348,12 @@
/* tell the fspanel to move itself to front next time it's triggered */ /* tell the fspanel to move itself to front next time it's triggered */
[[[[VLCMain sharedInstance] getControls] getFSPanel] setVoutWasUpdated: (int)[[o_fullscreen_window screen] displayID]]; [[[[VLCMain sharedInstance] getControls] getFSPanel] setVoutWasUpdated: (int)[[o_fullscreen_window screen] displayID]];
[super orderOut: self]; if([self isVisible])
[super orderOut: self];
[[[[VLCMain sharedInstance] getControls] getFSPanel] setActive: nil]; [[[[VLCMain sharedInstance] getControls] getFSPanel] setActive: nil];
b_fullscreen = YES; b_fullscreen = YES;
[self unlockFullscreenAnimation]; [self unlockFullscreenAnimation];
} }
...@@ -458,7 +471,7 @@ ...@@ -458,7 +471,7 @@
[o_view setFrame:[o_temp_view frame]]; [o_view setFrame:[o_temp_view frame]];
[self makeFirstResponder: o_view]; [self makeFirstResponder: o_view];
if ([self isVisible]) if ([self isVisible])
[self makeKeyAndOrderFront:self]; [super makeKeyAndOrderFront:self]; /* our version contains a workaround */
[o_fullscreen_window orderOut: self]; [o_fullscreen_window orderOut: self];
EnableScreenUpdates(); EnableScreenUpdates();
...@@ -497,6 +510,32 @@ ...@@ -497,6 +510,32 @@
[self leaveFullscreenAndFadeOut: YES]; [self leaveFullscreenAndFadeOut: YES];
} }
- (void)makeKeyAndOrderFront: (id)sender
{
/* Hack
* when we exit fullscreen and fade out, we may endup in
* having a window that is faded. We can't have it fade in unless we
* animate again. */
[super setAlphaValue:0.0f];
[super makeKeyAndOrderFront: sender];
NSMutableDictionary * dict = [[[NSMutableDictionary alloc] initWithCapacity:2] autorelease];
[dict setObject:self forKey:NSViewAnimationTargetKey];
[dict setObject:NSViewAnimationFadeInEffect forKey:NSViewAnimationEffectKey];
NSViewAnimation * anim = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObject:dict]];
[anim setAnimationBlockingMode: NSAnimationNonblocking];
[anim setDuration: 0.1];
[anim setFrameRate: 30];
[anim startAnimation];
/* fullscreenAnimation will be unlocked when animation ends */
}
/* Make sure setFrame gets executed on main thread especially if we are animating. /* Make sure setFrame gets executed on main thread especially if we are animating.
* (Thus we won't block the video output thread) */ * (Thus we won't block the video output thread) */
- (void)setFrame:(NSRect)frame display:(BOOL)display animate:(BOOL)animate - (void)setFrame:(NSRect)frame display:(BOOL)display animate:(BOOL)animate
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment