diff options
Diffstat (limited to 'desktop/source/deployment/gui/dp_gui_extlistbox.cxx')
-rw-r--r-- | desktop/source/deployment/gui/dp_gui_extlistbox.cxx | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/desktop/source/deployment/gui/dp_gui_extlistbox.cxx b/desktop/source/deployment/gui/dp_gui_extlistbox.cxx index 260100f3ca03..b9500a1a4a35 100644 --- a/desktop/source/deployment/gui/dp_gui_extlistbox.cxx +++ b/desktop/source/deployment/gui/dp_gui_extlistbox.cxx @@ -1035,7 +1035,6 @@ long ExtensionBox_Impl::addEntry( const uno::Reference< deployment::XPackage > & //access to m_nActive must be guarded if ( !m_bInCheckMode && m_bHasActive && ( m_nActive >= nPos ) ) m_nActive += 1; - guard.clear(); if ( IsReallyVisible() ) @@ -1172,6 +1171,7 @@ void ExtensionBox_Impl::prepareChecking() void ExtensionBox_Impl::checkEntries() { long nNewPos = -1; + long nChangedActivePos = -1; long nPos = 0; bool bNeedsUpdate = false; @@ -1195,15 +1195,19 @@ void ExtensionBox_Impl::checkEntries() } else { // remove entry from list + if (nPos < nNewPos) { + --nNewPos; + } + if (nPos < nChangedActivePos) { + --nChangedActivePos; + } if ( nPos < m_nActive ) m_nActive -= 1; - else if ( ( nPos == m_nActive ) && ( nPos == (long) m_vEntries.size() - 1 ) ) + else if ( nPos == m_nActive ) { - m_nActive -= 1; - if (m_nActive == -1) - { - m_bHasActive = false; - } + nChangedActivePos = nPos; + m_nActive = -1; + m_bHasActive = false; } m_vRemovedEntries.push_back( *iIndex ); m_vEntries.erase( iIndex ); @@ -1219,6 +1223,9 @@ void ExtensionBox_Impl::checkEntries() if ( nNewPos != - 1) selectEntry( nNewPos ); + else if (nChangedActivePos != -1) { + selectEntry(nChangedActivePos); + } if ( bNeedsUpdate ) { |