macosx: make fullscreen compatible with macosx-background
authorDavid Fuhrmann <david.fuhrmann@googlemail.com>
Mon, 23 Jul 2012 11:48:08 +0000 (13:48 +0200)
committerDavid Fuhrmann <david.fuhrmann@googlemail.com>
Mon, 23 Jul 2012 12:16:36 +0000 (14:16 +0200)
refs #5174

modules/gui/macosx/MainWindow.h
modules/gui/macosx/MainWindow.m

index 55239d8..d379ca1 100644 (file)
     NSRect previousSavedFrame;
 
     VLCWindow *o_extra_video_window;
+    id o_current_video_window;
 }
 + (VLCMainWindow *)sharedInstance;
 
index d1efa66..5c85b55 100644 (file)
@@ -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];
 }