[vlc-devel] commit: macosx: Fix #1694 "Fullscreen video after end of playlist". ( Pierre d'Herbemont )
git version control
git at videolan.org
Sat Jul 12 17:34:13 CEST 2008
vlc | branch: master | Pierre d'Herbemont <pdherbemont at videolan.org> | Sat Jul 12 17:33:28 2008 +0200| [225b543a23631896813aa3a780b1f5b3bfe1c23d]
macosx: Fix #1694 "Fullscreen video after end of playlist".
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=225b543a23631896813aa3a780b1f5b3bfe1c23d
---
modules/gui/macosx/embeddedwindow.m | 57 +++++++++++++++++++++++++++++-----
1 files changed, 48 insertions(+), 9 deletions(-)
diff --git a/modules/gui/macosx/embeddedwindow.m b/modules/gui/macosx/embeddedwindow.m
index d16a16b..d7cd72c 100644
--- a/modules/gui/macosx/embeddedwindow.m
+++ b/modules/gui/macosx/embeddedwindow.m
@@ -69,6 +69,9 @@
/* Not fullscreen when we wake up */
[o_btn_fullscreen setState: NO];
b_fullscreen = NO;
+
+ /* Make sure setVisible: returns NO */
+ [self orderOut:self];
}
- (void)controlTintChanged
@@ -200,7 +203,12 @@
msg_Dbg( p_vout, "chosen screen isn't present, using current screen for fullscreen mode" );
screen = [self screen];
}
-
+ if (!screen)
+ {
+ msg_Dbg( p_vout, "Using deepest screen" );
+ screen = [NSScreen deepestScreen];
+ }
+
vlc_object_release( p_vout );
screen_rect = [screen frame];
@@ -231,10 +239,8 @@
* simply fade the display */
CGDisplayFadeReservationToken token;
- [o_fullscreen_window setFrame:screen_rect display:NO];
-
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])
SetSystemUIMode( kUIModeAllHidden, kUIOptionAutoShowMenuBar);
@@ -242,10 +248,15 @@
[[self contentView] replaceSubview:o_view with:o_temp_view];
[o_temp_view setFrame:[o_view frame]];
[o_fullscreen_window setContentView:o_view];
+
+ [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);
/* Will release the lock */
@@ -337,10 +348,12 @@
/* tell the fspanel to move itself to front next time it's triggered */
[[[[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];
+
b_fullscreen = YES;
[self unlockFullscreenAnimation];
}
@@ -458,7 +471,7 @@
[o_view setFrame:[o_temp_view frame]];
[self makeFirstResponder: o_view];
if ([self isVisible])
- [self makeKeyAndOrderFront:self];
+ [super makeKeyAndOrderFront:self]; /* our version contains a workaround */
[o_fullscreen_window orderOut: self];
EnableScreenUpdates();
@@ -497,6 +510,32 @@
[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.
* (Thus we won't block the video output thread) */
- (void)setFrame:(NSRect)frame display:(BOOL)display animate:(BOOL)animate
More information about the vlc-devel
mailing list