[Amarok] 6fbcc45 Select tracks first in the file browser in single-

Rick W. Chen stuffcorpse at archlinux.us
Sun Jun 13 19:09:47 CEST 2010


commit 6fbcc4555f6786ce061df96772d98620eb1b65db
Author: Rick W. Chen <stuffcorpse at archlinux.us>
Date:   Fri Jun 11 20:12:27 2010 +1200

    Select tracks first in the file browser in single-click mode
    
    Previously, a single click on a track will append&play it. This overrides
    the behaviour for single-clicks in KDE single-click mode so that it
    actually behave more like double-click mode.
    
    Perhaps it is better to decide how single and double-click modes are
    handled, what happens when an item is activated, what actions to take
    for different types of items, etc. Then it can be implemented inside our
    PrettyViews so that all the specialized views can handle mouse clicks more
    consistently.
    
    BUG: 233171
    CCMAIL: amarok-devel at kde.org

diff --git a/ChangeLog b/ChangeLog
index 83acf49..6e84215 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -28,6 +28,8 @@ VERSION 2.3.2-Beta 1
       Patch by Richard Longland <rlongland at hotmail.com>.
 
   BUGFIXES:
+    * Single clicking a file in the file browser now selects it instead of
+      appending to the playlist by default in single-click mode. (BR 233171)
     * Fixed resizing and eliding issues with the file browser breadcrumbs.
       (BR 231366 comment #5)
     * Drop file icons in file browser breadcrumbs. (BR 231366)
diff --git a/src/browsers/filebrowser/FileView.cpp b/src/browsers/filebrowser/FileView.cpp
index 94dfec4..4e383fe 100644
--- a/src/browsers/filebrowser/FileView.cpp
+++ b/src/browsers/filebrowser/FileView.cpp
@@ -75,15 +75,13 @@ FileView::FileView( QWidget * parent )
 }
 
 void
-FileView::contextMenuEvent ( QContextMenuEvent * e )
+FileView::contextMenuEvent( QContextMenuEvent *e )
 {
-
     DEBUG_BLOCK
 
     if( !model() )
         return;
 
-
     //trying to do fancy stuff while showing places only leads to tears!
     debug() << model()->objectName();
     if( model()->objectName() == "PLACESMODEL" )
@@ -91,20 +89,14 @@ FileView::contextMenuEvent ( QContextMenuEvent * e )
         e->accept();
         return;
     }
-    
 
     QModelIndexList indices = selectedIndexes();
-
     // Abort if nothing is selected
     if( indices.isEmpty() )
         return;
 
-    
-
     KMenu* menu = new KMenu( this );
-
     QList<QAction *> actions = actionsForIndices( indices );
-
     foreach( QAction * action, actions )
         menu->addAction( action );
 
@@ -148,6 +140,61 @@ FileView::contextMenuEvent ( QContextMenuEvent * e )
 }
 
 void
+FileView::mouseReleaseEvent( QMouseEvent *event )
+{
+    QModelIndex index = indexAt( event->pos() );
+    if( !index.isValid() )
+    {
+        m_lastSelectedIndex = QModelIndex();
+        event->accept();
+        return;
+    }
+
+    QModelIndexList indices = selectedIndexes();
+    if( indices.count() == 1 && KGlobalSettings::singleClick() )
+    {
+        KFileItem item = index.data( KDirModel::FileItemRole ).value<KFileItem>();
+        if( item.isDir() )
+        {
+            m_lastSelectedIndex = QModelIndex();
+            Amarok::PrettyTreeView::mouseReleaseEvent( event );
+            return;
+        }
+
+        // check if the last selected item was clicked again, if so then trigger editor
+        if( m_lastSelectedIndex != index )
+        {
+            m_lastSelectedIndex = index;
+        }
+        else
+        {
+            Amarok::PrettyTreeView::edit( index, QAbstractItemView::AllEditTriggers, event );
+            m_lastSelectedIndex = QModelIndex();
+        }
+        event->accept();
+    }
+    else
+    {
+        m_lastSelectedIndex = QModelIndex();
+        Amarok::PrettyTreeView::mouseReleaseEvent( event );
+    }
+}
+
+void
+FileView::mouseDoubleClickEvent( QMouseEvent *event )
+{
+    m_lastSelectedIndex = QModelIndex();
+    QModelIndex index = indexAt( event->pos() );
+    if( !index.isValid() )
+    {
+        event->accept();
+        return;
+    }
+    emit activated( index );
+    event->accept();
+}
+
+void
 FileView::slotAppendToPlaylist()
 {
     addSelectionToPlaylist( false );
@@ -285,8 +332,6 @@ FileView::slotMoveTracks( const Meta::TrackList& tracks )
     m_moveAction = 0;
 }
 
-
-
 QList<QAction *>
 FileView::actionsForIndices( const QModelIndexList &indices )
 {
@@ -368,11 +413,11 @@ FileView::addSelectionToPlaylist( bool replace )
     The::playlistController()->insertOptioned( urls, replace ? Playlist::Replace : Playlist::AppendAndPlay );
 }
 
-
 void
 FileView::startDrag( Qt::DropActions supportedActions )
 {
     DEBUG_BLOCK
+    m_lastSelectedIndex = QModelIndex();
 
     //setSelectionMode( QAbstractItemView::NoSelection );
     // When a parent item is dragged, startDrag() is called a bunch of times. Here we prevent that:
@@ -435,8 +480,6 @@ FileView::selectedItems() const
     return items;
 }
 
-
-
 Meta::TrackList
 FileView::tracksForEdit() const
 {
diff --git a/src/browsers/filebrowser/FileView.h b/src/browsers/filebrowser/FileView.h
index 27057d3..eacd469 100644
--- a/src/browsers/filebrowser/FileView.h
+++ b/src/browsers/filebrowser/FileView.h
@@ -56,10 +56,10 @@ class CollectionAction : public QAction
 class FileView : public Amarok::PrettyTreeView
 {
     Q_OBJECT
+
 public:
     FileView( QWidget * parent );
 
-
 protected slots:
 
     void slotAppendToPlaylist();
@@ -72,12 +72,13 @@ protected slots:
     void slotDelete();
 
 protected:
-            
     QList<QAction *> actionsForIndices( const QModelIndexList &indices );
     void addSelectionToPlaylist( bool replace );
     
-    virtual void contextMenuEvent ( QContextMenuEvent * e );
-    void startDrag( Qt::DropActions supportedActions );
+    virtual void contextMenuEvent( QContextMenuEvent *e );
+    virtual void mouseReleaseEvent( QMouseEvent *event );
+    virtual void mouseDoubleClickEvent( QMouseEvent *event );
+    virtual void startDrag( Qt::DropActions supportedActions );
     KFileItemList selectedItems() const;
 
 private:
@@ -96,6 +97,7 @@ private:
     bool m_copyActivated;
     CollectionAction* m_moveAction;
     CollectionAction* m_copyAction;
+    QPersistentModelIndex m_lastSelectedIndex;
 };
 
 #endif // end include guard


More information about the Amarok-devel mailing list