diff --git a/modules/gui/qt4/dialogs/playlist.cpp b/modules/gui/qt4/dialogs/playlist.cpp index 2f2b72425f..0da5c98453 100644 --- a/modules/gui/qt4/dialogs/playlist.cpp +++ b/modules/gui/qt4/dialogs/playlist.cpp @@ -82,15 +82,7 @@ PlaylistDialog::~PlaylistDialog() void PlaylistDialog::dropEvent( QDropEvent *event ) { - const QMimeData *mimeData = event->mimeData(); - foreach( const QUrl &url, mimeData->urls() ) { - QString s = toNativeSeparators( url.toString() ); - if( s.length() > 0 ) { - playlist_Add( THEPL, qtu(s), NULL, - PLAYLIST_APPEND, PLAYLIST_END, true, false ); - } - } - event->acceptProposedAction(); + playlistWidget->dropEvent(event); } void PlaylistDialog::dragEnterEvent( QDragEnterEvent *event ) { diff --git a/modules/gui/qt4/main_interface.cpp b/modules/gui/qt4/main_interface.cpp index db52d71724..82008cb514 100644 --- a/modules/gui/qt4/main_interface.cpp +++ b/modules/gui/qt4/main_interface.cpp @@ -59,6 +59,7 @@ #include #include #include +#include #include /* Wheel event */ #include /* vout_thread_t and VOUT_ events */ @@ -1268,7 +1269,7 @@ void MainInterface::dropEvent(QDropEvent *event) */ void MainInterface::dropEventPlay( QDropEvent *event, bool b_play, bool b_playlist ) { - if( event->possibleActions() & ( Qt::CopyAction | Qt::MoveAction ) ) + if( event->possibleActions() & ( Qt::CopyAction | Qt::MoveAction | Qt::LinkAction ) ) event->setDropAction( Qt::CopyAction ); else return; @@ -1293,11 +1294,29 @@ void MainInterface::dropEventPlay( QDropEvent *event, bool b_play, bool b_playli if( url.isValid() ) { QString mrl = toURI( url.toEncoded().constData() ); - playlist_Add( THEPL, qtu(mrl), NULL, + QFileInfo info( url.toLocalFile() ); + if( info.exists() && info.isSymLink() ) + { + QString target = info.symLinkTarget(); + QUrl url; + if( QFile::exists( target ) ) + { + url = QUrl::fromLocalFile( target ); + } + else + { + url.setUrl( target ); + } + mrl = toURI( url.toEncoded().constData() ); + } + if( mrl.length() > 0 ) + { + playlist_Add( THEPL, qtu(mrl), NULL, PLAYLIST_APPEND | (first ? PLAYLIST_GO: PLAYLIST_PREPARSE), PLAYLIST_END, b_playlist, pl_Unlocked ); - first = false; - RecentsMRL::getInstance( p_intf )->addRecent( mrl ); + first = false; + RecentsMRL::getInstance( p_intf )->addRecent( mrl ); + } } }