diff --git a/src/CompletionProxyModel.h b/src/CompletionProxyModel.h new file mode 100644 index 0000000000000000000000000000000000000000..ee38075e1e46565d9e954df5eb48535126859e7c --- /dev/null +++ b/src/CompletionProxyModel.h @@ -0,0 +1,20 @@ +#pragma once + +// Class for showing a limited amount of completions at a time + +#include <QSortFilterProxyModel> + +class CompletionProxyModel : public QSortFilterProxyModel +{ +public: + CompletionProxyModel(QAbstractItemModel *model, QObject *parent = nullptr) + : QSortFilterProxyModel(parent) + { + setSourceModel(model); + } + int rowCount(const QModelIndex &parent) const override + { + auto row_count = QSortFilterProxyModel::rowCount(parent); + return (row_count < 7) ? row_count : 7; + } +}; diff --git a/src/TextInputWidget.cpp b/src/TextInputWidget.cpp index 30589b61634d8a14682584a547c67bda8bfe4e40..b46f0e5aa99f757d6552443359b70cb32dfa97ba 100644 --- a/src/TextInputWidget.cpp +++ b/src/TextInputWidget.cpp @@ -30,7 +30,7 @@ #include "Cache.h" #include "ChatPage.h" -#include "CompletionModel.h" +#include "CompletionProxyModel.h" #include "Logging.h" #include "TextInputWidget.h" #include "Utils.h" @@ -70,7 +70,7 @@ FilteredTextEdit::FilteredTextEdit(QWidget *parent) completer_->setWidget(this); auto model = new emoji::EmojiSearchModel(this); model->sort(0, Qt::AscendingOrder); - completer_->setModel((emoji_completion_model_ = new CompletionModel(model, this))); + completer_->setModel((emoji_completion_model_ = new CompletionProxyModel(model, this))); completer_->setModelSorting(QCompleter::UnsortedModel); completer_->popup()->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); completer_->popup()->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); diff --git a/src/TextInputWidget.h b/src/TextInputWidget.h index c62a98be9ffb2489e74161fc24343a3b19e9d4eb..19462f70f586c2fc67c3d3374b38acc47857e7e3 100644 --- a/src/TextInputWidget.h +++ b/src/TextInputWidget.h @@ -31,7 +31,7 @@ struct SearchResult; -class CompletionModel; +class CompletionProxyModel; class FlatButton; class LoadingIndicator; class QCompleter; @@ -72,7 +72,7 @@ protected: private: bool emoji_popup_open_ = false; - CompletionModel *emoji_completion_model_; + CompletionProxyModel *emoji_completion_model_; std::deque<QString> true_history_, working_history_; int trigger_pos_; // Where emoji completer was triggered size_t history_index_;