[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