|
30 | 30 | #include "qgsproject.h"
|
31 | 31 | #include "qgsapplication.h"
|
32 | 32 | #include "qgsfileutils.h"
|
| 33 | +#include "qgsmimedatautils.h" |
33 | 34 |
|
34 | 35 | QgsFileWidget::QgsFileWidget( QWidget *parent )
|
35 | 36 | : QWidget( parent )
|
@@ -429,39 +430,54 @@ void QgsFileDropEdit::setFilters( const QString &filters )
|
429 | 430 |
|
430 | 431 | QString QgsFileDropEdit::acceptableFilePath( QDropEvent *event ) const
|
431 | 432 | {
|
| 433 | + QStringList rawPaths; |
432 | 434 | QStringList paths;
|
433 | 435 | if ( event->mimeData()->hasUrls() )
|
434 | 436 | {
|
435 |
| - Q_FOREACH ( const QUrl &url, event->mimeData()->urls() ) |
| 437 | + const QList< QUrl > urls = event->mimeData()->urls(); |
| 438 | + rawPaths.reserve( urls.count() ); |
| 439 | + for ( const QUrl &url : urls ) |
436 | 440 | {
|
437 |
| - QFileInfo file( url.toLocalFile() ); |
438 |
| - switch ( mStorageMode ) |
| 441 | + rawPaths.append( url.toLocalFile() ); |
| 442 | + } |
| 443 | + } |
| 444 | + |
| 445 | + QgsMimeDataUtils::UriList lst = QgsMimeDataUtils::decodeUriList( event->mimeData() ); |
| 446 | + for ( const QgsMimeDataUtils::Uri &u : lst ) |
| 447 | + { |
| 448 | + rawPaths.append( u.uri ); |
| 449 | + } |
| 450 | + |
| 451 | + for ( const QString &path : qgis::as_const( rawPaths ) ) |
| 452 | + { |
| 453 | + QFileInfo file( path ); |
| 454 | + switch ( mStorageMode ) |
| 455 | + { |
| 456 | + case QgsFileWidget::GetFile: |
| 457 | + case QgsFileWidget::GetMultipleFiles: |
| 458 | + case QgsFileWidget::SaveFile: |
439 | 459 | {
|
440 |
| - case QgsFileWidget::GetFile: |
441 |
| - case QgsFileWidget::GetMultipleFiles: |
442 |
| - case QgsFileWidget::SaveFile: |
443 |
| - { |
444 |
| - if ( file.isFile() && ( mAcceptableExtensions.isEmpty() || mAcceptableExtensions.contains( file.suffix(), Qt::CaseInsensitive ) ) ) |
445 |
| - paths.append( file.filePath() ); |
| 460 | + if ( file.isFile() && ( mAcceptableExtensions.isEmpty() || mAcceptableExtensions.contains( file.suffix(), Qt::CaseInsensitive ) ) ) |
| 461 | + paths.append( file.filePath() ); |
446 | 462 |
|
447 |
| - break; |
448 |
| - } |
| 463 | + break; |
| 464 | + } |
449 | 465 |
|
450 |
| - case QgsFileWidget::GetDirectory: |
| 466 | + case QgsFileWidget::GetDirectory: |
| 467 | + { |
| 468 | + if ( file.isDir() ) |
| 469 | + paths.append( file.filePath() ); |
| 470 | + else if ( file.isFile() ) |
451 | 471 | {
|
452 |
| - if ( file.isDir() ) |
453 |
| - paths.append( file.filePath() ); |
454 |
| - else if ( file.isFile() ) |
455 |
| - { |
456 |
| - // folder mode, but a file dropped. So get folder name from file |
457 |
| - paths.append( file.absolutePath() ); |
458 |
| - } |
459 |
| - |
460 |
| - break; |
| 472 | + // folder mode, but a file dropped. So get folder name from file |
| 473 | + paths.append( file.absolutePath() ); |
461 | 474 | }
|
| 475 | + |
| 476 | + break; |
462 | 477 | }
|
463 | 478 | }
|
464 | 479 | }
|
| 480 | + |
465 | 481 | if ( paths.size() > 1 )
|
466 | 482 | {
|
467 | 483 | return QStringLiteral( "\"%1\"" ).arg( paths.join( QStringLiteral( "\" \"" ) ) );
|
|
0 commit comments