Skip to content

Commit 324fb40

Browse files
committed
QgsFileWidget should also accept dropped plain text paths
1 parent 8ad2d72 commit 324fb40

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

src/gui/qgsfilewidget.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ QgsFileWidget::QgsFileWidget( QWidget *parent )
5454

5555
// otherwise, use the traditional QLineEdit subclass
5656
mLineEdit = new QgsFileDropEdit( this );
57+
mLineEdit->setDragEnabled( true );
5758
connect( mLineEdit, &QLineEdit::textChanged, this, &QgsFileWidget::textEdited );
5859
mLayout->addWidget( mLineEdit );
5960

@@ -438,16 +439,23 @@ QString QgsFileDropEdit::acceptableFilePath( QDropEvent *event ) const
438439
rawPaths.reserve( urls.count() );
439440
for ( const QUrl &url : urls )
440441
{
441-
rawPaths.append( url.toLocalFile() );
442+
const QString local = url.toLocalFile();
443+
if ( !rawPaths.contains( local ) )
444+
rawPaths.append( local );
442445
}
443446
}
444447

445448
QgsMimeDataUtils::UriList lst = QgsMimeDataUtils::decodeUriList( event->mimeData() );
446449
for ( const QgsMimeDataUtils::Uri &u : lst )
447450
{
448-
rawPaths.append( u.uri );
451+
if ( !rawPaths.contains( u.uri ) )
452+
rawPaths.append( u.uri );
449453
}
450454

455+
if ( !event->mimeData()->text().isEmpty() && !rawPaths.contains( event->mimeData()->text() ) )
456+
rawPaths.append( event->mimeData()->text() );
457+
458+
paths.reserve( rawPaths.count() );
451459
for ( const QString &path : qgis::as_const( rawPaths ) )
452460
{
453461
QFileInfo file( path );

tests/src/gui/testqgsfilewidget.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,13 @@ void TestQgsFileWidget::testDroppedFiles()
126126
qobject_cast< QgsFileDropEdit * >( w->lineEdit() )->dropEvent( event.get() );
127127
QCOMPARE( w->lineEdit()->text(), QString( TEST_DATA_DIR ) + QStringLiteral( "/mesh/quad_and_triangle.txt" ) );
128128

129+
// plain text should also be permitted
130+
mime = qgis::make_unique< QMimeData >();
131+
mime->setText( TEST_DATA_DIR + QStringLiteral( "/mesh/quad_and_triangle.2dm" ) );
132+
event.reset( new QDropEvent( QPointF( 1, 1 ), Qt::CopyAction, mime.get(), Qt::LeftButton, Qt::NoModifier ) );
133+
qobject_cast< QgsFileDropEdit * >( w->lineEdit() )->dropEvent( event.get() );
134+
QCOMPARE( w->lineEdit()->text(), TEST_DATA_DIR + QStringLiteral( "/mesh/quad_and_triangle.2dm" ) );
135+
129136
mime.reset( new QMimeData() );
130137
mime->setUrls( QList<QUrl>() << QUrl::fromLocalFile( TEST_DATA_DIR + QStringLiteral( "/bug5598.shp" ) ) );
131138
event.reset( new QDropEvent( QPointF( 1, 1 ), Qt::CopyAction, mime.get(), Qt::LeftButton, Qt::NoModifier ) );
@@ -183,11 +190,12 @@ void TestQgsFileWidget::testMultipleFiles()
183190

184191
std::unique_ptr< QMimeData > mime( new QMimeData() );
185192
mime->setUrls( QList<QUrl>() << QUrl::fromLocalFile( TEST_DATA_DIR + QStringLiteral( "/bug5598.shp" ) )
186-
<< QUrl::fromLocalFile( TEST_DATA_DIR + QStringLiteral( "/bug5598.shp" ) ) );
193+
<< QUrl::fromLocalFile( TEST_DATA_DIR + QStringLiteral( "/elev.gpx" ) ) );
187194
std::unique_ptr< QDropEvent > event( new QDropEvent( QPointF( 1, 1 ), Qt::CopyAction, mime.get(), Qt::LeftButton, Qt::NoModifier ) );
188195

189196
qobject_cast< QgsFileDropEdit * >( w->lineEdit() )->dropEvent( event.get() );
190-
QCOMPARE( w->lineEdit()->text(), QStringLiteral( "\"%1\" \"%1\"" ).arg( TEST_DATA_DIR + QStringLiteral( "/bug5598.shp" ) ) );
197+
QCOMPARE( w->lineEdit()->text(), QStringLiteral( "\"%1\" \"%2\"" ).arg( TEST_DATA_DIR + QStringLiteral( "/bug5598.shp" ) )
198+
.arg( TEST_DATA_DIR + QStringLiteral( "/elev.gpx" ) ) );
191199
}
192200

193201

0 commit comments

Comments
 (0)