- (VLCVoutView *)videoView
{
- if ([[self contentView] class] == [VLCVoutView class])
- return (VLCVoutView *)[self contentView];
+ NSArray *o_subViews = [[self contentView] subviews];
+ if ([o_subViews count] > 0) {
+ id o_vout_view = [o_subViews objectAtIndex:0];
+
+ if ([o_vout_view class] == [VLCVoutView class])
+ return (VLCVoutView *)o_vout_view;
+ }
return nil;
}
BOOL b_inFullscreen = [self fullscreen] || ([self respondsToSelector:@selector(inFullscreenTransition)] && [(VLCVideoWindowCommon *)self inFullscreenTransition]);
- if(OSX_MAVERICKS && b_inFullscreen && constrainedRect.size.width == screenRect.size.width
+ if((OSX_MAVERICKS || OSX_YOSEMITE) && b_inFullscreen && constrainedRect.size.width == screenRect.size.width
&& constrainedRect.size.height != screenRect.size.height
&& abs(screenRect.size.height - constrainedRect.size.height) <= 25.) {
@synthesize videoView=o_video_view;
@synthesize controlsBar=o_controls_bar;
@synthesize inFullscreenTransition=b_in_fullscreen_transition;
+@synthesize windowShouldExitFullscreenWhenFinished=b_windowShouldExitFullscreenWhenFinished;
#pragma mark -
#pragma mark Init
if (b_nativeFullscreenMode) {
[self setCollectionBehavior: NSWindowCollectionBehaviorFullScreenPrimary];
- } else {
- [o_titlebar_view setFullscreenButtonHidden: YES];
}
+
[super awakeFromNib];
}
[super mouseMoved: theEvent];
}
+#pragma mark -
+#pragma mark Key events
+
+- (void)flagsChanged:(NSEvent *)theEvent
+{
+ BOOL b_alt_pressed = ([theEvent modifierFlags] & NSAlternateKeyMask) != 0;
+ [o_titlebar_view informModifierPressed: b_alt_pressed];
+
+ [super flagsChanged:theEvent];
+}
+
#pragma mark -
#pragma mark Lion native fullscreen handling
- (void)windowWillEnterFullScreen:(NSNotification *)notification
{
- // workaround, see #6668
- [NSApp setPresentationOptions:(NSApplicationPresentationFullScreen | NSApplicationPresentationAutoHideDock | NSApplicationPresentationAutoHideMenuBar)];
-
i_originalLevel = [self level];
+ b_windowShouldExitFullscreenWhenFinished = [[VLCMain sharedInstance] activeVideoPlayback];
+
// b_fullscreen and b_in_fullscreen_transition must not be true yet
[[[VLCMain sharedInstance] voutController] updateWindowLevelForHelperWindows: NSNormalWindowLevel];
[self setLevel:NSNormalWindowLevel];
if ([[subviews objectAtIndex:x] respondsToSelector:@selector(reshape)])
[[subviews objectAtIndex:x] reshape];
}
-
}
- (void)windowWillExitFullScreen:(NSNotification *)notification
b_in_fullscreen_transition = YES;
[self setFullscreen: NO];
- var_SetBool(pl_Get(VLCIntf), "fullscreen", false);
-
if ([self hasActiveVideo]) {
+ var_SetBool(pl_Get(VLCIntf), "fullscreen", false);
+
vout_thread_t *p_vout = getVoutForActiveWindow();
if (p_vout) {
var_SetBool(p_vout, "fullscreen", false);
#pragma mark -
#pragma mark Fullscreen Logic
-- (void)enterFullscreen
+- (void)enterFullscreenWithAnimation:(BOOL)b_animation
{
NSMutableDictionary *dict1, *dict2;
NSScreen *screen;
[o_fullscreen_window setHasActiveVideo: YES];
[o_fullscreen_window setFullscreen: YES];
- if (![self isVisible] || [self alphaValue] == 0.0) {
+ /* Make sure video view gets visible in case the playlist was visible before */
+ b_video_view_was_hidden = [o_video_view isHidden];
+ [o_video_view setHidden: NO];
+
+ if (!b_animation) {
/* We don't animate if we are not visible, instead we
* simply fade the display */
CGDisplayFadeReservationToken token;
CGDisplayFade(token, 0.5, kCGDisplayBlendNormal, kCGDisplayBlendSolidColor, 0, 0, 0, YES);
}
- [screen setFullscreenPresentationOptions];
-
+ NSDisableScreenUpdates();
[o_video_view retain];
[[o_video_view superview] replaceSubview:o_video_view with:o_temp_view];
[o_temp_view setFrame:[o_video_view frame]];
- [o_fullscreen_window setContentView:o_video_view];
+ [[o_fullscreen_window contentView] addSubview:o_video_view];
+ [o_video_view setFrame: [[o_fullscreen_window contentView] frame]];
[o_video_view release];
+ NSEnableScreenUpdates();
+
+ [screen setFullscreenPresentationOptions];
+
+ [o_fullscreen_window setFrame:screen_rect display:YES animate:NO];
- [o_fullscreen_window makeKeyAndOrderFront:self];
[o_fullscreen_window orderFront:self animate:YES];
- [o_fullscreen_window setFrame:screen_rect display:YES animate:YES];
[o_fullscreen_window setLevel:NSNormalWindowLevel];
if (blackout_other_displays) {
return;
}
- /* Make sure video view gets visible in case the playlist was visible before */
- b_video_view_was_hidden = [o_video_view isHidden];
- [o_video_view setHidden: NO];
-
/* Make sure we don't see the o_video_view disappearing of the screen during this operation */
NSDisableScreenUpdates();
[o_video_view retain];
[[o_video_view superview] replaceSubview:o_video_view with:o_temp_view];
[o_temp_view setFrame:[o_video_view frame]];
- [o_fullscreen_window setContentView:o_video_view];
+ [[o_fullscreen_window contentView] addSubview:o_video_view];
+ [o_video_view setFrame: [[o_fullscreen_window contentView] frame]];
[o_video_view release];
[o_fullscreen_window makeKeyAndOrderFront:self];
NSEnableScreenUpdates();
o_fullscreen_anim2 = nil;
}
+ b_in_fullscreen_transition = YES;
+ [self setFullscreen:NO];
+
if (!b_animation) {
/* We don't animate if we are not visible, instead we
* simply fade the display */
return;
}
- b_in_fullscreen_transition = YES;
-
[self setAlphaValue: 0.0];
[self orderFront: self];
[[o_video_view window] orderFront: self];
- (void)hasEndedFullscreen
{
- [self setFullscreen:NO];
b_in_fullscreen_transition = NO;
/* This function is private and should be only triggered at the end of the fullscreen change animation */