[vlc-commits] macosx: reactivate fast path for exiting fullscreen window when video finished
David Fuhrmann
git at videolan.org
Thu Mar 20 20:30:12 CET 2014
vlc | branch: master | David Fuhrmann <david.fuhrmann at googlemail.com> | Wed Mar 19 09:48:07 2014 +0100| [0011c26124c608f632418108ec9f4444e632afbb] | committer: David Fuhrmann
macosx: reactivate fast path for exiting fullscreen window when video finished
This also removes old workarounds which are not needed anymore.
close #10826
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=0011c26124c608f632418108ec9f4444e632afbb
---
modules/gui/macosx/VLCVoutWindowController.m | 10 ++-
modules/gui/macosx/Windows.h | 4 +-
modules/gui/macosx/Windows.m | 103 +++++---------------------
3 files changed, 27 insertions(+), 90 deletions(-)
diff --git a/modules/gui/macosx/VLCVoutWindowController.m b/modules/gui/macosx/VLCVoutWindowController.m
index f2def5b..de86df7 100644
--- a/modules/gui/macosx/VLCVoutWindowController.m
+++ b/modules/gui/macosx/VLCVoutWindowController.m
@@ -249,8 +249,11 @@
return;
}
- if ([o_window fullscreen] && ![[VLCMainWindow sharedInstance] nativeFullscreenMode])
- [o_window leaveFullscreen];
+ // prevent visible extra window if in fullscreen
+ NSDisableScreenUpdates();
+ if (![[VLCMainWindow sharedInstance] nativeFullscreenMode] &&
+ ([o_window fullscreen] || [o_window inFullscreenTransition]))
+ [o_window leaveFullscreenWithAnimation: NO];
[[o_window videoView] releaseVoutThread];
@@ -261,6 +264,7 @@
if ([o_window class] != [VLCMainWindow class]) {
[o_window close];
}
+ NSEnableScreenUpdates();
[o_window retain];
[o_vout_dict removeObjectForKey:o_key];
@@ -370,7 +374,7 @@
vlc_object_release(p_input);
} else {
// leaving fullscreen is always allowed
- [o_current_window leaveFullscreen];
+ [o_current_window leaveFullscreenWithAnimation:YES];
}
}
}
diff --git a/modules/gui/macosx/Windows.h b/modules/gui/macosx/Windows.h
index 2c4273f..ce3f714 100644
--- a/modules/gui/macosx/Windows.h
+++ b/modules/gui/macosx/Windows.h
@@ -98,10 +98,8 @@ static const float f_min_video_height = 70.0;
VLCWindow * o_fullscreen_window;
NSViewAnimation * o_fullscreen_anim1;
NSViewAnimation * o_fullscreen_anim2;
- NSViewAnimation * o_makekey_anim;
NSView * o_temp_view;
- BOOL b_window_is_invisible;
NSInteger i_originalLevel;
BOOL b_video_view_was_hidden;
@@ -129,7 +127,7 @@ static const float f_min_video_height = 70.0;
/* fullscreen handling */
- (void)enterFullscreen;
-- (void)leaveFullscreen;
+- (void)leaveFullscreenWithAnimation:(BOOL)b_animation;
/* lion fullscreen handling */
- (void)windowWillEnterFullScreen:(NSNotification *)notification;
diff --git a/modules/gui/macosx/Windows.m b/modules/gui/macosx/Windows.m
index 51c1135..2e58b6f 100644
--- a/modules/gui/macosx/Windows.m
+++ b/modules/gui/macosx/Windows.m
@@ -275,7 +275,6 @@
@interface VLCVideoWindowCommon (Internal)
- (void)customZoom:(id)sender;
- (void)hasBecomeFullscreen;
-- (void)leaveFullscreenAndFadeOut:(BOOL)fadeout;
- (void)hasEndedFullscreen;
@end
@@ -1007,12 +1006,7 @@
[self setFullscreen:YES];
}
-- (void)leaveFullscreen
-{
- [self leaveFullscreenAndFadeOut: NO];
-}
-
-- (void)leaveFullscreenAndFadeOut: (BOOL)fadeout
+- (void)leaveFullscreenWithAnimation:(BOOL)b_animation
{
NSMutableDictionary *dict1, *dict2;
NSRect frame;
@@ -1032,7 +1026,21 @@
return;
}
- if (fadeout) {
+ [[[VLCMainWindow sharedInstance] fsPanel] setNonActive: nil];
+ [[o_fullscreen_window screen] setNonFullscreenPresentationOptions];
+
+ if (o_fullscreen_anim1) {
+ [o_fullscreen_anim1 stopAnimation];
+ [o_fullscreen_anim1 release];
+ o_fullscreen_anim1 = nil;
+ }
+ if (o_fullscreen_anim2) {
+ [o_fullscreen_anim2 stopAnimation];
+ [o_fullscreen_anim2 release];
+ o_fullscreen_anim2 = nil;
+ }
+
+ if (!b_animation) {
/* We don't animate if we are not visible, instead we
* simply fade the display */
CGDisplayFadeReservationToken token;
@@ -1042,16 +1050,12 @@
CGDisplayFade(token, 0.3, kCGDisplayBlendNormal, kCGDisplayBlendSolidColor, 0, 0, 0, YES);
}
- [[[VLCMainWindow sharedInstance] fsPanel] setNonActive: nil];
- [[o_fullscreen_window screen] setNonFullscreenPresentationOptions];
+ [self setAlphaValue:1.0];
+ [self orderFront: self];
/* Will release the lock */
[self hasEndedFullscreen];
- /* Our window is hidden, and might be faded. We need to workaround that, so note it
- * here */
- b_window_is_invisible = YES;
-
if (blackout_other_displays) {
CGDisplayFade(token, 0.5, kCGDisplayBlendSolidColor, kCGDisplayBlendNormal, 0, 0, 0, NO);
CGReleaseDisplayFadeReservation(token);
@@ -1066,18 +1070,6 @@
[self orderFront: self];
[[o_video_view window] orderFront: self];
- [[[VLCMainWindow sharedInstance] fsPanel] setNonActive: nil];
- [[o_fullscreen_window screen] setNonFullscreenPresentationOptions];
-
- if (o_fullscreen_anim1) {
- [o_fullscreen_anim1 stopAnimation];
- [o_fullscreen_anim1 release];
- }
- if (o_fullscreen_anim2) {
- [o_fullscreen_anim2 stopAnimation];
- [o_fullscreen_anim2 release];
- }
-
frame = [[o_temp_view superview] convertRect: [o_temp_view frame] toView: nil]; /* Convert to Window base coord */
frame.origin.x += [self frame].origin.x;
frame.origin.y += [self frame].origin.y;
@@ -1134,7 +1126,7 @@
[o_video_view setHidden: b_video_view_was_hidden];
- [super makeKeyAndOrderFront:self]; /* our version (in main window) contains a workaround */
+ [self makeKeyAndOrderFront:self];
[o_fullscreen_window orderOut: self];
NSEnableScreenUpdates();
@@ -1146,19 +1138,11 @@
[self setLevel:i_originalLevel];
[self setAlphaValue: config_GetFloat(VLCIntf, "macosx-opaqueness")];
-
- // if we quit fullscreen because there is no video anymore, make sure non-embedded window is not visible
- if (![[VLCMain sharedInstance] activeVideoPlayback] && [self class] != [VLCMainWindow class])
- [self orderOut: self];
}
- (void)animationDidEnd:(NSAnimation*)animation
{
NSArray *viewAnimations;
- if (o_makekey_anim == animation) {
- [o_makekey_anim release];
- return;
- }
if ([animation currentValue] < 1.0)
return;
@@ -1173,55 +1157,6 @@
[self hasBecomeFullscreen];
}
-- (void)orderOut:(id)sender
-{
- [super orderOut:sender];
-
- /*
- * TODO reimplement leaveFullscreenAndFadeOut:YES, or remove code
- * and the hack below
-
- if (![NSStringFromClass([self class]) isEqualToString:@"VLCMainWindow"]) {
- [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. */
-
- if (!b_window_is_invisible) {
- /* Make sure we don't do it too much */
- [super makeKeyAndOrderFront: sender];
- return;
- }
-
- [super setAlphaValue:0.0f];
- [super makeKeyAndOrderFront: sender];
-
- NSMutableDictionary * dict = [[NSMutableDictionary alloc] initWithCapacity:2];
- [dict setObject:self forKey:NSViewAnimationTargetKey];
- [dict setObject:NSViewAnimationFadeInEffect forKey:NSViewAnimationEffectKey];
-
- o_makekey_anim = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObject:dict]];
- [dict release];
-
- [o_makekey_anim setAnimationBlockingMode: NSAnimationNonblocking];
- [o_makekey_anim setDuration: 0.1];
- [o_makekey_anim setFrameRate: 30];
- [o_makekey_anim setDelegate: self];
-
- [o_makekey_anim startAnimation];
- b_window_is_invisible = NO;
-
- /* fullscreenAnimation will be unlocked when animation ends */
-}
-
-
#pragma mark -
#pragma mark Accessibility stuff
More information about the vlc-commits
mailing list