Commit 081ecbd5 authored by David Fuhrmann's avatar David Fuhrmann

macosx: make fullscreen compatible with macosx-background

refs #5174
parent 18dee68f
...@@ -143,6 +143,7 @@ ...@@ -143,6 +143,7 @@
NSRect previousSavedFrame; NSRect previousSavedFrame;
VLCWindow *o_extra_video_window; VLCWindow *o_extra_video_window;
id o_current_video_window;
} }
+ (VLCMainWindow *)sharedInstance; + (VLCMainWindow *)sharedInstance;
......
...@@ -150,7 +150,10 @@ static VLCMainWindow *_o_sharedInstance = nil; ...@@ -150,7 +150,10 @@ static VLCMainWindow *_o_sharedInstance = nil;
[o_sidebaritems release]; [o_sidebaritems release];
if( o_extra_video_window ) if( o_extra_video_window )
{
[o_extra_video_window release]; [o_extra_video_window release];
o_extra_video_window = nil;
}
[super dealloc]; [super dealloc];
} }
...@@ -1991,7 +1994,7 @@ static VLCMainWindow *_o_sharedInstance = nil; ...@@ -1991,7 +1994,7 @@ static VLCMainWindow *_o_sharedInstance = nil;
NSRect screen_rect; NSRect screen_rect;
NSRect rect; NSRect rect;
BOOL blackout_other_displays = config_GetInt( VLCIntf, "macosx-black" ); BOOL blackout_other_displays = config_GetInt( VLCIntf, "macosx-black" );
id o_videoWindow = b_nonembedded ? o_detached_video_window : self; o_current_video_window = [o_video_view window];
screen = [NSScreen screenWithDisplayID:(CGDirectDisplayID)config_GetInt( VLCIntf, "macosx-vdev" )]; screen = [NSScreen screenWithDisplayID:(CGDirectDisplayID)config_GetInt( VLCIntf, "macosx-vdev" )];
[self lockFullscreenAnimation]; [self lockFullscreenAnimation];
...@@ -1999,7 +2002,7 @@ static VLCMainWindow *_o_sharedInstance = nil; ...@@ -1999,7 +2002,7 @@ static VLCMainWindow *_o_sharedInstance = nil;
if (!screen) if (!screen)
{ {
msg_Dbg( VLCIntf, "chosen screen isn't present, using current screen for fullscreen mode" ); msg_Dbg( VLCIntf, "chosen screen isn't present, using current screen for fullscreen mode" );
screen = [o_videoWindow screen]; screen = [o_current_video_window screen];
} }
if (!screen) if (!screen)
{ {
...@@ -2019,8 +2022,8 @@ static VLCMainWindow *_o_sharedInstance = nil; ...@@ -2019,8 +2022,8 @@ static VLCMainWindow *_o_sharedInstance = nil;
[screen blackoutOtherScreens]; [screen blackoutOtherScreens];
/* Make sure we don't see the window flashes in float-on-top mode */ /* Make sure we don't see the window flashes in float-on-top mode */
i_originalLevel = [o_videoWindow level]; i_originalLevel = [o_current_video_window level];
[o_videoWindow setLevel:NSNormalWindowLevel]; [o_current_video_window setLevel:NSNormalWindowLevel];
/* Only create the o_fullscreen_window if we are not in the middle of the zooming animation */ /* Only create the o_fullscreen_window if we are not in the middle of the zooming animation */
if (!o_fullscreen_window) if (!o_fullscreen_window)
...@@ -2028,14 +2031,14 @@ static VLCMainWindow *_o_sharedInstance = nil; ...@@ -2028,14 +2031,14 @@ static VLCMainWindow *_o_sharedInstance = nil;
/* We can't change the styleMask of an already created NSWindow, so we create another window, and do eye catching stuff */ /* We can't change the styleMask of an already created NSWindow, so we create another window, and do eye catching stuff */
rect = [[o_video_view superview] convertRect: [o_video_view frame] toView: nil]; /* Convert to Window base coord */ rect = [[o_video_view superview] convertRect: [o_video_view frame] toView: nil]; /* Convert to Window base coord */
rect.origin.x += [o_videoWindow frame].origin.x; rect.origin.x += [o_current_video_window frame].origin.x;
rect.origin.y += [o_videoWindow frame].origin.y; rect.origin.y += [o_current_video_window frame].origin.y;
o_fullscreen_window = [[VLCWindow alloc] initWithContentRect:rect styleMask: NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:YES]; o_fullscreen_window = [[VLCWindow alloc] initWithContentRect:rect styleMask: NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:YES];
[o_fullscreen_window setBackgroundColor: [NSColor blackColor]]; [o_fullscreen_window setBackgroundColor: [NSColor blackColor]];
[o_fullscreen_window setCanBecomeKeyWindow: YES]; [o_fullscreen_window setCanBecomeKeyWindow: YES];
[o_fullscreen_window setCanBecomeMainWindow: YES]; [o_fullscreen_window setCanBecomeMainWindow: YES];
if (![o_videoWindow isVisible] || [o_videoWindow alphaValue] == 0.0) if (![o_current_video_window isVisible] || [o_current_video_window alphaValue] == 0.0)
{ {
/* We don't animate if we are not visible, instead we /* We don't animate if we are not visible, instead we
* simply fade the display */ * simply fade the display */
...@@ -2090,7 +2093,7 @@ static VLCMainWindow *_o_sharedInstance = nil; ...@@ -2090,7 +2093,7 @@ static VLCMainWindow *_o_sharedInstance = nil;
if (b_fullscreen) if (b_fullscreen)
{ {
/* Make sure we are hidden */ /* Make sure we are hidden */
[o_videoWindow orderOut: self]; [o_current_video_window orderOut: self];
[self unlockFullscreenAnimation]; [self unlockFullscreenAnimation];
return; return;
...@@ -2118,7 +2121,7 @@ static VLCMainWindow *_o_sharedInstance = nil; ...@@ -2118,7 +2121,7 @@ static VLCMainWindow *_o_sharedInstance = nil;
dict1 = [[NSMutableDictionary alloc] initWithCapacity:2]; dict1 = [[NSMutableDictionary alloc] initWithCapacity:2];
dict2 = [[NSMutableDictionary alloc] initWithCapacity:3]; dict2 = [[NSMutableDictionary alloc] initWithCapacity:3];
[dict1 setObject:o_videoWindow forKey:NSViewAnimationTargetKey]; [dict1 setObject:o_current_video_window forKey:NSViewAnimationTargetKey];
[dict1 setObject:NSViewAnimationFadeOutEffect forKey:NSViewAnimationEffectKey]; [dict1 setObject:NSViewAnimationFadeOutEffect forKey:NSViewAnimationEffectKey];
[dict2 setObject:o_fullscreen_window forKey:NSViewAnimationTargetKey]; [dict2 setObject:o_fullscreen_window forKey:NSViewAnimationTargetKey];
...@@ -2161,9 +2164,8 @@ static VLCMainWindow *_o_sharedInstance = nil; ...@@ -2161,9 +2164,8 @@ static VLCMainWindow *_o_sharedInstance = nil;
[o_fspanel setVoutWasUpdated: (int)[[o_fullscreen_window screen] displayID]]; [o_fspanel setVoutWasUpdated: (int)[[o_fullscreen_window screen] displayID]];
[o_fspanel setActive: nil]; [o_fspanel setActive: nil];
id o_videoWindow = b_nonembedded ? o_detached_video_window : self; if( [o_current_video_window isVisible] )
if( [o_videoWindow isVisible] ) [o_current_video_window orderOut: self];
[o_videoWindow orderOut: self];
b_fullscreen = YES; b_fullscreen = YES;
[self unlockFullscreenAnimation]; [self unlockFullscreenAnimation];
...@@ -2180,6 +2182,9 @@ static VLCMainWindow *_o_sharedInstance = nil; ...@@ -2180,6 +2182,9 @@ static VLCMainWindow *_o_sharedInstance = nil;
NSRect frame; NSRect frame;
BOOL blackout_other_displays = config_GetInt( VLCIntf, "macosx-black" ); BOOL blackout_other_displays = config_GetInt( VLCIntf, "macosx-black" );
if( !o_current_video_window )
return;
[self lockFullscreenAnimation]; [self lockFullscreenAnimation];
[o_fullscreen_btn setState: NO]; [o_fullscreen_btn setState: NO];
...@@ -2241,10 +2246,8 @@ static VLCMainWindow *_o_sharedInstance = nil; ...@@ -2241,10 +2246,8 @@ static VLCMainWindow *_o_sharedInstance = nil;
return; return;
} }
id o_videoWindow = b_nonembedded ? o_detached_video_window : self; [o_current_video_window setAlphaValue: 0.0];
[o_current_video_window orderFront: self];
[o_videoWindow setAlphaValue: 0.0];
[o_videoWindow orderFront: self];
[[o_video_view window] orderFront: self]; [[o_video_view window] orderFront: self];
[o_fspanel setNonActive: nil]; [o_fspanel setNonActive: nil];
...@@ -2265,11 +2268,11 @@ static VLCMainWindow *_o_sharedInstance = nil; ...@@ -2265,11 +2268,11 @@ static VLCMainWindow *_o_sharedInstance = nil;
} }
frame = [[o_temp_view superview] convertRect: [o_temp_view frame] toView: nil]; /* Convert to Window base coord */ frame = [[o_temp_view superview] convertRect: [o_temp_view frame] toView: nil]; /* Convert to Window base coord */
frame.origin.x += [o_videoWindow frame].origin.x; frame.origin.x += [o_current_video_window frame].origin.x;
frame.origin.y += [o_videoWindow frame].origin.y; frame.origin.y += [o_current_video_window frame].origin.y;
dict2 = [[NSMutableDictionary alloc] initWithCapacity:2]; dict2 = [[NSMutableDictionary alloc] initWithCapacity:2];
[dict2 setObject:o_videoWindow forKey:NSViewAnimationTargetKey]; [dict2 setObject:o_current_video_window forKey:NSViewAnimationTargetKey];
[dict2 setObject:NSViewAnimationFadeInEffect forKey:NSViewAnimationEffectKey]; [dict2 setObject:NSViewAnimationFadeInEffect forKey:NSViewAnimationEffectKey];
o_fullscreen_anim2 = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObjects:dict2, nil]]; o_fullscreen_anim2 = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObjects:dict2, nil]];
...@@ -2330,8 +2333,9 @@ static VLCMainWindow *_o_sharedInstance = nil; ...@@ -2330,8 +2333,9 @@ static VLCMainWindow *_o_sharedInstance = nil;
// if we quit fullscreen because there is no video anymore, make sure non-embedded window is not visible // if we quit fullscreen because there is no video anymore, make sure non-embedded window is not visible
if( ![[VLCMain sharedInstance] activeVideoPlayback] && b_nonembedded ) if( ![[VLCMain sharedInstance] activeVideoPlayback] && b_nonembedded )
[o_detached_video_window orderOut: self]; [o_current_video_window orderOut: self];
o_current_video_window = nil;
[self unlockFullscreenAnimation]; [self unlockFullscreenAnimation];
} }
......
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