diff --git a/favoritefolderview.cpp b/favoritefolderview.cpp index 8fce51e6f..a5723d8b3 100644 --- a/favoritefolderview.cpp +++ b/favoritefolderview.cpp @@ -173,11 +173,12 @@ FavoriteFolderView::FavoriteFolderView(QWidget * parent) : setDragEnabled( true ); setAcceptDrops( true ); setRootIsDecorated( false ); - setSelectionMode( QListView::Single ); + setSelectionModeExt( KListView::Single ); setSorting( -1 ); setShowSortIndicator( false ); - connect( this, SIGNAL(selectionChanged(QListViewItem*)), SLOT(selectionChanged(QListViewItem*)) ); + connect( this, SIGNAL(selectionChanged()), SLOT(selectionChanged()) ); + connect( this, SIGNAL(clicked(QListViewItem*)), SLOT(itemClicked(QListViewItem*)) ); connect( this, SIGNAL(dropped(QDropEvent*,QListViewItem*)), SLOT(dropped(QDropEvent*,QListViewItem*)) ); connect( this, SIGNAL(contextMenuRequested(QListViewItem*, const QPoint &, int)), SLOT(contextMenu(QListViewItem*,const QPoint&)) ); @@ -263,20 +264,28 @@ KMFolderTreeItem* FavoriteFolderView::addFolder(KMFolder * folder, const QString return item; } -void FavoriteFolderView::selectionChanged( QListViewItem *item ) +void FavoriteFolderView::selectionChanged() { - if ( !item ) + KMFolderTreeItem *fti = static_cast( selectedItem() ); + if ( !fti ) return; - KMFolderTreeItem *fti = static_cast( item ); KMFolderTree *ft = kmkernel->getKMMainWidget()->folderTree(); assert( ft ); assert( fti ); ft->showFolder( fti->folder() ); } +void FavoriteFolderView::itemClicked(QListViewItem * item) +{ + if ( item && !item->isSelected() ) + item->setSelected( true ); + item->repaint(); +} + void FavoriteFolderView::folderTreeSelectionChanged(KMFolder * folder) { blockSignals( true ); + bool found = false; for ( QListViewItemIterator it( this ); it.current(); ++it ) { KMFolderTreeItem *fti = static_cast( it.current() ); if ( fti->folder() == folder && !fti->isSelected() ) { @@ -284,12 +293,18 @@ void FavoriteFolderView::folderTreeSelectionChanged(KMFolder * folder) setCurrentItem( fti ); ensureItemVisible( fti ); fti->repaint(); + found = true; } else if ( fti->folder() != folder && fti->isSelected() ) { fti->setSelected( false ); fti->repaint(); } } blockSignals( false ); + if ( !found ) { + clearSelection(); + setSelectionModeExt( KListView::NoSelection ); + setSelectionModeExt( KListView::Single ); + } } void FavoriteFolderView::folderRemoved(KMFolder * folder) diff --git a/favoritefolderview.h b/favoritefolderview.h index 43c9cef25..f0535c4ed 100644 --- a/favoritefolderview.h +++ b/favoritefolderview.h @@ -70,7 +70,8 @@ class FavoriteFolderView : public FolderTreeBase static KMFolderTreeItem* findFolderTreeItem( KMFolder* folder ); private slots: - void selectionChanged( QListViewItem *item ); + void selectionChanged(); + void itemClicked( QListViewItem *item ); void folderRemoved( KMFolder *folder ); void dropped( QDropEvent *e, QListViewItem *after ); void contextMenu( QListViewItem *item, const QPoint &point );