Commit 0132bb5d authored by Jakob Leben's avatar Jakob Leben

Qt4: fix #3113: crash after a playlist item is removed by another plugin

parent efb6cbba
...@@ -653,9 +653,6 @@ void PLModel::processInputItemUpdate( input_item_t *p_item ) ...@@ -653,9 +653,6 @@ void PLModel::processInputItemUpdate( input_item_t *p_item )
void PLModel::processItemRemoval( int i_id ) void PLModel::processItemRemoval( int i_id )
{ {
if( i_id <= 0 ) return; if( i_id <= 0 ) return;
if( i_id == i_cached_id ) i_cached_id = -1;
i_cached_input_id = -1;
removeItem( i_id ); removeItem( i_id );
} }
...@@ -760,13 +757,22 @@ void PLModel::removeItem( PLItem *item ) ...@@ -760,13 +757,22 @@ void PLModel::removeItem( PLItem *item )
{ {
if( !item ) return; if( !item ) return;
if( item->i_id == i_cached_id ) i_cached_id = -1;
i_cached_input_id = -1;
if( currentItem == item ) if( currentItem == item )
{ {
currentItem = NULL; currentItem = NULL;
emit currentChanged( QModelIndex() ); emit currentChanged( QModelIndex() );
} }
if( item->parentItem ) item->parentItem->removeChild( item ); if( item->parentItem ) {
int i = item->parentItem->children.indexOf( item );
beginRemoveRows( index( item->parentItem, 0), i, i );
item->parentItem->children.removeAt(i);
delete item;
endRemoveRows();
}
else delete item; else delete item;
if(item == rootItem) if(item == rootItem)
...@@ -862,11 +868,9 @@ void PLModel::doDeleteItem( PLItem *item, QModelIndexList *fullList ) ...@@ -862,11 +868,9 @@ void PLModel::doDeleteItem( PLItem *item, QModelIndexList *fullList )
else else
playlist_NodeDelete( p_playlist, p_item, true, false ); playlist_NodeDelete( p_playlist, p_item, true, false );
PL_UNLOCK; PL_UNLOCK;
/* And finally, remove it from the tree */ /* And finally, remove it from the tree */
int itemIndex = item->parentItem->children.indexOf( item );
beginRemoveRows( index( item->parentItem, 0), itemIndex, itemIndex );
removeItem( item ); removeItem( item );
endRemoveRows();
} }
/******* Volume III: Sorting and searching ********/ /******* Volume III: Sorting and searching ********/
......
...@@ -151,12 +151,12 @@ private: ...@@ -151,12 +151,12 @@ private:
void recurseDelete( QList<PLItem*> children, QModelIndexList *fullList ); void recurseDelete( QList<PLItem*> children, QModelIndexList *fullList );
void doDeleteItem( PLItem *item, QModelIndexList *fullList ); void doDeleteItem( PLItem *item, QModelIndexList *fullList );
void updateTreeItem( PLItem * ); void updateTreeItem( PLItem * );
void removeItem ( PLItem * );
void takeItem( PLItem * ); //will not delete item void takeItem( PLItem * ); //will not delete item
void insertChildren( PLItem *node, QList<PLItem*>& items, int i_pos ); void insertChildren( PLItem *node, QList<PLItem*>& items, int i_pos );
void dropAppendCopy( QByteArray& data, PLItem *target ); void dropAppendCopy( QByteArray& data, PLItem *target );
void dropMove( QByteArray& data, PLItem *target, int new_pos ); void dropMove( QByteArray& data, PLItem *target, int new_pos );
/* The following actions will not signal the view! */ /* The following actions will not signal the view! */
void removeItem ( PLItem * );
void updateChildren( PLItem * ); void updateChildren( PLItem * );
void updateChildren( playlist_item_t *, PLItem * ); void updateChildren( playlist_item_t *, PLItem * );
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment