]> git.sesse.net Git - vlc/commitdiff
skins2: fix vlc sometimes crashing with drag'n'drop.
authorErwan Tulou <erwan10@videolan.org>
Mon, 16 Apr 2012 22:52:57 +0000 (00:52 +0200)
committerErwan Tulou <erwan10@videolan.org>
Tue, 17 Apr 2012 01:11:24 +0000 (03:11 +0200)
This fixes #6599

modules/gui/skins2/controls/ctrl_tree.cpp
modules/gui/skins2/vars/playtree.cpp

index d395626afb1fef8d96a129f51566a91f42493aee..eed6ea9ae34242aec291c6d20e611b69280e327c 100644 (file)
@@ -513,7 +513,8 @@ void CtrlTree::handleEvent( EvtGeneric &rEvent )
     {
         EvtDragDrop& evt = static_cast<EvtDragDrop&>(rEvent);
         Playtree& rPlaytree = static_cast<Playtree&>(m_rTree);
-        rPlaytree.insertItems( *m_itOver, evt.getFiles(), false );
+        VarTree& item = ( m_itOver != m_rTree.end() ) ? *m_itOver : m_rTree;
+        rPlaytree.insertItems( item, evt.getFiles(), false );
         m_itOver = m_rTree.end();
         needRefresh = true;
     }
index 6ce1b86eb2ac4c96f89a2d569cb25eec2b8ada0f..9b3c4db5ed0a2a044a5d609ae4dc7c71d4834808 100644 (file)
@@ -283,15 +283,29 @@ void Playtree::insertItems( VarTree& elem, const list<string>& files, bool start
 
     playlist_Lock( m_pPlaylist );
 
+    if( p_elem == this )
+    {
+        for( Iterator it = m_children.begin(); it != m_children.end(); ++it )
+        {
+            if( it->getId() == m_pPlaylist->p_local_category->i_id )
+            {
+                p_elem = &*it;
+                break;
+            }
+        }
+    }
+
     if( p_elem->getId() == m_pPlaylist->p_local_category->i_id )
     {
         p_node = m_pPlaylist->p_local_category;
         i_pos = 0;
+        p_elem->setExpanded( true );
     }
     else if( p_elem->getId() == m_pPlaylist->p_ml_category->i_id )
     {
         p_node = m_pPlaylist->p_ml_category;
         i_pos = 0;
+        p_elem->setExpanded( true );
     }
     else if( p_elem->size() && p_elem->isExpanded() )
     {