[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);
     }
 }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.