p_saved_item = NULL;
- /* Update the playlist */
- Rebuild();
/* We want to be noticed of playlist changes */
var_AddCallback( p_playlist, "item-append", ItemAppended, this );
var_AddCallback( p_playlist, "item-deleted", ItemDeleted, this );
- vlc_object_release( p_playlist );
-
+ /* Update the playlist */
+ Rebuild();
+ vlc_object_release( p_playlist );
}
Playlist::~Playlist()
new PlaylistItem( p_node->pp_children[i]) );
UpdateTreeItem( p_playlist, item );
-
- treectrl->SetItemImage( item,
- p_node->pp_children[i]->input.i_type );
}
else
{
}
}
-/* Set current item */
-void Playlist::SetCurrentItem( wxTreeItemId item )
-{
- if( item.IsOk() )
- {
- treectrl->SetItemBold( item, true );
- treectrl->EnsureVisible( item );
- }
-}
-
/* Update an item in the tree */
void Playlist::UpdateTreeItem( playlist_t *p_playlist, wxTreeItemId item )
{
+ if( ! item.IsOk() ) return;
+
playlist_item_t *p_item =
((PlaylistItem *)treectrl->GetItemData( item ))->p_item;
if( p_playlist->status.p_item == p_item )
{
- SetCurrentItem( item );
+ treectrl->SetItemBold( item, true );
+ treectrl->EnsureVisible( item );
}
else
{
p_wxcurrent = (PlaylistItem *)treectrl->GetItemData( root );
- if( !p_item )
+ if( !p_item || !p_wxcurrent )
{
wxTreeItemId dummy;
return dummy;
{
return;
}
+
+ /* We can remove the callbacks before locking, anyway, we won't
+ * miss anything */
+ var_DelCallback( p_playlist, "item-change", ItemChanged, this );
+ var_DelCallback( p_playlist, "playlist-current", PlaylistNext, this );
+ var_DelCallback( p_playlist, "intf-change", PlaylistChanged, this );
+ var_DelCallback( p_playlist, "item-append", ItemAppended, this );
+ var_DelCallback( p_playlist, "item-deleted", ItemDeleted, this );
+
/* ...and rebuild it */
vlc_mutex_lock( &p_playlist->object_lock );
wxTreeItemId root = treectrl->GetRootItem();
UpdateNode( p_playlist, p_view->p_root, root );
+/*
wxTreeItemId item;
if( p_playlist->status.p_item != NULL )
{
{
SetCurrentItem( item );
}
-
+*/
int i_count = CountItems( treectrl->GetRootItem() );
if( i_count < p_playlist->i_size && !b_changed_view )
p_playlist->i_size ), 0 );
}
+ /* Put callbacks back online */
+ var_AddCallback( p_playlist, "intf-change", PlaylistChanged, this );
+ var_AddCallback( p_playlist, "playlist-current", PlaylistNext, this );
+ var_AddCallback( p_playlist, "item-change", ItemChanged, this );
+ var_AddCallback( p_playlist, "item-append", ItemAppended, this );
+ var_AddCallback( p_playlist, "item-deleted", ItemDeleted, this );
+
vlc_mutex_unlock( &p_playlist->object_lock );
vlc_object_release( p_playlist );
return;
}
- playlist_NodeDelete( p_playlist, p_item, VLC_TRUE );
+ playlist_NodeDelete( p_playlist, p_item, VLC_TRUE , VLC_FALSE );
vlc_object_release( p_playlist );
}
}
else
{
+ wxMutexGuiLeave();
playlist_ServicesDiscoveryRemove( p_playlist,
pp_sds[event.GetId() - FirstSD_Event] );
+ wxMutexGuiEnter();
}
}
vlc_object_release( p_playlist );