selected items may not be erased (e.g ready-only items). Compute the new
lastSelected only if no more selection exists.
This fixes the extra selection popping up when one tries to
erase the media library for instance.
}
else if( arg->i_type == 3 ) // item-del
{
}
else if( arg->i_type == 3 ) // item-del
{
- /* Make sure firstPos and lastSelected are still valid */
+ /* Make sure firstPos is valid */
while( m_firstPos->m_deleted &&
m_firstPos != (m_flat ? m_rTree.firstLeaf()
: m_rTree.begin()) )
while( m_firstPos->m_deleted &&
m_firstPos != (m_flat ? m_rTree.firstLeaf()
: m_rTree.begin()) )
/* Find first non selected item before m_pLastSelected */
VarTree::Iterator it_sel = m_flat ? m_rTree.firstLeaf()
: m_rTree.begin();
/* Find first non selected item before m_pLastSelected */
VarTree::Iterator it_sel = m_flat ? m_rTree.firstLeaf()
: m_rTree.begin();
- for( it = m_flat ? m_rTree.firstLeaf() : m_rTree.begin();
+ for( it = (m_flat ? m_rTree.firstLeaf() : m_rTree.begin());
- it = m_flat ? m_rTree.getNextLeaf( it )
- : m_rTree.getNextVisibleItem( it ) )
+ it = (m_flat ? m_rTree.getNextLeaf( it )
+ : m_rTree.getNextVisibleItem( it )) )
{
if( &*it == m_pLastSelected ) break;
if( !it->m_selected ) it_sel = it;
{
if( &*it == m_pLastSelected ) break;
if( !it->m_selected ) it_sel = it;
/* Delete selected stuff */
m_rTree.delSelected();
/* Delete selected stuff */
m_rTree.delSelected();
- /* Select it_sel */
- it_sel->m_selected = true;
- m_pLastSelected = &*it_sel;
+ /* Verify if there is still sthg selected (e.g read-only items) */
+ m_pLastSelected = NULL;
+ for( it = (m_flat ? m_rTree.firstLeaf() : m_rTree.begin());
+ it != m_rTree.end();
+ it = (m_flat ? m_rTree.getNextLeaf( it )
+ : m_rTree.getNextVisibleItem( it )) )
+ {
+ if( it->m_selected )
+ m_pLastSelected = &*it;
+ }
+
+ /* if everything was deleted, use it_sel as last selection */
+ if( !m_pLastSelected )
+ {
+ it_sel->m_selected = true;
+ m_pLastSelected = &*it_sel;
+ }
// Redraw the control
makeImage();
// Redraw the control
makeImage();