[network/ruqola] src/widgets/room: Reduce flickering
Laurent Montel <[email protected]>
| Newsgroups | gmane.comp.kde.cvs |
|---|---|
| Message-ID | <[email protected]> |
Git commit fbdef077a8553374c0ea7e373636e7c61e704930 by Laurent Montel.
Committed on 13/08/2026 at 16:47.
Pushed by mlaurent into branch 'master'.
Reduce flickering
M +11 -1 src/widgets/room/usersinroomflowwidget.cpp
https://invent.kde.org/network/ruqola/-/commit/fbdef077a8553374c0ea7e373636e7c61e704930
diff --git a/src/widgets/room/usersinroomflowwidget.cpp b/src/widgets/room/usersinroomflowwidget.cpp
index fd8d7a2c7d..2ef1cd5d3e 100644
--- a/src/widgets/room/usersinroomflowwidget.cpp
+++ b/src/widgets/room/usersinroomflowwidget.cpp
@@ -18,7 +18,6 @@
#include <TextAddonsWidgets/TextAddonsWidgetFlowLayout>
using namespace Qt::Literals::StringLiterals;
-#define MAX_NUMBER_USER 70
UsersInRoomFlowWidget::UsersInRoomFlowWidget(QWidget *parent)
: QWidget(parent)
, mFlowLayout(new TextAddonsWidgets::TextAddonsWidgetFlowLayout(this))
@@ -106,10 +105,20 @@ void UsersInRoomFlowWidget::generateListUsersWidget()
{
if (isVisible()) {
const auto count = mUsersForRoomFilterProxyModel->rowCount();
+ // Batch the whole rebuild to reduce repaint churn/flicker.
+ setUpdatesEnabled(false);
+ // clearAndDeleteWidgets() uses deleteLater(): hide the old widgets first so that they don't
+ // paint over the new ones until the deferred deletion happens.
+ for (int i = 0, nbItems = mFlowLayout->count(); i < nbItems; ++i) {
+ if (QWidget *w = mFlowLayout->itemAt(i)->widget()) {
+ w->hide();
+ }
+ }
mFlowLayout->clearAndDeleteWidgets();
mListUsersWidget.clear();
qCDebug(RUQOLA_USERSINROOMFLOWWIDGETS_LOG) << "mUsersForRoomFilterProxyModel->rowCount() " << count;
int numberOfUsers = 0;
+ constexpr int MAX_NUMBER_USER = 70;
for (; numberOfUsers < count && numberOfUsers < MAX_NUMBER_USER; ++numberOfUsers) {
const auto userModelIndex = mUsersForRoomFilterProxyModel->index(numberOfUsers, 0);
const QString userDisplayName = userModelIndex.data(UsersForRoomModel::UsersForRoomRoles::DisplayName).toString();
@@ -145,6 +154,7 @@ void UsersInRoomFlowWidget::generateListUsersWidget()
connect(openExternalDialogLabel, &QLabel::linkActivated, this, &UsersInRoomFlowWidget::loadExternalDialog);
mFlowLayout->addWidget(openExternalDialogLabel);
}
+ setUpdatesEnabled(true);
}
}