Skip to content

Commit 7c8f4c3

Browse files
committed
Fix extensions not automatically added to new filenames in QgsFileWidget
Fixes a UX regression introduced by swapping dialogs to use QgsFileWidget, where on some platforms the extension is not automatically added for selected file names
1 parent 128e37e commit 7c8f4c3

File tree

2 files changed

+12
-3
lines changed

2 files changed

+12
-3
lines changed

src/gui/qgsfilewidget.cpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#include "qgslogger.h"
3030
#include "qgsproject.h"
3131
#include "qgsapplication.h"
32+
#include "qgsfileutils.h"
3233

3334
QgsFileWidget::QgsFileWidget( QWidget *parent )
3435
: QWidget( parent )
@@ -263,16 +264,23 @@ void QgsFileWidget::openFileDialog()
263264
fileName = QFileDialog::getExistingDirectory( this, title, QFileInfo( oldPath ).absoluteFilePath(), QFileDialog::ShowDirsOnly );
264265
break;
265266
case SaveFile:
267+
{
268+
QString filter;
266269
title = !mDialogTitle.isEmpty() ? mDialogTitle : tr( "Create or select a file" );
267270
if ( !confirmOverwrite() )
268271
{
269-
fileName = QFileDialog::getSaveFileName( this, title, QFileInfo( oldPath ).absoluteFilePath(), mFilter, nullptr, QFileDialog::DontConfirmOverwrite );
272+
fileName = QFileDialog::getSaveFileName( this, title, QFileInfo( oldPath ).absoluteFilePath(), mFilter, &filter, QFileDialog::DontConfirmOverwrite );
270273
}
271274
else
272275
{
273-
fileName = QFileDialog::getSaveFileName( this, title, QFileInfo( oldPath ).absoluteFilePath(), mFilter );
276+
fileName = QFileDialog::getSaveFileName( this, title, QFileInfo( oldPath ).absoluteFilePath(), mFilter, &filter );
274277
}
275-
break;
278+
279+
// make sure filename ends with filter. This isn't automatically done by
280+
// getSaveFileName on some platforms (e.g. gnome)
281+
fileName = QgsFileUtils::addExtensionFromFilter( fileName, filter );
282+
}
283+
break;
276284
}
277285

278286
if ( fileName.isEmpty() && fileNames.isEmpty( ) )

tests/src/python/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ ADD_PYTHON_TEST(PyQgsFeatureIterator test_qgsfeatureiterator.py)
6565
ADD_PYTHON_TEST(PyQgsFeedback test_qgsfeedback.py)
6666
ADD_PYTHON_TEST(PyQgsFields test_qgsfields.py)
6767
ADD_PYTHON_TEST(PyQgsFieldModel test_qgsfieldmodel.py)
68+
ADD_PYTHON_TEST(PyQgsFileUtils test_qgsfileutils.py)
6869
ADD_PYTHON_TEST(PyQgsFilterLineEdit test_qgsfilterlineedit.py)
6970
ADD_PYTHON_TEST(PyQgsFloatingWidget test_qgsfloatingwidget.py)
7071
ADD_PYTHON_TEST(PyQgsFontButton test_qgsfontbutton.py)

0 commit comments

Comments
 (0)