p_intf->p_sys->o_pool = [[NSAutoreleasePool alloc] init];
- p_intf->p_sys->o_sendport = [[NSPort port] retain];
p_intf->p_sys->p_sub = msg_Subscribe( p_intf );
p_intf->pf_run = Run;
p_intf->b_should_run_on_first_thread = true;
msg_Unsubscribe( p_intf, p_intf->p_sys->p_sub );
- [p_intf->p_sys->o_sendport release];
[p_intf->p_sys->o_pool release];
free( p_intf->p_sys );
var_AddCallback( p_playlist, "fullscreen", FullscreenChanged, self);
var_AddCallback( p_intf->p_libvlc, "intf-show", ShowController, self);
- vlc_object_release( p_playlist );
+ pl_Release( p_intf );
var_Create( p_intf, "interaction", VLC_VAR_ADDRESS );
var_AddCallback( p_intf, "interaction", InteractCallback, self );
o_msg_lock = [[NSLock alloc] init];
o_msg_arr = [[NSMutableArray arrayWithCapacity: 200] retain];
- [p_intf->p_sys->o_sendport setDelegate: self];
- [[NSRunLoop currentRunLoop]
- addPort: p_intf->p_sys->o_sendport
- forMode: NSDefaultRunLoopMode];
-
/* FIXME: don't poll */
interfaceTimer = [[NSTimer scheduledTimerWithTimeInterval: 0.5
target: self selector: @selector(manageIntf:)
- (void)manage
{
playlist_t * p_playlist;
+ input_thread_t * p_input = NULL;
/* new thread requires a new pool */
NSAutoreleasePool * o_pool = [[NSAutoreleasePool alloc] init];
{
vlc_mutex_lock( &p_intf->change_lock );
- if( p_intf->p_sys->p_input == NULL )
+ if( !p_input )
{
- p_intf->p_sys->p_input = p_playlist->p_input;
+ p_input = playlist_CurrentInput( p_playlist );
/* Refresh the interface */
- if( p_intf->p_sys->p_input )
+ if( p_input )
{
msg_Dbg( p_intf, "input has changed, refreshing interface" );
p_intf->p_sys->b_input_update = true;
}
}
- else if( !vlc_object_alive (p_intf->p_sys->p_input) || p_intf->p_sys->p_input->b_dead )
+ else if( !vlc_object_alive (p_input) || p_input->b_dead )
{
/* input stopped */
p_intf->p_sys->b_intf_update = true;
p_intf->p_sys->i_play_status = END_S;
msg_Dbg( p_intf, "input has stopped, refreshing interface" );
- p_intf->p_sys->p_input = NULL;
+ vlc_object_release( p_input );
+ p_input = NULL;
}
/* Manage volume status */
vlc_object_unlock( p_intf );
[o_pool release];
+ if( p_input ) vlc_object_release( p_input );
+
var_DelCallback( p_playlist, "playlist-current", PlaylistChanged, self );
var_DelCallback( p_playlist, "intf-change", PlaylistChanged, self );
var_DelCallback( p_playlist, "item-change", PlaylistChanged, self );
p_intf->p_sys->b_current_title_update = true;
p_intf->p_sys->b_intf_update = true;
p_intf->p_sys->b_input_update = false;
+ [self setupMenus]; /* Make sure input menu is up to date */
}
if( p_intf->p_sys->b_intf_update )
{
//b_chapters = p_input->stream.i_area_nb > 1;
vlc_object_release( p_input );
}
- vlc_object_release( p_playlist );
+ pl_Release( p_intf );
[o_btn_stop setEnabled: b_input];
[o_btn_ff setEnabled: b_seekable];
if( p_intf->p_sys->b_current_title_update )
{
- NSString *o_temp;
+ NSString *aString;
+ input_item_t * p_item = input_GetItem( p_input );
+ char * name = input_item_GetNowPlaying( p_item );
- if( p_playlist->status.p_item == NULL )
- {
- vlc_object_release( p_input );
- pl_Release( p_intf );
- goto end;
- }
- if( input_item_GetNowPlaying ( p_playlist->status.p_item->p_input ) )
- o_temp = [NSString stringWithUTF8String:
- input_item_GetNowPlaying ( p_playlist->status.p_item->p_input )];
- else
- o_temp = [NSString stringWithUTF8String:
- p_playlist->status.p_item->p_input->psz_name];
- [self setScrollField: o_temp stopAfter:-1];
- [[[self getControls] getFSPanel] setStreamTitle: o_temp];
+ if( !name )
+ name = input_item_GetName( p_item );
+
+ aString = [NSString stringWithUTF8String:name];
+
+ free(name);
+
+ [self setScrollField: aString stopAfter:-1];
+ [[[self getControls] getFSPanel] setStreamTitle: aString];
[[o_controls getVoutView] updateTitle];
}
vlc_object_release( p_input );
}
+ else if( p_input )
+ {
+ vlc_object_release( p_input );
+ }
else
{
p_intf->p_sys->i_play_status = END_S;
- p_intf->p_sys->b_playlist_update = true;
[self playStatusUpdated: p_intf->p_sys->i_play_status];
[o_embedded_window playStatusUpdated: p_intf->p_sys->i_play_status];
[self setSubmenusEnabled: FALSE];
- (void)setupMenus
{
playlist_t * p_playlist = pl_Yield( p_intf );
- input_thread_t * p_input = p_playlist->p_input;
+ input_thread_t * p_input = playlist_CurrentInput( p_playlist );
if( p_input != NULL )
{
- vlc_object_yield( p_input );
[o_controls setupVarMenuItem: o_mi_program target: (vlc_object_t *)p_input
var: "program" selector: @selector(toggleVar:)];
}
vlc_object_release( p_input );
}
- vlc_object_release( p_playlist );
+ pl_Release( p_intf );
}
- (void)refreshVoutDeviceMenu:(NSNotification *)o_notification
- (void)resetScrollField
{
playlist_t * p_playlist = pl_Yield( p_intf );
- input_thread_t * p_input = p_playlist->p_input;
+ input_thread_t * p_input = playlist_CurrentInput( p_playlist );
i_end_scroll = -1;
if( p_input && vlc_object_alive (p_input) )
{
NSString *o_temp;
- vlc_object_yield( p_input );
if( input_item_GetNowPlaying ( p_playlist->status.p_item->p_input ) )
o_temp = [NSString stringWithUTF8String:
input_item_GetNowPlaying ( p_playlist->status.p_item->p_input )];
[self setScrollField: o_temp stopAfter:-1];
[[[self getControls] getFSPanel] setStreamTitle: o_temp];
vlc_object_release( p_input );
- vlc_object_release( p_playlist );
+ pl_Release( p_intf );
return;
}
- vlc_object_release( p_playlist );
+ pl_Release( p_intf );
[self setScrollField: _NS("VLC media player") stopAfter:-1];
}
return;
}
p_playlist = pl_Yield( p_intf );
- p_input = p_playlist->p_input;
+ p_input = playlist_CurrentInput( p_playlist );
if( p_input != NULL )
{
vlc_value_t time;
vlc_value_t pos;
NSString * o_time;
char psz_time[MSTRTIME_MAX_SIZE];
- vlc_object_yield( p_input );
pos.f_float = f_updated / 10000.;
var_Set( p_input, "position", pos );
[o_embedded_window setTime: o_time position: f_updated];
vlc_object_release( p_input );
}
- vlc_object_release( p_playlist );
+ pl_Release( p_intf );
}
- (void)applicationWillTerminate:(NSNotification *)notification
[o_bookmarks release];
if( nib_info_loaded )
+ {
+ [o_info stop];
[o_info release];
-
+ }
+
if( nib_wizard_loaded )
[o_wizard release];
/* write cached user defaults to disk */
[[NSUserDefaults standardUserDefaults] synchronize];
+ /* Kill the playlist, so that it doesn't accept new request
+ * such as the play request from vlc.c (we are a blocking interface). */
+ p_playlist = pl_Yield( p_intf );
+ vlc_object_kill( p_playlist );
+ pl_Release( p_intf );
+
vlc_object_kill( p_intf->p_libvlc );
/* Go back to Run() and make libvlc exit properly */
o_prefs= [[VLCPrefs alloc] init];
}
- if( sender == o_mi_sprefs )
- {
- [o_sprefs showSimplePrefs];
- }
- else
- [o_prefs showPrefs];
+ [o_sprefs showSimplePrefs];
}
- (IBAction)checkForUpdate:(id)sender