Fix the flicker in a better way which makes closed subfolder count updating

work again. We now keep a map of Folders to FolderTreeItems, the linear
search is just too painfull for something that is called this often.

svn path=/trunk/kdepim/; revision=344093
wilder-work
Till Adam 22 years ago
parent 2e10eda47e
commit 48b26a3141
  1. 20
      kmfoldertree.cpp
  2. 21
      kmfoldertree.h

@ -71,7 +71,8 @@ KMFolderTreeItem::KMFolderTreeItem( KFolderTreeItem *parent, const QString & nam
setPixmap( 0, normalIcon() );
}
KMFolderTreeItem::~KMFolderTreeItem() {
KMFolderTreeItem::~KMFolderTreeItem()
{
}
static KFolderTreeItem::Protocol protocolFor( KMFolderType t ) {
@ -195,6 +196,9 @@ void KMFolderTreeItem::init()
}
if ( !mFolder->isSystemFolder() )
setRenameEnabled( 0, false );
KMFolderTree* tree = static_cast<KMFolderTree*>( listView() );
tree->insertIntoFolderToItemMap( mFolder, this );
}
void KMFolderTreeItem::adjustUnreadCount( int newUnreadCount ) {
@ -459,6 +463,7 @@ void KMFolderTree::reload(bool openFolders)
if ( fti->isSelected() )
selected = fti->folder();
}
mFolderToItem.clear();
clear();
// construct the root of the local folders
@ -682,6 +687,7 @@ void KMFolderTree::slotFolderRemoved(KMFolder *aFolder)
if (!qlvi) qlvi = fti->itemBelow();
doFolderSelected( qlvi );
}
removeFromFolderToItemMap( aFolder );
delete fti;
}
@ -869,18 +875,6 @@ void KMFolderTree::resizeEvent(QResizeEvent* e)
KListView::resizeEvent(e);
}
//-----------------------------------------------------------------------------
QListViewItem* KMFolderTree::indexOfFolder(const KMFolder* folder)
{
QListViewItem *i = firstChild();
while ( i ) {
if ( static_cast<KMFolderTreeItem*>(i)->folder() == folder )
return i;
i = i->itemBelow();
}
return 0;
}
//-----------------------------------------------------------------------------
// show context menu
void KMFolderTree::slotContextMenuRequested( QListViewItem *lvi,

@ -113,8 +113,14 @@ public:
virtual void addDirectory( KMFolderDir *fdir, KMFolderTreeItem* parent );
/** Find index of given folder. Returns 0 if not found */
virtual QListViewItem* indexOfFolder(const KMFolder*);
virtual QListViewItem* indexOfFolder( const KMFolder* folder ) const
{
if ( mFolderToItem.contains( folder ) )
return mFolderToItem[ folder ];
else
return 0;
}
/** create a folderlist */
void createFolderList( QStringList *str,
QValueList<QGuardedPtr<KMFolder> > *folders,
@ -157,6 +163,16 @@ public:
/** Select the folder and make sure it's visible */
void showFolder( KMFolder* );
void insertIntoFolderToItemMap( const KMFolder *folder, KMFolderTreeItem* item )
{
mFolderToItem.insert( folder, item );
}
void removeFromFolderToItemMap( const KMFolder *folder )
{
mFolderToItem.remove( folder );
}
signals:
/** The selected folder has changed */
void folderSelected(KMFolder*);
@ -314,6 +330,7 @@ private:
bool mShowPopupAfterDnD;
KMMainWidget *mMainWidget;
bool mReloading;
QMap<const KMFolder*, KMFolderTreeItem*> mFolderToItem;
};
#endif

Loading…
Cancel
Save