]> git.sesse.net Git - vlc/commitdiff
Forwardport [18136]: Fixed RecursiveDeleteSelection() to prevent destroying the
authorMarian Durkovic <md@videolan.org>
Wed, 29 Nov 2006 10:02:42 +0000 (10:02 +0000)
committerMarian Durkovic <md@videolan.org>
Wed, 29 Nov 2006 10:02:42 +0000 (10:02 +0000)
whole playlist

modules/gui/wxwidgets/dialogs/playlist.cpp

index 0e802839310485f265562e2ab8fdf7b8959dd0a8..80164094a3499b3e7529f64744d9016bd2141ccb 100644 (file)
@@ -1059,16 +1059,23 @@ void Playlist::RecursiveDeleteSelection(  wxTreeItemId root )
 {
     wxTreeItemIdValue cookie;
     wxTreeItemId child = treectrl->GetFirstChild( root, cookie );
+    wxTreeItemId nextchild;
+    bool childIsSelected = FALSE;
+    bool nextchildIsSelected = FALSE;
+
+    if( child.IsOk() ) childIsSelected = treectrl->IsSelected( child );
+
     while( child.IsOk() )
     {
-        if( treectrl->ItemHasChildren( child ) )
-        {
-            RecursiveDeleteSelection( child );
-            if( treectrl->IsSelected(child ) ) DeleteTreeItem( child );
-        }
-        else if( treectrl->IsSelected( child ) )
+        nextchild = treectrl->GetNextChild( root, cookie );
+        if( nextchild.IsOk() )
+            nextchildIsSelected = treectrl->IsSelected( nextchild );
+        if( childIsSelected )
             DeleteTreeItem( child );
-        child = treectrl->GetNextChild( root, cookie );
+        else if( treectrl->ItemHasChildren( child ) )
+            RecursiveDeleteSelection( child );
+        child = nextchild;
+        childIsSelected = nextchildIsSelected;
     }
 }