[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    extragear/multimedia/amarok
From:       Andrew Turner <andrewturner512+kdebugs () googlemail ! com>
Date:       2006-06-30 23:11:11
Message-ID: 1151709071.416479.14255.nullmailer () svn ! kde ! org
[Download RAW message or body]

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 <tholi945@student.liu.se>.
     * 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<DividerItem*>(item))
+    if ( !item || dynamic_cast<DividerItem*>(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;
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic