vlc | branch: master | David Fuhrmann <[email protected]> | Mon Jul 23 13:48:08 2012 +0200| [081ecbd5877e21f4358368615f5928554a5cb141] | committer: David Fuhrmann
macosx: make fullscreen compatible with macosx-background refs #5174 > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=081ecbd5877e21f4358368615f5928554a5cb141 --- modules/gui/macosx/MainWindow.h | 1 + modules/gui/macosx/MainWindow.m | 46 +++++++++++++++++++++------------------ 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/modules/gui/macosx/MainWindow.h b/modules/gui/macosx/MainWindow.h index 55239d8..d379ca1 100644 --- a/modules/gui/macosx/MainWindow.h +++ b/modules/gui/macosx/MainWindow.h @@ -143,6 +143,7 @@ NSRect previousSavedFrame; VLCWindow *o_extra_video_window; + id o_current_video_window; } + (VLCMainWindow *)sharedInstance; diff --git a/modules/gui/macosx/MainWindow.m b/modules/gui/macosx/MainWindow.m index d1efa66..5c85b55 100644 --- a/modules/gui/macosx/MainWindow.m +++ b/modules/gui/macosx/MainWindow.m @@ -150,7 +150,10 @@ static VLCMainWindow *_o_sharedInstance = nil; [o_sidebaritems release]; if( o_extra_video_window ) + { [o_extra_video_window release]; + o_extra_video_window = nil; + } [super dealloc]; } @@ -1991,15 +1994,15 @@ static VLCMainWindow *_o_sharedInstance = nil; NSRect screen_rect; NSRect rect; 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" )]; [self lockFullscreenAnimation]; if (!screen) { 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) { @@ -2019,8 +2022,8 @@ static VLCMainWindow *_o_sharedInstance = nil; [screen blackoutOtherScreens]; /* Make sure we don't see the window flashes in float-on-top mode */ - i_originalLevel = [o_videoWindow level]; - [o_videoWindow setLevel:NSNormalWindowLevel]; + i_originalLevel = [o_current_video_window level]; + [o_current_video_window setLevel:NSNormalWindowLevel]; /* Only create the o_fullscreen_window if we are not in the middle of the zooming animation */ if (!o_fullscreen_window) @@ -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 */ 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.y += [o_videoWindow frame].origin.y; + rect.origin.x += [o_current_video_window frame].origin.x; + 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 setBackgroundColor: [NSColor blackColor]]; [o_fullscreen_window setCanBecomeKeyWindow: 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 * simply fade the display */ @@ -2090,7 +2093,7 @@ static VLCMainWindow *_o_sharedInstance = nil; if (b_fullscreen) { /* Make sure we are hidden */ - [o_videoWindow orderOut: self]; + [o_current_video_window orderOut: self]; [self unlockFullscreenAnimation]; return; @@ -2118,7 +2121,7 @@ static VLCMainWindow *_o_sharedInstance = nil; dict1 = [[NSMutableDictionary alloc] initWithCapacity:2]; dict2 = [[NSMutableDictionary alloc] initWithCapacity:3]; - [dict1 setObject:o_videoWindow forKey:NSViewAnimationTargetKey]; + [dict1 setObject:o_current_video_window forKey:NSViewAnimationTargetKey]; [dict1 setObject:NSViewAnimationFadeOutEffect forKey:NSViewAnimationEffectKey]; [dict2 setObject:o_fullscreen_window forKey:NSViewAnimationTargetKey]; @@ -2161,9 +2164,8 @@ static VLCMainWindow *_o_sharedInstance = nil; [o_fspanel setVoutWasUpdated: (int)[[o_fullscreen_window screen] displayID]]; [o_fspanel setActive: nil]; - id o_videoWindow = b_nonembedded ? o_detached_video_window : self; - if( [o_videoWindow isVisible] ) - [o_videoWindow orderOut: self]; + if( [o_current_video_window isVisible] ) + [o_current_video_window orderOut: self]; b_fullscreen = YES; [self unlockFullscreenAnimation]; @@ -2180,6 +2182,9 @@ static VLCMainWindow *_o_sharedInstance = nil; NSRect frame; BOOL blackout_other_displays = config_GetInt( VLCIntf, "macosx-black" ); + if( !o_current_video_window ) + return; + [self lockFullscreenAnimation]; [o_fullscreen_btn setState: NO]; @@ -2241,10 +2246,8 @@ static VLCMainWindow *_o_sharedInstance = nil; return; } - id o_videoWindow = b_nonembedded ? o_detached_video_window : self; - - [o_videoWindow setAlphaValue: 0.0]; - [o_videoWindow orderFront: self]; + [o_current_video_window setAlphaValue: 0.0]; + [o_current_video_window orderFront: self]; [[o_video_view window] orderFront: self]; [o_fspanel setNonActive: 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.origin.x += [o_videoWindow frame].origin.x; - frame.origin.y += [o_videoWindow frame].origin.y; + frame.origin.x += [o_current_video_window frame].origin.x; + frame.origin.y += [o_current_video_window frame].origin.y; dict2 = [[NSMutableDictionary alloc] initWithCapacity:2]; - [dict2 setObject:o_videoWindow forKey:NSViewAnimationTargetKey]; + [dict2 setObject:o_current_video_window forKey:NSViewAnimationTargetKey]; [dict2 setObject:NSViewAnimationFadeInEffect forKey:NSViewAnimationEffectKey]; o_fullscreen_anim2 = [[NSViewAnimation alloc] initWithViewAnimations:[NSArray arrayWithObjects:dict2, 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( ![[VLCMain sharedInstance] activeVideoPlayback] && b_nonembedded ) - [o_detached_video_window orderOut: self]; + [o_current_video_window orderOut: self]; + o_current_video_window = nil; [self unlockFullscreenAnimation]; } _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
