[vlc-devel] [PATCH] DnD from Internet Explorer to VLC and support of links (*.lnk)

Mario Speiß 1034-135 at online.de
Sun Feb 10 22:31:59 CET 2013


On Windows a Drag and Drop seems to be a Qt::LinkAction. And support for
symbolic links is added.

Playlist widget now uses the p_mi->dropEvent (used to have two implementation,
one calling p_mi->dropEvent already, the other had its own body. That body is
removed)

Regards,
Mario
---
 modules/gui/qt4/dialogs/playlist.cpp |   10 +---------
 modules/gui/qt4/main_interface.cpp   |   27 +++++++++++++++++++++++----
 2 files changed, 24 insertions(+), 13 deletions(-)

diff --git a/modules/gui/qt4/dialogs/playlist.cpp b/modules/gui/qt4/dialogs/playlist.cpp
index 2f2b724..0da5c98 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 db52d71..82008cb 100644
--- a/modules/gui/qt4/main_interface.cpp
+++ b/modules/gui/qt4/main_interface.cpp
@@ -59,6 +59,7 @@
 #include <QStatusBar>
 #include <QLabel>
 #include <QStackedWidget>
+#include <QFileInfo>
 
 #include <vlc_keys.h>                       /* Wheel event */
 #include <vlc_vout_display.h>               /* 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 );
+            }
         }
     }
 
-- 
1.7.5.4




More information about the vlc-devel mailing list