* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
+#import "CompatibilityFixes.h"
#import "MainWindow.h"
#import "intf.h"
#import "CoreInteraction.h"
[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;
{
/* 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")];
[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];
[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];
o_temp_view = [[NSView alloc] init];
[o_temp_view setAutoresizingMask:NSViewHeightSizable | NSViewWidthSizable];
[o_dropzone_view setFrame: [o_playlist_table frame]];
+ [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];
- (IBAction)togglePlaylist:(id)sender
{
- if ([o_video_view isHidden] && [o_playlist_btn isEnabled]) {
- [o_playlist_table setHidden: YES];
- [o_video_view setHidden: NO];
+ if (!b_nonembedded)
+ {
+ if ([o_video_view isHidden] && [o_playlist_btn isEnabled]) {
+ [o_split_view setHidden: YES];
+ [o_video_view setHidden: NO];
+ }
+ else
+ {
+ [o_video_view setHidden: YES];
+ [o_split_view setHidden: NO];
+ }
}
else
{
- [o_video_view setHidden: YES];
+ [o_split_view setHidden: NO];
[o_playlist_table setHidden: NO];
+ [o_video_view setHidden: ![[VLCMain sharedInstance] activeVideoPlayback]];
}
}
char *uri = input_item_GetURI( input_GetItem( p_input ) );
- if ([aString isEqualToString:@""])
- {
-
- char *file = uri ? strrchr( uri, '/' ) : NULL;
- if( file != NULL )
- {
- decode_URI( ++file );
- aString = [NSString stringWithUTF8String:file];
- }
- else
- aString = [NSString stringWithUTF8String:uri];
- }
-
- NSMutableString *o_mrl = [NSMutableString stringWithUTF8String: decode_URI(uri)];
+ NSURL * o_url = [NSURL URLWithString: [NSString stringWithUTF8String: uri]];
+ if ([o_url isFileURL])
+ [self setRepresentedURL: o_url];
+ else
+ [self setRepresentedURL: nil];
free( uri );
- NSRange prefix_range = [o_mrl rangeOfString: @"file:"];
- if( prefix_range.location != NSNotFound )
- [o_mrl deleteCharactersInRange: prefix_range];
- if( [o_mrl characterAtIndex:0] == '/' )
- {
- /* it's a local file */
- [self setRepresentedFilename: o_mrl];
- }
- else
+ if ([aString isEqualToString:@""])
{
- /* it's from the network or somewhere else,
- * we clear the previous path */
- [self setRepresentedFilename: @""];
+ if ([o_url isFileURL])
+ aString = [[NSFileManager defaultManager] displayNameAtPath: [o_url path]];
+ else
+ aString = [o_url absoluteString];
}
[self setTitle: aString];
else
{
[self setTitle: _NS("VLC media player")];
- [self setRepresentedFilename: @""];
+ [self setRepresentedURL: nil];
}
+
[o_pool release];
}
- (id)videoView
{
+ vout_thread_t *p_vout = getVout();
+ if (config_GetInt( VLCIntf, "embedded-video" ))
+ {
+ if ([o_video_view window] != self)
+ {
+ [o_video_view removeFromSuperviewWithoutNeedingDisplay];
+ [o_video_view setFrame: [o_split_view frame]];
+ [[self contentView] addSubview:o_video_view positioned:NSWindowAbove relativeTo:nil];
+ }
+ b_nonembedded = NO;
+ }
+ else
+ {
+ [o_video_view removeFromSuperviewWithoutNeedingDisplay];
+ if (o_nonembedded_window)
+ [o_nonembedded_window release];
+
+ o_nonembedded_window = [[VLCWindow alloc] initWithContentRect:[o_video_view frame] styleMask: NSBorderlessWindowMask|NSResizableWindowMask backing:NSBackingStoreBuffered defer:YES];
+ [o_nonembedded_window setFrame:[o_video_view frame] display:NO];
+ [o_nonembedded_window setBackgroundColor: [NSColor blackColor]];
+ [o_nonembedded_window setMovableByWindowBackground: YES];
+ [o_nonembedded_window setCanBecomeKeyWindow: YES];
+ [o_nonembedded_window setHasShadow:YES];
+ [o_nonembedded_window setContentView: o_video_view];
+ [o_nonembedded_window setLevel:NSNormalWindowLevel];
+ [o_nonembedded_window useOptimizedDrawing: YES];
+ [o_nonembedded_window center];
+ [o_nonembedded_window makeKeyAndOrderFront:self];
+ [o_nonembedded_window orderFront:self animate:YES];
+ [o_nonembedded_window setReleasedWhenClosed:NO];
+ b_nonembedded = YES;
+ }
+
+ if (p_vout)
+ {
+ if( var_GetBool( p_vout, "video-on-top" ) )
+ [[o_video_view window] setLevel: NSStatusWindowLevel];
+ else
+ [[o_video_view window] setLevel: NSNormalWindowLevel];
+ vlc_object_release( p_vout );
+ }
return o_video_view;
}
- (void)setVideoplayEnabled
{
- [o_playlist_btn setEnabled: [[VLCMain sharedInstance] activeVideoPlayback]];
+ if (!b_nonembedded)
+ [o_playlist_btn setEnabled: [[VLCMain sharedInstance] activeVideoPlayback]];
+ else
+ {
+ [o_playlist_btn setEnabled: NO];
+ if (![[VLCMain sharedInstance] activeVideoPlayback])
+ [o_nonembedded_window orderOut: nil];
+ }
}
- (void)resizeWindow
{
- if ( !b_fullscreen )
+ if ( !b_fullscreen && !(OSX_LION && [NSApp currentSystemPresentationOptions] == NSApplicationPresentationFullScreen && b_nativeFullscreenMode) )
{
NSPoint topleftbase;
NSPoint topleftscreen;
}
if ([screen isMainScreen])
- SetSystemUIMode( kUIModeAllHidden, kUIOptionAutoShowMenuBar);
+ {
+ if (OSX_LEOPARD)
+ SetSystemUIMode( kUIModeAllHidden, kUIOptionAutoShowMenuBar);
+ else
+ [NSApp setPresentationOptions:(NSApplicationPresentationAutoHideDock | NSApplicationPresentationAutoHideMenuBar)];
+ }
[[o_video_view superview] replaceSubview:o_video_view with:o_temp_view];
[o_temp_view setFrame:[o_video_view frame]];
}
if ([screen isMainScreen])
- SetSystemUIMode( kUIModeAllHidden, kUIOptionAutoShowMenuBar);
+ {
+ if (OSX_LEOPARD)
+ SetSystemUIMode( kUIModeAllHidden, kUIOptionAutoShowMenuBar);
+ else
+ [NSApp setPresentationOptions:(NSApplicationPresentationAutoHideDock | NSApplicationPresentationAutoHideMenuBar)];
+ }
dict1 = [[NSMutableDictionary alloc] initWithCapacity:2];
dict2 = [[NSMutableDictionary alloc] initWithCapacity:3];
if (p_vout)
{
if( var_GetBool( p_vout, "video-on-top" ) )
- [self setLevel: NSStatusWindowLevel];
+ [[o_video_view window] setLevel: NSStatusWindowLevel];
else
- [self setLevel: NSNormalWindowLevel];
+ [[o_video_view window] setLevel: NSNormalWindowLevel];
vlc_object_release( p_vout );
}
- [self makeKeyAndOrderFront: nil];
+ [[o_video_view window] makeKeyAndOrderFront: nil];
/* Don't do anything if o_fullscreen_window is already closed */
if (!o_fullscreen_window)
}
[o_fspanel setNonActive: nil];
- SetSystemUIMode( kUIModeNormal, kUIOptionAutoShowMenuBar);
+ if (OSX_LEOPARD)
+ SetSystemUIMode( kUIModeNormal, kUIOptionAutoShowMenuBar);
+ else
+ [NSApp setPresentationOptions:(NSApplicationPresentationDefault)];
/* Will release the lock */
[self hasEndedFullscreen];
[self setAlphaValue: 0.0];
[self orderFront: self];
+ [[o_video_view window] orderFront: self];
[o_fspanel setNonActive: nil];
- SetSystemUIMode( kUIModeNormal, kUIOptionAutoShowMenuBar);
+ if (OSX_LEOPARD)
+ SetSystemUIMode( kUIModeNormal, kUIOptionAutoShowMenuBar);
+ else
+ [NSApp setPresentationOptions:(NSApplicationPresentationDefault)];
if (o_fullscreen_anim1)
{
/* fullscreenAnimation will be unlocked when animation ends */
}
-
-
/* Make sure setFrame gets executed on main thread especially if we are animating.
* (Thus we won't block the video output thread) */
- (void)setFrame:(NSRect)frame display:(BOOL)display animate:(BOOL)animate
- (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];
}