diff --git a/src/filewidgets/kdiroperator.h b/src/filewidgets/kdiroperator.h --- a/src/filewidgets/kdiroperator.h +++ b/src/filewidgets/kdiroperator.h @@ -912,6 +912,11 @@ */ void currentIconSizeChanged(int size); + /** + * Triggered when the user hit Enter/Return + */ + void keyEnterReturnPressed(); + private: class Private; Private *const d; diff --git a/src/filewidgets/kdiroperator.cpp b/src/filewidgets/kdiroperator.cpp --- a/src/filewidgets/kdiroperator.cpp +++ b/src/filewidgets/kdiroperator.cpp @@ -164,6 +164,8 @@ { if (!(e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter)) { QWidget::keyPressEvent(e); + } else { + emit keyEnterReturnPressed(); } } diff --git a/src/filewidgets/kfilewidget.h b/src/filewidgets/kfilewidget.h --- a/src/filewidgets/kfilewidget.h +++ b/src/filewidgets/kfilewidget.h @@ -613,6 +613,7 @@ Q_PRIVATE_SLOT(d, void _k_slotIconSizeSliderMoved(int)) Q_PRIVATE_SLOT(d, void _k_slotIconSizeChanged(int)) Q_PRIVATE_SLOT(d, void _k_slotViewDoubleClicked(const QModelIndex&)) + Q_PRIVATE_SLOT(d, void _k_slotViewKeyEnterReturnPressed()) }; #endif diff --git a/src/filewidgets/kfilewidget.cpp b/src/filewidgets/kfilewidget.cpp --- a/src/filewidgets/kfilewidget.cpp +++ b/src/filewidgets/kfilewidget.cpp @@ -198,6 +198,7 @@ void _k_slotIconSizeSliderMoved(int); void _k_slotIconSizeChanged(int); void _k_slotViewDoubleClicked(const QModelIndex&); + void _k_slotViewKeyEnterReturnPressed(); void addToRecentDocuments(); @@ -441,6 +442,8 @@ SLOT(_k_fileSelected(KFileItem))); connect(d->ops, SIGNAL(finishedLoading()), SLOT(_k_slotLoadingFinished())); + connect(d->ops, SIGNAL(keyEnterReturnPressed()), + SLOT(_k_slotViewKeyEnterReturnPressed())); d->ops->setupMenu(KDirOperator::SortActions | KDirOperator::FileActions | @@ -2192,6 +2195,15 @@ } } +void KFileWidgetPrivate::_k_slotViewKeyEnterReturnPressed() +{ + // an enter/return event occured in the view + // when we are saving one file and there is no selection in the view (otherwise we get an activated event) + if (operationMode == KFileWidget::Saving && (ops->mode() & KFile::File) && ops->selectedItems().isEmpty()) { + q->slotOk(); + } +} + static QString getExtensionFromPatternList(const QStringList &patternList) { // qDebug(); diff --git a/tests/kfilewidgettest_gui.cpp b/tests/kfilewidgettest_gui.cpp --- a/tests/kfilewidgettest_gui.cpp +++ b/tests/kfilewidgettest_gui.cpp @@ -21,14 +21,49 @@ #include #include #include +#include int main(int argc, char **argv) { QApplication app(argc, argv); - KFileWidget* fileWidget = new KFileWidget(QUrl(QStringLiteral("kfiledialog:///OpenDialog")), nullptr); - fileWidget->setMode(KFile::Files | KFile::ExistingOnly); + QApplication *ptr_app = &app; + + KFileWidget* fileWidget = new KFileWidget(QUrl(QStringLiteral("kfiledialog:///SaveDialog")), nullptr); + fileWidget->setOperationMode(KFileWidget::Saving); + fileWidget->setMode(KFile::File); fileWidget->setAttribute(Qt::WA_DeleteOnClose); + + /* + fileWidget->connect(fileWidget, &KFileWidget::fileSelected, [&app] (const QUrl & url) { + qDebug() << "file selected" << url; + app.exit(); + }); + */ + + fileWidget->okButton()->show(); + fileWidget->cancelButton()->show(); + app.connect(fileWidget->okButton(), &QPushButton::clicked, fileWidget, &KFileWidget::slotOk); + app.connect(fileWidget->cancelButton(), &QPushButton::clicked, fileWidget, [&ptr_app, fileWidget]() { + fileWidget->slotCancel(); + ptr_app->exit(); + }); + + app.connect(fileWidget, &KFileWidget::accepted, fileWidget, [&ptr_app, fileWidget]() { + qDebug() << "accepted"; + fileWidget->accept(); + qDebug() << fileWidget->selectedFile(); + qDebug() << fileWidget->selectedUrl(); + qDebug() << fileWidget->selectedFiles(); + qDebug() << fileWidget->selectedUrls(); + ptr_app->exit(); + }); + + app.connect(fileWidget, &KFileWidget::fileSelected, fileWidget, [&ptr_app, fileWidget](const QUrl & url) { + qDebug() << "selected " << url; + ptr_app->exit(); + }); + fileWidget->show(); return app.exec();