]> git.sesse.net Git - vlc/blobdiff - modules/gui/macosx/MainWindow.m
macosx: fixed crash when rebuilding the sidebar too often
[vlc] / modules / gui / macosx / MainWindow.m
index b3c3cbeb60f50e9b537d71e06cea0db732a15092..fa308f20d9578b1569186475802d87d883f872d4 100644 (file)
@@ -80,7 +80,7 @@ static VLCMainWindow *_o_sharedInstance = nil;
     [self setMovableByWindowBackground: YES];
 
     /* we don't want this window to be restored on relaunch */
-    if ([self respondsToSelector:@selector(setRestorable:)])
+    if (OSX_LION)
         [self setRestorable:NO];
 
     return self;
@@ -107,6 +107,7 @@ static VLCMainWindow *_o_sharedInstance = nil;
 {
     /* setup the styled interface */
     b_dark_interface = config_GetInt( VLCIntf, "macosx-interfacestyle" );
+    b_nativeFullscreenMode = config_GetInt( VLCIntf, "macosx-nativefullscreenmode" );
     i_lastShownVolume = -1;
 
     [o_play_btn setToolTip: _NS("Play/Pause")];
@@ -156,8 +157,16 @@ static VLCMainWindow *_o_sharedInstance = nil;
         [o_volume_down_btn setImage: [NSImage imageNamed:@"volume-low"]];
         [o_volume_track_view setImage: [NSImage imageNamed:@"volume-slider-track"]];
         [o_volume_up_btn setImage: [NSImage imageNamed:@"volume-high"]];
-        [o_effects_btn setImage: [NSImage imageNamed:@"effects-double-buttons"]];
-        [o_effects_btn setAlternateImage: [NSImage imageNamed:@"effects-double-buttons-pressed"]];
+        if (OSX_LION && b_nativeFullscreenMode)
+        {
+            [o_effects_btn setImage: [NSImage imageNamed:@"effects-one-button"]];
+            [o_effects_btn setAlternateImage: [NSImage imageNamed:@"effects-one-button-blue"]];
+        }
+        else
+        {
+            [o_effects_btn setImage: [NSImage imageNamed:@"effects-double-buttons"]];
+            [o_effects_btn setAlternateImage: [NSImage imageNamed:@"effects-double-buttons-pressed"]];
+        }
         [o_fullscreen_btn setImage: [NSImage imageNamed:@"fullscreen-double-buttons"]];
         [o_fullscreen_btn setAlternateImage: [NSImage imageNamed:@"fullscreen-double-buttons-pressed"]];
         [o_time_sld_fancygradient_view loadImagesInDarkStyle:NO];
@@ -195,8 +204,16 @@ static VLCMainWindow *_o_sharedInstance = nil;
         [o_volume_down_btn setImage: [NSImage imageNamed:@"volume-low_dark"]];
         [o_volume_track_view setImage: [NSImage imageNamed:@"volume-slider-track_dark"]];
         [o_volume_up_btn setImage: [NSImage imageNamed:@"volume-high_dark"]];
-        [o_effects_btn setImage: [NSImage imageNamed:@"effects-double-buttons_dark"]];
-        [o_effects_btn setAlternateImage: [NSImage imageNamed:@"effects-double-buttons-pressed_dark"]];
+        if (OSX_LION && b_nativeFullscreenMode)
+        {
+            [o_effects_btn setImage: [NSImage imageNamed:@"effects-one-button_dark"]];
+            [o_effects_btn setAlternateImage: [NSImage imageNamed:@"effects-one-button-blue_dark"]];
+        }
+        else
+        {
+            [o_effects_btn setImage: [NSImage imageNamed:@"effects-double-buttons_dark"]];
+            [o_effects_btn setAlternateImage: [NSImage imageNamed:@"effects-double-buttons-pressed_dark"]];            
+        }
         [o_fullscreen_btn setImage: [NSImage imageNamed:@"fullscreen-double-buttons_dark"]];
         [o_fullscreen_btn setAlternateImage: [NSImage imageNamed:@"fullscreen-double-buttons-pressed_dark"]];
         [o_time_sld_fancygradient_view loadImagesInDarkStyle:YES];
@@ -219,8 +236,40 @@ static VLCMainWindow *_o_sharedInstance = nil;
     o_temp_view = [[NSView alloc] init];
     [o_temp_view setAutoresizingMask:NSViewHeightSizable | NSViewWidthSizable];
     [o_dropzone_view setFrame: [o_playlist_table frame]];
-    if (OSX_LION)
+    [o_left_split_view setFrame: [o_sidebar_view frame]];
+    if (OSX_LION && b_nativeFullscreenMode)
+    {
         [self setCollectionBehavior: NSWindowCollectionBehaviorFullScreenPrimary];
+        NSRect frame;
+        float f_width = [o_fullscreen_btn frame].size.width;
+
+        #define moveItem( item ) \
+        frame = [item frame]; \
+        frame.origin.x = f_width + frame.origin.x; \
+        [item setFrame: frame]
+
+        moveItem( o_effects_btn );
+        moveItem( o_volume_up_btn );
+        moveItem( o_volume_sld );
+        moveItem( o_volume_track_view );
+        moveItem( o_volume_down_btn );
+        moveItem( o_time_fld );
+        moveItem( o_time_sld_right_view );
+        #undef moveItem
+
+        #define enlargeItem( item ) \
+        frame = [item frame]; \
+        frame.size.width = f_width + frame.size.width; \
+        [item setFrame: frame]
+
+        enlargeItem( o_time_sld );
+        enlargeItem( o_progress_bar );
+        enlargeItem( o_time_sld_middle_view );
+        enlargeItem( o_time_sld_fancygradient_view );
+        #undef enlargeItem
+
+        [o_fullscreen_btn removeFromSuperviewWithoutNeedingDisplay];
+    }
 
     /* create the sidebar */
     o_sidebaritems = [[NSMutableArray alloc] init];
@@ -415,17 +464,18 @@ static VLCMainWindow *_o_sharedInstance = nil;
     if (!b_nonembedded)
     {
         if ([o_video_view isHidden] && [o_playlist_btn isEnabled]) {
-            [o_playlist_table setHidden: YES];
+            [o_split_view setHidden: YES];
             [o_video_view setHidden: NO];
         }
         else
         {
             [o_video_view setHidden: YES];
-            [o_playlist_table setHidden: NO];
+            [o_split_view setHidden: NO];
         }
     }
     else
     {
+        [o_split_view setHidden: NO];
         [o_playlist_table setHidden: NO];
         [o_video_view setHidden: ![[VLCMain sharedInstance] activeVideoPlayback]];
     }
@@ -691,6 +741,7 @@ static VLCMainWindow *_o_sharedInstance = nil;
         [self setTitle: _NS("VLC media player")];
         [self setRepresentedURL: nil];
     }
