1 |
From 97d4c1a8100c63091401736c93d6bbbb371d5b37 Mon Sep 17 00:00:00 2001 |
2 |
From: Stephan Bergmann <sbergman@redhat.com> |
3 |
Date: Fri, 10 Apr 2015 15:06:53 +0200 |
4 |
Subject: [PATCH] rhbz#1197614: Fix calculation of m_bHasActive when removing |
5 |
active element |
6 |
|
7 |
Assume m_vEntries.size() == 2; assume first element (nPos == 0) is m_bActive, |
8 |
gets removed, so m_nActive would have stayed at 0 and m_bHasActive at true; then |
9 |
assume second element (again nPos == 0, due to the removed element) is m_bNew, |
10 |
so nPos <= m_nActive is true and m_nActive gets updated to 1 (and m_bHasActive |
11 |
remains true); then selectEntry(nNewPos) (nNewPos == 0) would have tried to |
12 |
reset m_vEntries[1]->m_bActive but now m_vEntries.size() == 1. |
13 |
|
14 |
Change-Id: I31d3bbe97ca99f880aa99bdea015f7c0457f8331 |
15 |
--- |
16 |
desktop/source/deployment/gui/dp_gui_extlistbox.cxx | 21 ++++++++++++++------- |
17 |
1 file changed, 14 insertions(+), 7 deletions(-) |
18 |
|
19 |
diff --git a/desktop/source/deployment/gui/dp_gui_extlistbox.cxx b/desktop/source/deployment/gui/dp_gui_extlistbox.cxx |
20 |
index 260100f..b9500a1 100644 |
21 |
--- a/desktop/source/deployment/gui/dp_gui_extlistbox.cxx |
22 |
+++ b/desktop/source/deployment/gui/dp_gui_extlistbox.cxx |
23 |
@@ -1035,7 +1035,6 @@ long ExtensionBox_Impl::addEntry( const uno::Reference< deployment::XPackage > & |
24 |
//access to m_nActive must be guarded |
25 |
if ( !m_bInCheckMode && m_bHasActive && ( m_nActive >= nPos ) ) |
26 |
m_nActive += 1; |
27 |
- |
28 |
guard.clear(); |
29 |
|
30 |
if ( IsReallyVisible() ) |
31 |
@@ -1172,6 +1171,7 @@ void ExtensionBox_Impl::prepareChecking() |
32 |
void ExtensionBox_Impl::checkEntries() |
33 |
{ |
34 |
long nNewPos = -1; |
35 |
+ long nChangedActivePos = -1; |
36 |
long nPos = 0; |
37 |
bool bNeedsUpdate = false; |
38 |
|
39 |
@@ -1195,15 +1195,19 @@ void ExtensionBox_Impl::checkEntries() |
40 |
} |
41 |
else |
42 |
{ // remove entry from list |
43 |
+ if (nPos < nNewPos) { |
44 |
+ --nNewPos; |
45 |
+ } |
46 |
+ if (nPos < nChangedActivePos) { |
47 |
+ --nChangedActivePos; |
48 |
+ } |
49 |
if ( nPos < m_nActive ) |
50 |
m_nActive -= 1; |
51 |
- else if ( ( nPos == m_nActive ) && ( nPos == (long) m_vEntries.size() - 1 ) ) |
52 |
+ else if ( nPos == m_nActive ) |
53 |
{ |
54 |
- m_nActive -= 1; |
55 |
- if (m_nActive == -1) |
56 |
- { |
57 |
- m_bHasActive = false; |
58 |
- } |
59 |
+ nChangedActivePos = nPos; |
60 |
+ m_nActive = -1; |
61 |
+ m_bHasActive = false; |
62 |
} |
63 |
m_vRemovedEntries.push_back( *iIndex ); |
64 |
m_vEntries.erase( iIndex ); |
65 |
@@ -1219,6 +1223,9 @@ void ExtensionBox_Impl::checkEntries() |
66 |
|
67 |
if ( nNewPos != - 1) |
68 |
selectEntry( nNewPos ); |
69 |
+ else if (nChangedActivePos != -1) { |
70 |
+ selectEntry(nChangedActivePos); |
71 |
+ } |
72 |
|
73 |
if ( bNeedsUpdate ) |
74 |
{ |
75 |
-- |
76 |
2.1.0 |
77 |
|