diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-05-04 07:47:47 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-05-04 07:47:47 +0000 |
commit | c1b28a61b6e1a44ac0fe2b492ee42a60f486a5d9 (patch) | |
tree | c782f93e0df531c9ff23b4b1a1bc21c9fbfe6c34 /kdeui/kiconviewsearchline.cpp | |
parent | 333cd24e78f8de4aef0530ec5ad20d523ad6f7eb (diff) | |
download | tdelibs-c1b28a61b6e1a44ac0fe2b492ee42a60f486a5d9.tar.gz tdelibs-c1b28a61b6e1a44ac0fe2b492ee42a60f486a5d9.zip |
Fixed random filter bar crashes (some of bug 180, not all of it yet unfortunately...)
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdelibs@1122569 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kdeui/kiconviewsearchline.cpp')
-rw-r--r-- | kdeui/kiconviewsearchline.cpp | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/kdeui/kiconviewsearchline.cpp b/kdeui/kiconviewsearchline.cpp index b0f26c03d..0ba5f78f7 100644 --- a/kdeui/kiconviewsearchline.cpp +++ b/kdeui/kiconviewsearchline.cpp @@ -41,6 +41,7 @@ public: iconView( 0 ), caseSensitive( DEFAULT_CASESENSITIVE ), activeSearch( false ), + hiddenItemsLockout( false ), queuedSearches( 0 ) {} QIconView *iconView; @@ -48,6 +49,7 @@ public: bool activeSearch; QString search; int queuedSearches; + bool hiddenItemsLockout; QIconViewItemList hiddenItems; }; @@ -97,8 +99,6 @@ void KIconViewSearchLine::updateSearch( const QString &s ) QString search = d->search = s.isNull() ? text() : s; - QIconViewItemList *hi = &(d->hiddenItems); - QIconViewItem *currentItem = iv->currentItem(); QIconViewItem *item = NULL; @@ -119,14 +119,16 @@ void KIconViewSearchLine::updateSearch( const QString &s ) } // Add Matching items, remove from hidden list - QIconViewItemList::iterator it = hi->begin(); - while ( it != hi->end() ) + d->hiddenItemsLockout = true; + QIconViewItemList::iterator it = d->hiddenItems.begin(); + while ( it != d->hiddenItems.end() ) { item = *it; ++it; if ( itemMatches( item, search ) ) showItem( item ); } + d->hiddenItemsLockout = false; iv->sort(); @@ -138,6 +140,7 @@ void KIconViewSearchLine::clear() { // Clear hidden list, give items back to QIconView, if it still exists QIconViewItem *item = NULL; + d->hiddenItemsLockout = true; QIconViewItemList::iterator it = d->hiddenItems.begin(); while ( it != d->hiddenItems.end() ) { @@ -156,6 +159,8 @@ void KIconViewSearchLine::clear() "hiddenItems is not empty as it should be. " << d->hiddenItems.count() << " items are still there.\n" << endl; + d->hiddenItemsLockout= false; + d->search = ""; d->queuedSearches = 0; KLineEdit::clear(); @@ -196,7 +201,8 @@ bool KIconViewSearchLine::itemMatches( const QIconViewItem *item, if ( item == NULL ) return false; - return ( item->text().find( s, 0, caseSensitive() ) >= 0 ); + QString itemtext = item->text(); + return ( itemtext.find( s, 0, caseSensitive() ) >= 0 ); } void KIconViewSearchLine::init( QIconView *iconView ) @@ -238,7 +244,9 @@ void KIconViewSearchLine::showItem( QIconViewItem *item ) return; } d->iconView->insertItem( item ); - d->hiddenItems.remove( item ); + if (d->hiddenItemsLockout == false) { + d->hiddenItems.remove( item ); + } } /****************************************************************************** |