+
     [o_pool release];
 }
 
@@ -857,7 +908,7 @@ static VLCMainWindow *_o_sharedInstance = nil;
 
 - (void)resizeWindow
 {
-    if ( !b_fullscreen && !(OSX_LION && [NSApp currentSystemPresentationOptions] == NSApplicationPresentationFullScreen) )
+    if ( !b_fullscreen && !(OSX_LION && [NSApp currentSystemPresentationOptions] == NSApplicationPresentationFullScreen && b_nativeFullscreenMode) )
     {
         NSPoint topleftbase;
         NSPoint topleftscreen;
@@ -1403,12 +1454,25 @@ static VLCMainWindow *_o_sharedInstance = nil;
 
 - (BOOL)sourceList:(PXSourceList*)aSourceList itemHasBadge:(id)item
 {
+    if ([[item identifier] isEqualToString: @"playlist"])
+        return YES;
+
        return [item hasBadge];
 }
 
 
 - (NSInteger)sourceList:(PXSourceList*)aSourceList badgeValueForItem:(id)item
 {
+    if ([[item identifier] isEqualToString: @"playlist"]) {
+        playlist_t * p_playlist = pl_Get( VLCIntf );
+        NSInteger i_playlist_size;
+
+        PL_LOCK;
+        i_playlist_size = playlist_CurrentSize( p_playlist );
+        PL_UNLOCK;
+
+        return i_playlist_size;
+    }
        return [item badgeValue];
 }