Fix filtering users in the member list

(cherry picked from commit 5c04eb85af)

Co-authored-by: Tobias Fella <fella@posteo.de>
This commit is contained in:
Carl Schwan
2024-09-15 21:02:05 +00:00
parent f2f6406403
commit 2803c6fd58
3 changed files with 28 additions and 3 deletions

View File

@@ -8,7 +8,7 @@
bool UserFilterModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const bool UserFilterModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
{ {
Q_UNUSED(sourceParent); Q_UNUSED(sourceParent);
if (m_filterText.length() < 1) { if (!m_allowEmpty && m_filterText.length() < 1) {
return false; return false;
} }
return sourceModel()->data(sourceModel()->index(sourceRow, 0), UserListModel::DisplayNameRole).toString().contains(m_filterText, Qt::CaseInsensitive) return sourceModel()->data(sourceModel()->index(sourceRow, 0), UserListModel::DisplayNameRole).toString().contains(m_filterText, Qt::CaseInsensitive)
@@ -27,4 +27,15 @@ void UserFilterModel::setFilterText(const QString &filterText)
invalidateFilter(); invalidateFilter();
} }
bool UserFilterModel::allowEmpty() const
{
return m_allowEmpty;
}
void UserFilterModel::setAllowEmpty(bool allowEmpty)
{
m_allowEmpty = allowEmpty;
Q_EMIT allowEmptyChanged();
}
#include "moc_userfiltermodel.cpp" #include "moc_userfiltermodel.cpp"

View File

@@ -24,6 +24,7 @@ class UserFilterModel : public QSortFilterProxyModel
* The text is either a desired display name or matrix id. * The text is either a desired display name or matrix id.
*/ */
Q_PROPERTY(QString filterText READ filterText WRITE setFilterText NOTIFY filterTextChanged) Q_PROPERTY(QString filterText READ filterText WRITE setFilterText NOTIFY filterTextChanged)
Q_PROPERTY(bool allowEmpty READ allowEmpty WRITE setAllowEmpty NOTIFY allowEmptyChanged)
public: public:
/** /**
@@ -36,9 +37,14 @@ public:
QString filterText() const; QString filterText() const;
void setFilterText(const QString &filterText); void setFilterText(const QString &filterText);
bool allowEmpty() const;
void setAllowEmpty(bool allowEmpty);
Q_SIGNALS: Q_SIGNALS:
void filterTextChanged(); void filterTextChanged();
void allowEmptyChanged();
private: private:
QString m_filterText; QString m_filterText;
bool m_allowEmpty = false;
}; };

View File

@@ -1,6 +1,8 @@
// SPDX-FileCopyrightText: 2023 James Graham <james.h.graham@protonmail.com> // SPDX-FileCopyrightText: 2023 James Graham <james.h.graham@protonmail.com>
// SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
pragma ComponentBehavior: Bound
import QtQuick import QtQuick
import QtQuick.Controls as QQC2 import QtQuick.Controls as QQC2
import QtQuick.Layouts import QtQuick.Layouts
@@ -188,11 +190,17 @@ QQC2.ScrollView {
focusSequence: "Ctrl+Shift+F" focusSequence: "Ctrl+Shift+F"
onAccepted: sortedMessageEventModel.filterString = text onAccepted: userFilterModel.filterText = text
} }
} }
model: root.room.isDirectChat() ? 0 : RoomManager.userListModel model: root.room.isDirectChat() ? 0 : userFilterModel
UserFilterModel {
id: userFilterModel
sourceModel: RoomManager.userListModel
allowEmpty: true
}
clip: true clip: true
focus: true focus: true