diff --git a/documentation/documentationview.h b/documentation/documentationview.h --- a/documentation/documentationview.h +++ b/documentation/documentationview.h @@ -58,6 +58,7 @@ private: void updateView(); + void returnPressed(); KToolBar* mActions; QAction* mForward; diff --git a/documentation/documentationview.cpp b/documentation/documentationview.cpp --- a/documentation/documentationview.cpp +++ b/documentation/documentationview.cpp @@ -28,6 +28,7 @@ #include #include #include +#include #include #include @@ -85,8 +86,9 @@ mIdentifiers->setSizePolicy(QSizePolicy::Expanding, mIdentifiers->sizePolicy().verticalPolicy()); connect(mIdentifiers->completer(), static_cast(&QCompleter::activated), this, &DocumentationView::changedSelection); - QWidget::setTabOrder(mProviders, mIdentifiers); + connect(mIdentifiers, &QLineEdit::returnPressed, this, &DocumentationView::returnPressed); + QWidget::setTabOrder(mProviders, mIdentifiers); mActions->addWidget(mProviders); mActions->addWidget(mIdentifiers); @@ -146,6 +148,23 @@ showDocumentation(prov->homePage()); } +void DocumentationView::returnPressed() +{ + // Exit if search text is empty. It's necessary because of empty + // line edit text not leads to "empty" completer indexes. + if (mIdentifiers->text().isEmpty()) + return; + + // Exit if completer popup has selected item - in this case 'Return' + // key press emits QCompleter::activated signal which is already connected. + if (mIdentifiers->completer()->popup()->currentIndex().isValid()) + return; + + // If user doesn't select any item in popup we will try to use the first row. + if (mIdentifiers->completer()->setCurrentRow(0)) + changedSelection(mIdentifiers->completer()->currentIndex()); +} + void DocumentationView::changedSelection(const QModelIndex& idx) { if (idx.isValid()) {