#include <vlc_osd.h>
#include <vlc_keys.h>
-/*****************************************************************************
- * VLCAutoGeneratedMenuContent interface
- *****************************************************************************
- * This holds our data for autogenerated menus
- *****************************************************************************/
-@interface VLCAutoGeneratedMenuContent : NSObject
-{
- char *psz_name;
- vlc_object_t * _vlc_object;
- vlc_value_t value;
- int i_type;
-}
-
-- (id)initWithVariableName: (const char *)name
- ofObject: (vlc_object_t *)object
- andValue: (vlc_value_t)value
- ofType: (int)type;
-- (const char *)name;
-- (vlc_value_t)value;
-- (vlc_object_t *)vlcObject;
-- (int)type;
-
-@end
-
#pragma mark -
/*****************************************************************************
* VLCControls implementation
{
[super init];
o_fs_panel = [[VLCFSPanel alloc] init];
+ b_lockAspectRatio = YES;
return self;
}
{
o_repeat_single = [NSImage imageNamed:@"repeat_single_embedded_graphite"];
o_repeat_all = [NSImage imageNamed:@"repeat_embedded_graphite"];
-
+
[o_btn_shuffle setAlternateImage: [NSImage imageNamed: @"shuffle_embedded_graphite"]];
[o_btn_addNode setAlternateImage: [NSImage imageNamed: @"add_embedded_graphite"]];
}
{
o_repeat_single = [NSImage imageNamed:@"repeat_single_embedded_blue"];
o_repeat_all = [NSImage imageNamed:@"repeat_embedded_blue"];
-
+
[o_btn_shuffle setAlternateImage: [NSImage imageNamed: @"shuffle_embedded_blue"]];
[o_btn_addNode setAlternateImage: [NSImage imageNamed: @"add_embedded_blue"]];
}
-
+
/* update the repeat button, but keep its state */
if( i_repeat == 1 )
[self repeatOne];
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver: self];
-
+
+ [o_fs_panel release];
[o_repeat_single release];
[o_repeat_all release];
[o_repeat_off release];
-
+
[super dealloc];
}
- (IBAction)play:(id)sender
{
intf_thread_t * p_intf = VLCIntf;
- playlist_t * p_playlist = pl_Hold( p_intf );
+ playlist_t * p_playlist = pl_Get( p_intf );
bool empty;
PL_LOCK;
empty = playlist_IsEmpty( p_playlist );
PL_UNLOCK;
- pl_Release( p_intf );
-
if( empty )
[o_main intfOpenFileGeneric: (id)sender];
- (id)voutView
{
- id window;
- id voutView = nil;
- id embeddedViewList = [[VLCMain sharedInstance] embeddedList];
- NSEnumerator *enumerator = [[NSApp orderedWindows] objectEnumerator];
- while( !voutView && ( window = [enumerator nextObject] ) )
+ id o_window;
+ id o_voutView = nil;
+ id o_embeddedViewList = [[VLCMain sharedInstance] embeddedList];
+ NSEnumerator *o_enumerator = [[NSApp orderedWindows] objectEnumerator];
+ while( !o_voutView && ( o_window = [o_enumerator nextObject] ) )
{
/* We have an embedded vout */
- if( [embeddedViewList windowContainsEmbedded: window] )
+ if( [o_embeddedViewList windowContainsEmbedded: o_window] )
{
- voutView = [embeddedViewList viewForWindow: window];
+ o_voutView = [o_embeddedViewList viewForWindow: o_window];
}
/* We have a detached vout */
- else if( [[window className] isEqualToString: @"VLCVoutWindow"] )
+ else if( [[o_window className] isEqualToString: @"VLCVoutWindow"] )
{
- voutView = [window voutView];
+ o_voutView = [o_window voutView];
}
}
- return [[voutView retain] autorelease];
+ return [[o_voutView retain] autorelease];
+}
+
+- (BOOL)aspectRatioIsLocked
+{
+ return b_lockAspectRatio;
}
- (IBAction)stop:(id)sender
var_SetInteger( p_intf->p_libvlc, "key-action", ACTIONID_SLOWER );
}
+- (IBAction)normalSpeed:(id)sender
+{
+ intf_thread_t * p_intf = VLCIntf;
+ var_SetInteger( p_intf->p_libvlc, "key-action", ACTIONID_RATE_NORMAL );
+}
+
- (IBAction)prev:(id)sender
{
intf_thread_t * p_intf = VLCIntf;
{
vlc_value_t val;
intf_thread_t * p_intf = VLCIntf;
- playlist_t * p_playlist = pl_Hold( p_intf );
+ playlist_t * p_playlist = pl_Get( p_intf );
var_Get( p_playlist, "random", &val );
val.b_bool = !val.b_bool;
var_Set( p_playlist, "random", val );
if( val.b_bool )
{
- vout_OSDMessage( p_intf, DEFAULT_CHAN, _( "Random On" ) );
+ //vout_OSDMessage( p_intf, SPU_DEFAULT_CHANNEL, "%s", _( "Random On" ) );
config_PutInt( p_playlist, "random", 1 );
}
else
{
- vout_OSDMessage( p_intf, DEFAULT_CHAN, _( "Random Off" ) );
+ //vout_OSDMessage( p_intf, SPU_DEFAULT_CHANNEL, "%s", _( "Random Off" ) );
config_PutInt( p_playlist, "random", 0 );
}
p_intf->p_sys->b_playmode_update = true;
p_intf->p_sys->b_intf_update = true;
- pl_Release( p_intf );
}
/* three little ugly helpers */
{
[o_btn_repeat setImage: o_repeat_single];
[o_btn_repeat setAlternateImage: o_repeat_all];
+ [o_btn_repeat_embed setImage: [NSImage imageNamed:@"sidebarRepeatOneOn"]];
}
- (void)repeatAll
{
[o_btn_repeat setImage: o_repeat_all];
[o_btn_repeat setAlternateImage: o_repeat_off];
+ [o_btn_repeat_embed setImage: [NSImage imageNamed:@"sidebarRepeatOn"]];
}
- (void)repeatOff
{
[o_btn_repeat setImage: o_repeat_off];
[o_btn_repeat setAlternateImage: o_repeat_single];
+ [o_btn_repeat_embed setImage: [NSImage imageNamed:@"sidebarRepeat"]];
}
- (void)shuffle
{
vlc_value_t val;
- playlist_t *p_playlist = pl_Hold( VLCIntf );
+ playlist_t *p_playlist = pl_Get( VLCIntf );
var_Get( p_playlist, "random", &val );
[o_btn_shuffle setState: val.b_bool];
- pl_Release( VLCIntf );
+ if(val.b_bool)
+ [o_btn_shuffle_embed setImage: [NSImage imageNamed:@"sidebarShuffleOn"]];
+ else
+ [o_btn_shuffle_embed setImage: [NSImage imageNamed:@"sidebarShuffle"]];
}
- (IBAction)repeatButtonAction:(id)sender
{
vlc_value_t looping,repeating;
intf_thread_t * p_intf = VLCIntf;
- playlist_t * p_playlist = pl_Hold( p_intf );
+ playlist_t * p_playlist = pl_Get( p_intf );
var_Get( p_playlist, "repeat", &repeating );
var_Get( p_playlist, "loop", &looping );
if( !repeating.b_bool && !looping.b_bool )
{
/* was: no repeating at all, switching to Repeat One */
-
+
/* set our button's look */
[self repeatOne];
-
+
/* prepare core communication */
repeating.b_bool = true;
looping.b_bool = false;
config_PutInt( p_playlist, "repeat", 1 );
config_PutInt( p_playlist, "loop", 0 );
-
+
/* show the change */
- vout_OSDMessage( p_intf, DEFAULT_CHAN, _( "Repeat One" ) );
+ //vout_OSDMessage( p_intf, SPU_DEFAULT_CHANNEL, "%s", _( "Repeat One" ) );
}
else if( repeating.b_bool && !looping.b_bool )
{
/* was: Repeat One, switching to Repeat All */
-
+
/* set our button's look */
[self repeatAll];
-
+
/* prepare core communication */
repeating.b_bool = false;
looping.b_bool = true;
config_PutInt( p_playlist, "repeat", 0 );
config_PutInt( p_playlist, "loop", 1 );
-
+
/* show the change */
- vout_OSDMessage( p_intf, DEFAULT_CHAN, _( "Repeat All" ) );
+ //vout_OSDMessage( p_intf, SPU_DEFAULT_CHANNEL, "%s", _( "Repeat All" ) );
}
else
{
/* was: Repeat All or bug in VLC, switching to Repeat Off */
-
+
/* set our button's look */
[self repeatOff];
-
+
/* prepare core communication */
repeating.b_bool = false;
looping.b_bool = false;
config_PutInt( p_playlist, "repeat", 0 );
config_PutInt( p_playlist, "loop", 0 );
-
+
/* show the change */
- vout_OSDMessage( p_intf, DEFAULT_CHAN, _( "Repeat Off" ) );
+ //vout_OSDMessage( p_intf, SPU_DEFAULT_CHANNEL, "%s", _( "Repeat Off" ) );
}
/* communicate with core and the main intf loop */
var_Set( p_playlist, "loop", looping );
p_intf->p_sys->b_playmode_update = true;
p_intf->p_sys->b_intf_update = true;
-
- pl_Release( p_intf );
}
{
vlc_value_t val;
intf_thread_t * p_intf = VLCIntf;
- playlist_t * p_playlist = pl_Hold( p_intf );
+ playlist_t * p_playlist = pl_Get( p_intf );
var_Get( p_playlist, "repeat", &val );
if (!val.b_bool)
var_Set( p_playlist, "repeat", val );
if( val.b_bool )
{
- vout_OSDMessage( p_intf, DEFAULT_CHAN, _( "Repeat One" ) );
+ //vout_OSDMessage( p_intf, SPU_DEFAULT_CHANNEL, "%s", _( "Repeat One" ) );
config_PutInt( p_playlist, "repeat", 1 );
}
else
{
- vout_OSDMessage( p_intf, DEFAULT_CHAN, _( "Repeat Off" ) );
+ //vout_OSDMessage( p_intf, SPU_DEFAULT_CHANNEL, "%s", _( "Repeat Off" ) );
config_PutInt( p_playlist, "repeat", 0 );
}
-
+
p_intf->p_sys->b_playmode_update = true;
p_intf->p_sys->b_intf_update = true;
- pl_Release( p_intf );
}
- (IBAction)loop:(id)sender
{
vlc_value_t val;
intf_thread_t * p_intf = VLCIntf;
- playlist_t * p_playlist = pl_Hold( p_intf );
+ playlist_t * p_playlist = pl_Get( p_intf );
var_Get( p_playlist, "loop", &val );
if (!val.b_bool)
var_Set( p_playlist, "loop", val );
if( val.b_bool )
{
- vout_OSDMessage( p_intf, DEFAULT_CHAN, _( "Repeat All" ) );
+ //vout_OSDMessage( p_intf, SPU_DEFAULT_CHANNEL, "%s", _( "Repeat All" ) );
config_PutInt( p_playlist, "loop", 1 );
}
else
{
- vout_OSDMessage( p_intf, DEFAULT_CHAN, _( "Repeat Off" ) );
+ //vout_OSDMessage( p_intf, SPU_DEFAULT_CHANNEL, "%s", _( "Repeat Off" ) );
config_PutInt( p_playlist, "loop", 0 );
}
p_intf->p_sys->b_playmode_update = true;
p_intf->p_sys->b_intf_update = true;
- pl_Release( p_intf );
+}
+
+- (IBAction)quitAfterPlayback:(id)sender
+{
+ vlc_value_t val;
+ playlist_t * p_playlist = pl_Get( VLCIntf );
+ var_ToggleBool( p_playlist, "play-and-exit" );
}
- (IBAction)forward:(id)sender
- (IBAction)volumeSliderUpdated:(id)sender
{
intf_thread_t * p_intf = VLCIntf;
+ playlist_t * p_playlist = pl_Get( p_intf );
audio_volume_t i_volume = (audio_volume_t)[sender intValue];
- int i_volume_step = 0;
+ int i_volume_step;
+
i_volume_step = config_GetInt( p_intf->p_libvlc, "volume-step" );
- aout_VolumeSet( p_intf, i_volume * i_volume_step );
+ aout_VolumeSet( p_playlist, i_volume * i_volume_step );
/* Manage volume status */
[o_main manageVolumeSlider];
}
- (IBAction)showPosition: (id)sender
{
- vout_thread_t *p_vout = vlc_object_find( VLCIntf, VLC_OBJECT_VOUT,
- FIND_ANYWHERE );
- if( p_vout != NULL )
+ input_thread_t * p_input = pl_CurrentInput( VLCIntf );
+ if( p_input != NULL )
{
- intf_thread_t * p_intf = VLCIntf;
- var_SetInteger( p_intf->p_libvlc, "key-action", ACTIONID_POSITION );
- vlc_object_release( (vlc_object_t *)p_vout );
+ vout_thread_t *p_vout = input_GetVout( p_input );
+ if( p_vout != NULL )
+ {
+ var_SetInteger( VLCIntf->p_libvlc, "key-action", ACTIONID_POSITION );
+ vlc_object_release( (vlc_object_t *)p_vout );
+ }
+ vlc_object_release( p_input );
}
}
- (IBAction)windowAction:(id)sender
{
NSString *o_title = [sender title];
+ input_thread_t * p_input = pl_CurrentInput( VLCIntf );
- vout_thread_t *p_vout = vlc_object_find( VLCIntf, VLC_OBJECT_VOUT,
- FIND_ANYWHERE );
- if( p_vout != NULL )
+ if( p_input != NULL )
{
- id o_vout_view = [self voutView];
- if( o_vout_view )
+ vout_thread_t *p_vout = input_GetVout( p_input );
+ if( p_vout != NULL )
{
- if( [o_title isEqualToString: _NS("Half Size") ] )
- [o_vout_view scaleWindowWithFactor: 0.5 animate: YES];
- else if( [o_title isEqualToString: _NS("Normal Size") ] )
- [o_vout_view scaleWindowWithFactor: 1.0 animate: YES];
- else if( [o_title isEqualToString: _NS("Double Size") ] )
- [o_vout_view scaleWindowWithFactor: 2.0 animate: YES];
- else if( [o_title isEqualToString: _NS("Float on Top") ] )
- [o_vout_view toggleFloatOnTop];
- else if( [o_title isEqualToString: _NS("Fit to Screen") ] )
- {
- id o_window = [o_vout_view voutWindow];
- if( ![o_window isZoomed] )
- [o_window performZoom:self];
- }
- else if( [o_title isEqualToString: _NS("Snapshot") ] )
+ id o_vout_view = [self voutView];
+ if( o_vout_view )
{
- [o_vout_view snapshot];
- }
- else
- {
- /* Fullscreen state for next time will be saved here too */
- [o_vout_view toggleFullscreen];
+ if( [o_title isEqualToString: _NS("Half Size") ] )
+ [o_vout_view scaleWindowWithFactor: 0.5 animate: YES];
+ else if( [o_title isEqualToString: _NS("Normal Size") ] )
+ [o_vout_view scaleWindowWithFactor: 1.0 animate: YES];
+ else if( [o_title isEqualToString: _NS("Double Size") ] )
+ [o_vout_view scaleWindowWithFactor: 2.0 animate: YES];
+ else if( [o_title isEqualToString: _NS("Float on Top") ] )
+ [o_vout_view toggleFloatOnTop];
+ else if( [o_title isEqualToString: _NS("Fit to Screen") ] )
+ {
+ id o_window = [o_vout_view voutWindow];
+ if( ![o_window isZoomed] )
+ [o_window performZoom:self];
+ }
+ else if( [o_title isEqualToString: _NS("Snapshot") ] )
+ {
+ [o_vout_view snapshot];
+ }
+ else
+ {
+ /* Fullscreen state for next time will be saved here too */
+ [o_vout_view toggleFullscreen];
+ }
}
+ vlc_object_release( (vlc_object_t *)p_vout );
}
- vlc_object_release( (vlc_object_t *)p_vout );
- }
- else
- {
- playlist_t * p_playlist = pl_Hold( VLCIntf );
-
- if( [o_title isEqualToString: _NS("Fullscreen")] ||
- [sender isKindOfClass:[NSButton class]] )
+ else
{
- vlc_value_t val;
- var_Get( p_playlist, "fullscreen", &val );
- var_Set( p_playlist, "fullscreen", (vlc_value_t)!val.b_bool );
- }
+ playlist_t * p_playlist = pl_Get( VLCIntf );
- pl_Release( VLCIntf );
+ if( [o_title isEqualToString: _NS("Fullscreen")] ||
+ [sender isKindOfClass:[NSButton class]] )
+ {
+ var_ToggleBool( p_playlist, "fullscreen" );
+ }
+ }
+ vlc_object_release( p_input );
}
-
}
- (IBAction)telxTransparent:(id)sender
}
}
+- (IBAction)lockVideosAspectRatio:(id)sender
+{
+ if( [sender state] == NSOffState )
+ [sender setState: NSOnState];
+ else
+ [sender setState: NSOffState];
+
+ b_lockAspectRatio = !b_lockAspectRatio;
+}
+
- (IBAction)addSubtitleFile:(id)sender
{
NSInteger i_returnValue = 0;
{
NSUInteger c = 0;
if( !p_input ) return;
-
+
c = [[openPanel filenames] count];
- NSLog( @"count: %i", c );
- for (int i = 0; [[openPanel filenames] count] > i ; i++)
+
+ for (int i = 0; i < [[openPanel filenames] count] ; i++)
{
msg_Dbg( VLCIntf, "loading subs from %s", [[[openPanel filenames] objectAtIndex: i] UTF8String] );
if( input_AddSubtitle( p_input, [[[openPanel filenames] objectAtIndex: i] UTF8String], TRUE ) )
msg_Warn( VLCIntf, "unable to load subtitles from '%s'",
[[[openPanel filenames] objectAtIndex: i] UTF8String] );
- i++;
}
}
}
if( key )
{
- vout_thread_t *p_vout = vlc_object_find( VLCIntf, VLC_OBJECT_VOUT,
- FIND_ANYWHERE );
- if( p_vout != NULL )
+ input_thread_t * p_input = pl_CurrentInput( VLCIntf );
+ if( p_input != NULL )
{
- /* Escape */
- if( key == (unichar) 0x1b )
+ vout_thread_t *p_vout = input_GetVout( p_input );
+
+ if( p_vout != NULL )
{
- id o_vout_view = [self voutView];
- if( o_vout_view && [o_vout_view isFullscreen] )
+ /* Escape */
+ if( key == (unichar) 0x1b )
{
- [o_vout_view toggleFullscreen];
+ id o_vout_view = [self voutView];
+ if( o_vout_view && [o_vout_view isFullscreen] )
+ {
+ [o_vout_view toggleFullscreen];
+ eventHandled = YES;
+ }
+ }
+ else if( key == ' ' )
+ {
+ [self play:self];
eventHandled = YES;
}
+ vlc_object_release( (vlc_object_t *)p_vout );
}
- else if( key == ' ' )
- {
- [self play:self];
- eventHandled = YES;
- }
- vlc_object_release( (vlc_object_t *)p_vout );
+ vlc_object_release( p_input );
}
}
return eventHandled;
/* Variable doesn't exist or isn't handled */
return;
}
-
+
/* Make sure we want to display the variable */
if( i_type & VLC_VAR_HASCHOICE )
{
if( (i_type & VLC_VAR_TYPE) != VLC_VAR_VARIABLE && val.i_int == 1 )
return;
}
-
+
/* Get the descriptive name of the variable */
var_Change( p_object, psz_variable, VLC_VAR_GETTEXT, &text, NULL );
[o_mi setTitle: [[VLCMain sharedInstance] localizedString: text.psz_string ?
- text.psz_string : strdup( psz_variable ) ]];
+ text.psz_string : psz_variable ]];
- var_Get( p_object, psz_variable, &val );
if( i_type & VLC_VAR_HASCHOICE )
{
NSMenu *o_menu = [o_mi submenu];
[self setupVarMenu: o_menu forMenuItem: o_mi target:p_object
var:psz_variable selector:pf_callback];
-
+
free( text.psz_string );
return;
}
+ if( var_Get( p_object, psz_variable, &val ) < 0 )
+ {
+ return;
+ }
VLCAutoGeneratedMenuContent *o_data;
switch( i_type & VLC_VAR_TYPE )
break;
default:
- free( text.psz_string );
- return;
+ break;
}
if( ( i_type & VLC_VAR_TYPE ) == VLC_VAR_STRING ) free( val.psz_string );
/* make (un)sensitive */
[o_parent setEnabled: ( val_list.p_list->i_count > 1 )];
+ /* Aspect Ratio */
+ if( [[o_parent title] isEqualToString: _NS("Aspect-ratio")] == YES )
+ {
+ NSMenuItem *o_lmi_tmp2;
+ o_lmi_tmp2 = [o_menu addItemWithTitle: _NS("Lock Aspect Ratio") action: @selector(lockVideosAspectRatio:) keyEquivalent: @""];
+ [o_lmi_tmp2 setTarget: self];
+ [o_lmi_tmp2 setEnabled: YES];
+ [o_lmi_tmp2 setState: b_lockAspectRatio];
+ [o_parent setEnabled: YES];
+ [o_menu addItem: [NSMenuItem separatorItem]];
+ }
+
/* special case for the subtitles items */
if( [[o_parent title] isEqualToString: _NS("Subtitles Track")] == YES )
{
for( i = 0; i < val_list.p_list->i_count; i++ )
{
- vlc_value_t another_val;
NSMenuItem * o_lmi;
NSString *o_title = @"";
VLCAutoGeneratedMenuContent *o_data;
switch( i_type & VLC_VAR_TYPE )
{
case VLC_VAR_STRING:
- another_val.psz_string =
- strdup(val_list.p_list->p_values[i].psz_string);
o_title = [[VLCMain sharedInstance] localizedString: text_list.p_list->p_values[i].psz_string ?
text_list.p_list->p_values[i].psz_string : val_list.p_list->p_values[i].psz_string ];
o_lmi = [o_menu addItemWithTitle: o_title action: pf_callback keyEquivalent: @""];
- o_data = [[VLCAutoGeneratedMenuContent alloc] initWithVariableName: strdup(psz_variable) ofObject: p_object
- andValue: another_val ofType: i_type];
+ o_data = [[VLCAutoGeneratedMenuContent alloc] initWithVariableName: psz_variable ofObject: p_object
+ andValue: val_list.p_list->p_values[i] ofType: i_type];
[o_lmi setRepresentedObject: [o_data autorelease]];
[o_lmi setTarget: self];
case VLC_VAR_INTEGER:
o_title = text_list.p_list->p_values[i].psz_string ?
- [[VLCMain sharedInstance] localizedString: strdup( text_list.p_list->p_values[i].psz_string )] :
- [NSString stringWithFormat: @"%d",
+ [[VLCMain sharedInstance] localizedString: text_list.p_list->p_values[i].psz_string] :
+ [NSString stringWithFormat: @"%"PRId64,
val_list.p_list->p_values[i].i_int];
o_lmi = [o_menu addItemWithTitle: o_title action: pf_callback keyEquivalent: @""];
- o_data = [[VLCAutoGeneratedMenuContent alloc] initWithVariableName: strdup(psz_variable) ofObject: p_object
+ o_data = [[VLCAutoGeneratedMenuContent alloc] initWithVariableName: psz_variable ofObject: p_object
andValue: val_list.p_list->p_values[i] ofType: i_type];
[o_lmi setRepresentedObject: [o_data autorelease]];
[o_lmi setTarget: self];
BOOL bEnabled = TRUE;
vlc_value_t val;
intf_thread_t * p_intf = VLCIntf;
- playlist_t * p_playlist = pl_Hold( p_intf );
+ playlist_t * p_playlist = pl_Get( p_intf );
input_thread_t * p_input = playlist_CurrentInput( p_playlist );
if( [[o_mi title] isEqualToString: _NS("Faster")] ||
- [[o_mi title] isEqualToString: _NS("Slower")] )
+ [[o_mi title] isEqualToString: _NS("Slower")] ||
+ [[o_mi title] isEqualToString: _NS("Normal rate")] )
{
if( p_input != NULL )
{
else if( [[o_mi title] isEqualToString: _NS("Previous")] ||
[[o_mi title] isEqualToString: _NS("Next")] )
{
- /** \todo fix i_size use */
PL_LOCK;
- bEnabled = p_playlist->items.i_size > 1;
+ bEnabled = playlist_CurrentSize( p_playlist ) > 1;
PL_UNLOCK;
}
else if( [[o_mi title] isEqualToString: _NS("Random")] )
i_state = val.b_bool ? NSOnState : NSOffState;
[o_mi setState: i_state];
}
+ else if( [[o_mi title] isEqualToString: _NS("Quit after Playback")] )
+ {
+ int i_state;
+ var_Get( p_playlist, "play-and-exit", &val );
+ i_state = val.b_bool ? NSOnState : NSOffState;
+ [o_mi setState: i_state];
+ }
else if( [[o_mi title] isEqualToString: _NS("Step Forward")] ||
[[o_mi title] isEqualToString: _NS("Step Backward")] ||
[[o_mi title] isEqualToString: _NS("Jump To Time")])
NSArray *o_windows = [NSApp orderedWindows];
NSEnumerator *o_enumerator = [o_windows objectEnumerator];
bEnabled = FALSE;
-
- vout_thread_t *p_vout = vlc_object_find( p_intf, VLC_OBJECT_VOUT,
- FIND_ANYWHERE );
- if( p_vout != NULL )
+
+ if( p_input != NULL )
{
- if( [[o_mi title] isEqualToString: _NS("Float on Top")] )
+ vout_thread_t *p_vout = input_GetVout( p_input );
+ if( p_vout != NULL )
{
- var_Get( p_vout, "video-on-top", &val );
- [o_mi setState: val.b_bool ? NSOnState : NSOffState];
- }
+ if( [[o_mi title] isEqualToString: _NS("Float on Top")] )
+ {
+ var_Get( p_vout, "video-on-top", &val );
+ [o_mi setState: val.b_bool ? NSOnState : NSOffState];
+ }
- while( (o_window = [o_enumerator nextObject]))
- {
- if( [[o_window className] isEqualToString: @"VLCVoutWindow"] ||
- [[[VLCMain sharedInstance] embeddedList]
- windowContainsEmbedded: o_window])
+ while( (o_window = [o_enumerator nextObject]))
{
- bEnabled = TRUE;
- break;
+ if( [[o_window className] isEqualToString: @"VLCVoutWindow"] ||
+ [[[VLCMain sharedInstance] embeddedList]
+ windowContainsEmbedded: o_window])
+ {
+ bEnabled = TRUE;
+ break;
+ }
}
- }
- vlc_object_release( (vlc_object_t *)p_vout );
+ vlc_object_release( (vlc_object_t *)p_vout );
+ }
}
if( [[o_mi title] isEqualToString: _NS("Fullscreen")] )
{
}
if( p_input ) vlc_object_release( p_input );
- pl_Release( p_intf );
return( bEnabled );
}
if( self != nil )
{
- psz_name = strdup( name );
_vlc_object = vlc_object_hold( object );
- value = val;
+ psz_name = strdup( name );
i_type = type;
+ value = val;
+ if( (i_type & VLC_VAR_TYPE) == VLC_VAR_STRING )
+ value.psz_string = strdup( val.psz_string );
}
return( self );
- (void)dealloc
{
vlc_object_release( _vlc_object );
+ if( (i_type & VLC_VAR_TYPE) == VLC_VAR_STRING )
+ free( value.psz_string );
free( psz_name );
[super dealloc];
}