From kde-commits Fri Jun 30 23:11:11 2006 From: Andrew Turner Date: Fri, 30 Jun 2006 23:11:11 +0000 To: kde-commits Subject: extragear/multimedia/amarok Message-Id: <1151709071.416479.14255.nullmailer () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=115170907723552 SVN commit 556627 by aturner: Fix pressing return in the search bar of the Collection Browser so that it always acts on the search string typed, rather than on the currently displayed items (which may not yet have been updated to reflect a change in the string). M +2 -0 ChangeLog M +30 -8 src/collectionbrowser.cpp M +3 -0 src/collectionbrowser.h --- trunk/extragear/multimedia/amarok/ChangeLog #556626:556627 @@ -19,6 +19,8 @@ * The Extended Info panel in the playlistbrowser is now resizeable. BUGFIXES: + * Pressing return in the search bar of the Collection Browser immediately + after typing a query no longer appends the wrong items to the playlist. * Fix crash when pressing Back or Forward buttons multiple times quickly in Artist tab. Patch by Thomas Lindroth . * Fix problems where blanks would be added to data if SQLite was busy. --- trunk/extragear/multimedia/amarok/src/collectionbrowser.cpp #556626:556627 @@ -78,6 +78,7 @@ , m_cat2Menu( new KPopupMenu( this ) ) , m_cat3Menu( new KPopupMenu( this ) ) , m_timer( new QTimer( this ) ) + , m_returnPressed( false ) { setSpacing( 4 ); @@ -178,7 +179,6 @@ connect( m_timer, SIGNAL( timeout() ), SLOT( slotSetFilter() ) ); connect( m_searchEdit, SIGNAL( textChanged( const QString& ) ), SLOT( slotSetFilterTimeout() ) ); - connect( m_searchEdit, SIGNAL( returnPressed() ), SLOT( slotSetFilter() ) ); connect( m_timeFilter, SIGNAL( activated( int ) ), SLOT( slotSetFilter() ) ); setFocusProxy( m_view ); //default object to get focus @@ -187,6 +187,7 @@ void CollectionBrowser::slotSetFilterTimeout() //SLOT { + m_returnPressed = false; m_timer->start( 280, true ); //stops the timer for us first } @@ -198,6 +199,9 @@ m_view->setFilter( m_searchEdit->text() ); m_view->setTimeFilter( m_timeFilter->currentItem() ); m_view->renderView(); + if ( m_returnPressed ) + appendSearchResults(); + m_returnPressed = false; } void @@ -212,6 +216,18 @@ m_view->setShowDivider( m_showDividerAction->isChecked() ); } +void +CollectionBrowser::appendSearchResults() +{ + //If we are not filtering, or the search string has changed recently, do nothing + if ( m_searchEdit->text().stripWhiteSpace().isEmpty() || m_timer->isActive() ) + return; + m_view->selectAll(); + Playlist::instance()->insertMedia( m_view->listSelected(), Playlist::Unique | Playlist::Append ); + m_view->clearSelection(); + m_searchEdit->clear(); +} + bool CollectionBrowser::eventFilter( QObject *o, QEvent *e ) { @@ -243,12 +259,18 @@ case Key_Return: case Key_Enter: - if ( m_searchEdit->text().stripWhiteSpace().isEmpty() ) - return true; - m_view->selectAll(); - Playlist::instance()->insertMedia( m_view->listSelected(), Playlist::Unique | Playlist::Append ); - m_view->clearSelection(); - m_searchEdit->clear(); + if ( m_timer->isActive() ) + { + //Immediately filter and add results + m_timer->stop(); + m_returnPressed = true; + QTimer::singleShot( 0, this, SLOT( slotSetFilter() ) ); + } + else + { + //Add current results + appendSearchResults(); + } return true; default: @@ -1329,7 +1351,7 @@ void CollectionView::invokeItem( QListViewItem* item ) //SLOT { - if ( !item || dynamic_cast(item)) + if ( !item || dynamic_cast(item) ) return; item->setSelected( true ); --- trunk/extragear/multimedia/amarok/src/collectionbrowser.h #556626:556627 @@ -59,6 +59,7 @@ private: void layoutToolbar(); + void appendSearchResults(); //attributes: enum CatMenuId { IdAlbum = 1, IdArtist = 2, IdGenre = 4, IdYear = 8 , IdScan = 16, IdNone = 32, @@ -82,6 +83,8 @@ CollectionView* m_view; QTimer* m_timer; + bool m_returnPressed; + // for CatMenuId friend class CollectionItem; friend class DividerItem;