diff --git a/src/searchbar.cpp b/src/searchbar.cpp index 000d0edb..c7f8310b 100644 --- a/src/searchbar.cpp +++ b/src/searchbar.cpp @@ -63,7 +63,7 @@ SearchBarLineEdit::SearchBarLineEdit(QWidget *parent) : /* +2 for fulltext and load more */ m_completer.setMaxVisibleItems(SuggestionListWorker::getFetchSize() + 2); - setCompleter(&m_completer); + m_completer.setWidget(this); /* QCompleter's uses default list views, which do not have headers. */ auto treeView = new QTreeView(); @@ -143,9 +143,20 @@ void SearchBarLineEdit::focusInEvent( QFocusEvent* event) event->reason() == Qt::MouseFocusReason || event->reason() == Qt::ShortcutFocusReason || event->reason() == Qt::PopupFocusReason) { + connect(&m_completer, QOverload::of(&QCompleter::activated), + this, &QLineEdit::setText,Qt::UniqueConnection); + connect(&m_completer, QOverload::of(&QCompleter::activated), this, QOverload::of(&SearchBarLineEdit::openCompletion), Qt::UniqueConnection); + + connect(&m_completer, QOverload::of(&QCompleter::highlighted), + this, [=](const QModelIndex &index){ + if (index.isValid() && !m_suggestionModel.isLoadMoreIndex(index)) + setText(index.data().toString()); + else + setText(m_searchbarInput); + }, Qt::UniqueConnection); } QLineEdit::focusInEvent(event); } @@ -156,6 +167,7 @@ void SearchBarLineEdit::focusOutEvent(QFocusEvent* event) if (event->reason() == Qt::MouseFocusReason && text().isEmpty()) { setText(m_title); } + disconnect(&m_completer, nullptr, this, nullptr); deselect(); return QLineEdit::focusOutEvent(event); }