]> git.sesse.net Git - vlc/commitdiff
skins2: fix skins crashing when playlist is flat
authorErwan Tulou <erwan10@videolan.org>
Thu, 6 May 2010 18:09:25 +0000 (20:09 +0200)
committerErwan Tulou <erwan10@videolan.org>
Thu, 6 May 2010 19:07:04 +0000 (21:07 +0200)
m_firstPos (iterator associated to a stl list container) is not guaranteed to be valid (the associated item may have been deleted). Up to vlc1.0, this was no problem, because deleting an item was also buggy (a no-op). From vlc1.1 on, m_firstPos must now be recomputed to ensure it keeps on pointing to a valid item in all cases.

start for instance a playlist with the 'Dragon' skin as a test case.
This was pointed out by colt45 (from the forum)

modules/gui/skins2/controls/ctrl_tree.cpp

index 30482547163ebfb869fdf97a25590176c5856abf..27ffdd29d61c719171541247aada8157e1864b0c 100644 (file)
@@ -138,6 +138,8 @@ int CtrlTree::maxItems()
 void CtrlTree::onUpdate( Subject<VarTree, tree_update> &rTree,
                          tree_update *arg )
 {
+    m_firstPos = m_flat ? m_rTree.firstLeaf() : m_rTree.begin();
+
     if( arg->i_type == 0 ) // Item update
     {
         if( arg->b_active_item )
@@ -150,7 +152,6 @@ void CtrlTree::onUpdate( Subject<VarTree, tree_update> &rTree,
     /// \todo handle delete in a more clever way
     else if ( arg->i_type == 1 ) // Global change or deletion
     {
-        m_firstPos = m_flat ? m_rTree.firstLeaf() : m_rTree.begin();
         makeImage();
     }
     else if ( arg->i_type == 2 ) // Item-append