diff --git a/autotests/kfiledialog_unittest.cpp b/autotests/kfiledialog_unittest.cpp --- a/autotests/kfiledialog_unittest.cpp +++ b/autotests/kfiledialog_unittest.cpp @@ -347,6 +347,37 @@ QTRY_VERIFY(timerRun); } + void testRememberLastDirectory() + { + const QUrl dir = QUrl::fromLocalFile(QDir::tempPath()).adjusted(QUrl::StripTrailingSlash); + // Open and navigate + { + QFileDialog dialog; + dialog.open(); + + KFileWidget *fw = findFileWidget(); + QVERIFY(fw); + // real show() is delayed to next event. + QVERIFY(QTest::qWaitForWindowExposed(fw->window())); + QCOMPARE(fw->isVisible(), true); + fw->setUrl(dir); + fw->slotCancel(); + } + // Open another filedialog, check that the default directory is the one from above + { + QFileDialog dialog; + dialog.open(); + + KFileWidget *fw = findFileWidget(); + QVERIFY(fw); + // real show() is delayed to next event. + QVERIFY(QTest::qWaitForWindowExposed(fw->window())); + QCOMPARE(fw->isVisible(), true); + QCOMPARE(dialog.directoryUrl().adjusted(QUrl::StripTrailingSlash), dir); + fw->slotCancel(); + } + } + private: QTemporaryDir m_tempDir; diff --git a/src/platformtheme/kdeplatformfiledialoghelper.cpp b/src/platformtheme/kdeplatformfiledialoghelper.cpp --- a/src/platformtheme/kdeplatformfiledialoghelper.cpp +++ b/src/platformtheme/kdeplatformfiledialoghelper.cpp @@ -114,6 +114,8 @@ connect(m_fileWidget, SIGNAL(accepted()), m_fileWidget, SLOT(accept())); connect(m_fileWidget, SIGNAL(accepted()), SLOT(accept())); connect(m_fileWidget->cancelButton(), SIGNAL(clicked(bool)), SLOT(reject())); + connect(m_fileWidget->dirOperator(), &KDirOperator::urlEntered, this, &KDEPlatformFileDialogBase::directoryEntered); + // ## no connect to fileSelected, filesSelected, fileHighlighted, currentChanged? layout()->addWidget(m_buttons); }