[network/ruqola] /: Reduce duplicate code

Laurent Montel <[email protected]>
Newsgroups gmane.comp.kde.cvs
Message-ID <[email protected]>
Git commit 2b0e2faf8046c61ab8d3d3d5c4c3d078c66772b1 by Laurent Montel.
Committed on 02/08/2026 at 09:49.
Pushed by mlaurent into branch 'master'.

Reduce duplicate code

M  +0    -3    CMakeLists.txt
M  +0    -1    config-ruqola.h.in
M  +0    -2    src/widgets/CMakeLists.txt
M  +2    -2    src/widgets/autogenerateui/blockelement/autogenerateinteractionuiviewactionsblock.cpp
M  +2    -2    src/widgets/autogenerateui/widgets/multistaticselectwidget.cpp
M  +5    -2    src/widgets/autogenerateui/widgets/multistaticselectwidget.h
D  +0    -211  src/widgets/common/flowlayout.cpp
D  +0    -61   src/widgets/common/flowlayout.h
M  +2    -2    src/widgets/conferencecalldialog/conferenceinfowidget.cpp
M  +2    -2    src/widgets/dialogs/searchmessagecommandbuttonwidget.cpp
M  +2    -2    src/widgets/forwardmessage/autotests/forwardmessagewidgettest.cpp
M  +2    -2    src/widgets/forwardmessage/forwardmessagewidget.cpp
M  +5    -2    src/widgets/forwardmessage/forwardmessagewidget.h
M  +2    -2    src/widgets/misc/adduserswidget.cpp
M  +5    -2    src/widgets/misc/adduserswidget.h
M  +2    -2    src/widgets/misc/autotests/adduserswidgettest.cpp
M  +2    -2    src/widgets/room/autotests/usersinroomflowwidgettest.cpp
M  +2    -2    src/widgets/room/pendingattachmentwidget.cpp
M  +5    -2    src/widgets/room/pendingattachmentwidget.h
M  +2    -2    src/widgets/room/usersinroomflowwidget.cpp
M  +5    -2    src/widgets/room/usersinroomflowwidget.h
M  +2    -2    src/widgets/teams/teamsearchroomforteamwidget.cpp
M  +5    -2    src/widgets/teams/teamsearchroomforteamwidget.h

https://invent.kde.org/network/ruqola/-/commit/2b0e2faf8046c61ab8d3d3d5c4c3d078c66772b1

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7336e1903b..6746e066ea 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -321,9 +321,6 @@ set_package_properties(
         TYPE
             REQUIRED
 )
-if(${KF6TextAddonsWidgets_VERSION} VERSION_GREATER_EQUAL 2.1.41)
-    set(HAVE_TEXTADDONSWIDGETS_FLOWLAYOUT TRUE)
-endif()
 
 # shall we use DBus?
 # enabled per default on Linux & BSD systems
diff --git a/config-ruqola.h.in b/config-ruqola.h.in
index df51e07dcf..e19dc85575 100644
--- a/config-ruqola.h.in
+++ b/config-ruqola.h.in
@@ -22,4 +22,3 @@
 #cmakedefine01 RUQOLA_STABLE_VERSION
 #cmakedefine01 HAVE_TEXT_AUTOGENERATE_TEXT
 #cmakedefine01 ADD_OFFLINE_SUPPORT
-#cmakedefine01 HAVE_TEXTADDONSWIDGETS_FLOWLAYOUT
diff --git a/src/widgets/CMakeLists.txt b/src/widgets/CMakeLists.txt
index cbf7375b4f..39775cbc60 100644
--- a/src/widgets/CMakeLists.txt
+++ b/src/widgets/CMakeLists.txt
@@ -242,8 +242,6 @@ target_sources(
         common/delegatepaintutil.h
         common/emojicompletiondelegate.cpp
         common/emojicompletiondelegate.h
-        common/flowlayout.cpp
-        common/flowlayout.h
         common/usercompletiondelegate.h
         common/usercompletiondelegate.cpp
         common/userandchannelcompletiondelegate.h
diff --git a/src/widgets/autogenerateui/blockelement/autogenerateinteractionuiviewactionsblock.cpp b/src/widgets/autogenerateui/blockelement/autogenerateinteractionuiviewactionsblock.cpp
index 1e16559e1a..db5af47d4b 100644
--- a/src/widgets/autogenerateui/blockelement/autogenerateinteractionuiviewactionsblock.cpp
+++ b/src/widgets/autogenerateui/blockelement/autogenerateinteractionuiviewactionsblock.cpp
@@ -17,12 +17,12 @@
 #include "autogenerateui/elements/autogenerateinteractionuiviewuserselectelement.h"
 #include "autogenerateui/widgets/actionelementwidget.h"
 
-#include "common/flowlayout.h"
 #include "ruqola_autogenerateui_debug.h"
 #include <QJsonArray>
 #include <QJsonObject>
 #include <QLayout>
 #include <QWidget>
+#include <TextAddonsWidgets/TextAddonsWidgetFlowLayout>
 using namespace Qt::Literals::StringLiterals;
 AutoGenerateInteractionUiViewActionsBlock::AutoGenerateInteractionUiViewActionsBlock(QObject *parent)
     : AutoGenerateInteractionUiViewBlockBase(parent)
@@ -127,7 +127,7 @@ QWidget *AutoGenerateInteractionUiViewActionsBlock::generateWidget(QWidget *pare
 {
     auto widget = new QWidget(parent);
     parent->layout()->addWidget(widget);
-    auto hboxLayout = new FlowLayout;
+    auto hboxLayout = new TextAddonsWidgets::TextAddonsWidgetFlowLayout;
     hboxLayout->setContentsMargins({});
     widget->setLayout(hboxLayout);
     for (const auto &e : std::as_const(mElements)) {
diff --git a/src/widgets/autogenerateui/widgets/multistaticselectwidget.cpp b/src/widgets/autogenerateui/widgets/multistaticselectwidget.cpp
index 5ad24b2e99..c05f6baf24 100644
--- a/src/widgets/autogenerateui/widgets/multistaticselectwidget.cpp
+++ b/src/widgets/autogenerateui/widgets/multistaticselectwidget.cpp
@@ -5,16 +5,16 @@
 */
 
 #include "multistaticselectwidget.h"
-#include "common/flowlayout.h"
 #include "misc/clickablewidget.h"
 #include "multistaticselectlineedit.h"
 #include <QVBoxLayout>
+#include <TextAddonsWidgets/TextAddonsWidgetFlowLayout>
 
 using namespace Qt::Literals::StringLiterals;
 MultiStaticSelectWidget::MultiStaticSelectWidget(QWidget *parent)
     : QWidget{parent}
     , mLineEdit(new MultiStaticSelectLineEdit(this))
-    , mFlowLayout(new FlowLayout)
+    , mFlowLayout(new TextAddonsWidgets::TextAddonsWidgetFlowLayout)
 {
     auto mainLayout = new QVBoxLayout(this);
     mainLayout->setObjectName("mainLayout"_L1);
diff --git a/src/widgets/autogenerateui/widgets/multistaticselectwidget.h b/src/widgets/autogenerateui/widgets/multistaticselectwidget.h
index 434e29c6c6..277d856b6b 100644
--- a/src/widgets/autogenerateui/widgets/multistaticselectwidget.h
+++ b/src/widgets/autogenerateui/widgets/multistaticselectwidget.h
@@ -10,7 +10,10 @@
 #include "multistaticselectlineeditmodel.h"
 #include <QWidget>
 class MultiStaticSelectLineEdit;
-class FlowLayout;
+namespace TextAddonsWidgets
+{
+class TextAddonsWidgetFlowLayout;
+}
 class ClickableWidget;
 class LIBRUQOLAWIDGETS_TESTS_EXPORT MultiStaticSelectWidget : public QWidget
 {
@@ -32,7 +35,7 @@ private:
     LIBRUQOLAWIDGETS_NO_EXPORT void slotRemoveUser(const QString &username);
     LIBRUQOLAWIDGETS_NO_EXPORT void checkMaxSelectedItems();
     MultiStaticSelectLineEdit *const mLineEdit;
-    FlowLayout *const mFlowLayout;
+    TextAddonsWidgets::TextAddonsWidgetFlowLayout *const mFlowLayout;
     QMap<QString, ClickableWidget *> mMap;
     int mMaxSelectItems = -1;
 };
diff --git a/src/widgets/common/flowlayout.cpp b/src/widgets/common/flowlayout.cpp
deleted file mode 100644
index b60a72391a..0000000000
--- a/src/widgets/common/flowlayout.cpp
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
-   SPDX-FileCopyrightText: 2020-2026 Laurent Montel <[email protected]>
-
-   SPDX-License-Identifier: LGPL-2.0-or-later
-*/
-
-#include "flowlayout.h"
-
-#include <QStyle>
-#include <QWidget>
-
-#if HAVE_TEXTADDONSWIDGETS_FLOWLAYOUT
-FlowLayout::FlowLayout(QWidget *parent)
-    : TextAddonsWidgets::TextAddonsWidgetFlowLayout(parent)
-{
-}
-
-FlowLayout::~FlowLayout()
-{
-    clearAndDeleteWidgets();
-}
-#else
-static int smartSpacing(QObject *parent, QStyle::PixelMetric pm)
-{
-    if (!parent) {
-        return -1;
-    } else if (parent->isWidgetType()) {
-        auto pw = static_cast<QWidget *>(parent);
-        return pw->style()->pixelMetric(pm, nullptr, pw);
-    } else {
-        return static_cast<QLayout *>(parent)->spacing();
-    }
-}
-
-FlowLayout::FlowLayout(QWidget *parent)
-    : QLayout(parent)
-{
-}
-
-FlowLayout::~FlowLayout()
-{
-    clear();
-}
-
-int FlowLayout::horizontalSpacing() const
-{
-    if (mHorizontalSpacing >= 0) {
-        return mHorizontalSpacing;
-    } else {
-        return smartSpacing(parent(), QStyle::PM_LayoutHorizontalSpacing);
-    }
-}
-
-void FlowLayout::setHorizontalSpacing(int horizontalSpacing)
-{
-    if (mHorizontalSpacing != horizontalSpacing) {
-        mHorizontalSpacing = horizontalSpacing;
-        invalidate();
-    }
-}
-
-int FlowLayout::verticalSpacing() const
-{
-    if (mVerticalSpacing >= 0) {
-        return mVerticalSpacing;
-    } else {
-        return smartSpacing(parent(), QStyle::PM_LayoutVerticalSpacing);
-    }
-}
-
-void FlowLayout::setVerticalSpacing(int verticalSpacing)
-{
-    if (mVerticalSpacing != verticalSpacing) {
-        mVerticalSpacing = verticalSpacing;
-        invalidate();
-    }
-}
-
-QSize FlowLayout::sizeHint() const
-{
-    return minimumSize();
-}
-
-QSize FlowLayout::minimumSize() const
-{
-    const QMargins margins = contentsMargins();
-    QSize size;
-
-    for (const QLayoutItem *item : mItems) {
-        size = size.expandedTo(item->minimumSize());
-    }
-
-    size += QSize(margins.left() + margins.right(), margins.top() + margins.bottom());
-    return size;
-}
-
-void FlowLayout::addItem(QLayoutItem *item)
-{
-    Q_ASSERT(!mItems.contains(item));
-    mItems.append(item);
-    invalidate();
-}
-
-QLayoutItem *FlowLayout::itemAt(int index) const
-{
-    if (index >= 0 && index < mItems.count()) {
-        return mItems[index];
-    }
-
-    return nullptr;
-}
-
-QLayoutItem *FlowLayout::takeAt(int index)
-{
-    if (index >= 0 && index < mItems.count()) {
-        auto *it = mItems.takeAt(index);
-        invalidate();
-        return it;
-    }
-
-    return nullptr;
-}
-
-int FlowLayout::count() const
-{
-    return mItems.count();
-}
-
-Qt::Orientations FlowLayout::expandingDirections() const
-{
-    return {};
-}
-
-bool FlowLayout::hasHeightForWidth() const
-{
-    return true;
-}
-
-int FlowLayout::heightForWidth(int width) const
-{
-    return doFlow(QRect(0, 0, width, 0), false);
-}
-
-void FlowLayout::setGeometry(const QRect &rect)
-{
-    QLayout::setGeometry(rect);
-    doFlow(rect, true);
-}
-
-void FlowLayout::clear()
-{
-    while (QLayoutItem *item = takeAt(0)) {
-        delete item;
-    }
-}
-
-void FlowLayout::clearAndDeleteWidgets()
-{
-    while (QLayoutItem *item = takeAt(0)) {
-        item->widget()->deleteLater();
-        delete item;
-    }
-}
-
-int FlowLayout::doFlow(QRect rect, bool effective) const
-{
-    const QMargins margins = contentsMargins();
-    const QRect effectiveRect = rect.adjusted(margins.left(), margins.top(), -margins.right(), -margins.bottom());
-    int x = effectiveRect.x();
-    int y = effectiveRect.y();
-    int highest = 0;
-
-    for (QLayoutItem *item : mItems) {
-        const QWidget *widget = item->widget();
-
-        if (!widget->isVisibleTo(parentWidget())) {
-            continue;
-        }
-
-        int hSpacing = horizontalSpacing();
-        int vSpacing = verticalSpacing();
-
-        if (hSpacing == -1) {
-            hSpacing = widget->style()->layoutSpacing(QSizePolicy::Frame, QSizePolicy::Frame, Qt::Horizontal);
-        }
-
-        if (vSpacing == -1) {
-            vSpacing = widget->style()->layoutSpacing(QSizePolicy::Frame, QSizePolicy::Frame, Qt::Vertical);
-        }
-
-        int widgetXPos = x + item->sizeHint().width() + hSpacing;
-
-        if (widgetXPos - hSpacing > effectiveRect.right() && highest > 0) {
-            x = effectiveRect.x();
-            y += highest + vSpacing;
-            widgetXPos = x + item->sizeHint().width() + hSpacing;
-            highest = 0;
-        }
-
-        if (effective) {
-            item->setGeometry(QRect(QPoint(x, y), item->sizeHint()));
-        }
-
-        x = widgetXPos;
-        highest = qMax(highest, item->sizeHint().height());
-    }
-
-    return y + highest - rect.y() + margins.bottom();
-}
-#endif
-#include "moc_flowlayout.cpp"
diff --git a/src/widgets/common/flowlayout.h b/src/widgets/common/flowlayout.h
deleted file mode 100644
index e6fe37ca6a..0000000000
--- a/src/widgets/common/flowlayout.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
-   SPDX-FileCopyrightText: 2020-2026 Laurent Montel <[email protected]>
-
-   SPDX-License-Identifier: LGPL-2.0-or-later
-*/
-#pragma once
-#include "config-ruqola.h"
-#include "libruqolawidgets_export.h"
-#include <QLayout>
-#include <QList>
-// TODO remove when we depend against ktextaddons 2.1.2
-#if HAVE_TEXTADDONSWIDGETS_FLOWLAYOUT
-#include <TextAddonsWidgets/TextAddonsWidgetFlowLayout>
-class LIBRUQOLAWIDGETS_EXPORT FlowLayout : public TextAddonsWidgets::TextAddonsWidgetFlowLayout
-{
-    Q_OBJECT
-
-public:
-    explicit FlowLayout(QWidget *parent = nullptr);
-    ~FlowLayout() override;
-};
-
-#else
-class LIBRUQOLAWIDGETS_EXPORT FlowLayout : public QLayout
-{
-    Q_OBJECT
-
-public:
-    explicit FlowLayout(QWidget *parent = nullptr);
-    ~FlowLayout() override;
-
-    [[nodiscard]] int horizontalSpacing() const;
-    void setHorizontalSpacing(int horizontalSpacing);
-
-    [[nodiscard]] int verticalSpacing() const;
-    void setVerticalSpacing(int verticalSpacing);
-
-    [[nodiscard]] QSize sizeHint() const override;
-    [[nodiscard]] QSize minimumSize() const override;
-
-    void addItem(QLayoutItem *item) override;
-    QLayoutItem *itemAt(int index) const override;
-    QLayoutItem *takeAt(int index) override;
-    [[nodiscard]] int count() const override;
-
-    [[nodiscard]] Qt::Orientations expandingDirections() const override;
-    [[nodiscard]] bool hasHeightForWidth() const override;
-    [[nodiscard]] int heightForWidth(int width) const override;
-
-    void setGeometry(const QRect &rect) override;
-
-    void clearAndDeleteWidgets();
-
-private:
-    LIBRUQOLAWIDGETS_NO_EXPORT void clear();
-    LIBRUQOLAWIDGETS_NO_EXPORT int doFlow(QRect rect, bool effective) const;
-    QList<QLayoutItem *> mItems;
-    int mHorizontalSpacing = -1;
-    int mVerticalSpacing = -1;
-};
-#endif
diff --git a/src/widgets/conferencecalldialog/conferenceinfowidget.cpp b/src/widgets/conferencecalldialog/conferenceinfowidget.cpp
index a08b559e1a..fcb0411101 100644
--- a/src/widgets/conferencecalldialog/conferenceinfowidget.cpp
+++ b/src/widgets/conferencecalldialog/conferenceinfowidget.cpp
@@ -7,7 +7,6 @@
 #include "conferenceinfowidget.h"
 using namespace Qt::Literals::StringLiterals;
 
-#include "common/flowlayout.h"
 #include "connection.h"
 #include "rocketchataccount.h"
 #include "ruqolawidgets_debug.h"
@@ -18,6 +17,7 @@ using namespace Qt::Literals::StringLiterals;
 #include <QIcon>
 #include <QLabel>
 #include <QScreen>
+#include <TextAddonsWidgets/TextAddonsWidgetFlowLayout>
 
 ConferenceInfoWidget::ConferenceInfoWidget(RocketChatAccount *account, QWidget *parent)
     : QWidget{parent}
@@ -52,7 +52,7 @@ void ConferenceInfoWidget::initializeInfo()
         }
         const auto users = videoInfo.users();
         if (!users.isEmpty()) {
-            auto avatarLayout = new FlowLayout;
+            auto avatarLayout = new TextAddonsWidgets::TextAddonsWidgetFlowLayout;
             mFormLayout->addItem(avatarLayout);
             for (const auto &user : users) {
                 auto avatarLabel = new QLabel(this);
diff --git a/src/widgets/dialogs/searchmessagecommandbuttonwidget.cpp b/src/widgets/dialogs/searchmessagecommandbuttonwidget.cpp
index b9a58d9680..93385c4a1f 100644
--- a/src/widgets/dialogs/searchmessagecommandbuttonwidget.cpp
+++ b/src/widgets/dialogs/searchmessagecommandbuttonwidget.cpp
@@ -5,15 +5,15 @@
 */
 
 #include "searchmessagecommandbuttonwidget.h"
-#include "common/flowlayout.h"
 #include "dialogs/searchmessagecommand.h"
 #include <KLocalizedString>
 #include <QPushButton>
+#include <TextAddonsWidgets/TextAddonsWidgetFlowLayout>
 using namespace Qt::Literals::StringLiterals;
 SearchMessageCommandButtonWidget::SearchMessageCommandButtonWidget(QWidget *parent)
     : QWidget{parent}
 {
-    auto flowLayout = new FlowLayout(this);
+    auto flowLayout = new TextAddonsWidgets::TextAddonsWidgetFlowLayout(this);
     flowLayout->setObjectName(u"flowLayout"_s);
     flowLayout->setContentsMargins({});
     flowLayout->setSpacing(0);
diff --git a/src/widgets/forwardmessage/autotests/forwardmessagewidgettest.cpp b/src/widgets/forwardmessage/autotests/forwardmessagewidgettest.cpp
index f719a6cb7c..98922a52aa 100644
--- a/src/widgets/forwardmessage/autotests/forwardmessagewidgettest.cpp
+++ b/src/widgets/forwardmessage/autotests/forwardmessagewidgettest.cpp
@@ -7,11 +7,11 @@
 #include "forwardmessagewidgettest.h"
 using namespace Qt::Literals::StringLiterals;
 
-#include "common/flowlayout.h"
 #include "forwardmessage/forwardmessagewidget.h"
 #include <QLabel>
 #include <QTest>
 #include <QVBoxLayout>
+#include <TextAddonsWidgets/TextAddonsWidgetFlowLayout>
 
 QTEST_MAIN(ForwardMessageWidgetTest)
 ForwardMessageWidgetTest::ForwardMessageWidgetTest(QObject *parent)
@@ -31,7 +31,7 @@ void ForwardMessageWidgetTest::shouldHaveDefaultValues()
     QVERIFY(label);
     QVERIFY(!label->text().isEmpty());
 
-    auto mFlowLayout = w.findChild<FlowLayout *>(u"mFlowLayout"_s);
+    auto mFlowLayout = w.findChild<TextAddonsWidgets::TextAddonsWidgetFlowLayout *>(u"mFlowLayout"_s);
     QVERIFY(mFlowLayout);
 
     auto mForwardMessageAddChannelCompletionLineEdit =
diff --git a/src/widgets/forwardmessage/forwardmessagewidget.cpp b/src/widgets/forwardmessage/forwardmessagewidget.cpp
index c3489a618f..e6bc9de589 100644
--- a/src/widgets/forwardmessage/forwardmessagewidget.cpp
+++ b/src/widgets/forwardmessage/forwardmessagewidget.cpp
@@ -6,17 +6,17 @@
 
 #include "forwardmessagewidget.h"
 
-#include "common/flowlayout.h"
 #include "misc/clickablewidget.h"
 #include <KLocalizedString>
 #include <QLabel>
 #include <QVBoxLayout>
+#include <TextAddonsWidgets/TextAddonsWidgetFlowLayout>
 
 using namespace Qt::Literals::StringLiterals;
 ForwardMessageWidget::ForwardMessageWidget(RocketChatAccount *account, QWidget *parent)
     : QWidget{parent}
     , mForwardMessageAddChannelCompletionLineEdit(new ForwardMessageAddChannelCompletionLineEdit(account, this))
-    , mFlowLayout(new FlowLayout)
+    , mFlowLayout(new TextAddonsWidgets::TextAddonsWidgetFlowLayout)
 {
     auto mainLayout = new QVBoxLayout(this);
     mainLayout->setObjectName(u"mainLayout"_s);
diff --git a/src/widgets/forwardmessage/forwardmessagewidget.h b/src/widgets/forwardmessage/forwardmessagewidget.h
index 3657080abe..4289e552d3 100644
--- a/src/widgets/forwardmessage/forwardmessagewidget.h
+++ b/src/widgets/forwardmessage/forwardmessagewidget.h
@@ -9,7 +9,10 @@
 #include "libruqolawidgets_private_export.h"
 #include <QWidget>
 class RocketChatAccount;
-class FlowLayout;
+namespace TextAddonsWidgets
+{
+class TextAddonsWidgetFlowLayout;
+}
 class ClickableWidget;
 class LIBRUQOLAWIDGETS_TESTS_EXPORT ForwardMessageWidget : public QWidget
 {
@@ -27,6 +30,6 @@ private:
     LIBRUQOLAWIDGETS_NO_EXPORT void slotRemoveRoom(const QString &name);
     LIBRUQOLAWIDGETS_NO_EXPORT void slotForwardToChannel(const JoinedChannelCompletionLineEditBase::JoinedChannelCompletionInfo &channelInfo);
     ForwardMessageAddChannelCompletionLineEdit *const mForwardMessageAddChannelCompletionLineEdit;
-    FlowLayout *const mFlowLayout;
+    TextAddonsWidgets::TextAddonsWidgetFlowLayout *const mFlowLayout;
     QMap<QString, ClickableWidget *> mMap;
 };
diff --git a/src/widgets/misc/adduserswidget.cpp b/src/widgets/misc/adduserswidget.cpp
index 35d5d00244..03c166f02f 100644
--- a/src/widgets/misc/adduserswidget.cpp
+++ b/src/widgets/misc/adduserswidget.cpp
@@ -6,17 +6,17 @@
 
 #include "adduserswidget.h"
 
-#include "common/flowlayout.h"
 #include "misc/avatarcachemanager.h"
 #include "misc/clickablewidget.h"
 #include "utils.h"
 #include <QVBoxLayout>
+#include <TextAddonsWidgets/TextAddonsWidgetFlowLayout>
 
 using namespace Qt::Literals::StringLiterals;
 AddUsersWidget::AddUsersWidget(RocketChatAccount *account, QWidget *parent)
     : QWidget(parent)
     , mSearchUserLineEdit(new AddUsersCompletionLineEdit(account, this))
-    , mFlowLayout(new FlowLayout)
+    , mFlowLayout(new TextAddonsWidgets::TextAddonsWidgetFlowLayout)
     , mAvatarCacheManager(new AvatarCacheManager(Utils::AvatarType::User, this))
 {
     auto mainLayout = new QVBoxLayout(this);
diff --git a/src/widgets/misc/adduserswidget.h b/src/widgets/misc/adduserswidget.h
index 67de03b5f7..b133465b0e 100644
--- a/src/widgets/misc/adduserswidget.h
+++ b/src/widgets/misc/adduserswidget.h
@@ -10,7 +10,10 @@
 #include "libruqolawidgets_private_export.h"
 #include <QMap>
 #include <QWidget>
-class FlowLayout;
+namespace TextAddonsWidgets
+{
+class TextAddonsWidgetFlowLayout;
+}
 class ClickableWidget;
 class RocketChatAccount;
 class AvatarCacheManager;
@@ -39,7 +42,7 @@ private:
     LIBRUQOLAWIDGETS_NO_EXPORT void slotRemoveUser(const QString &username);
     LIBRUQOLAWIDGETS_NO_EXPORT void slotAddNewName(const AddUsersCompletionLineEdit::UserCompletionInfo &info);
     AddUsersCompletionLineEdit *const mSearchUserLineEdit;
-    FlowLayout *const mFlowLayout;
+    TextAddonsWidgets::TextAddonsWidgetFlowLayout *const mFlowLayout;
     QMap<QString, ClickableWidget *> mMap;
     AvatarCacheManager *const mAvatarCacheManager;
 };
diff --git a/src/widgets/misc/autotests/adduserswidgettest.cpp b/src/widgets/misc/autotests/adduserswidgettest.cpp
index 87eaa53777..39f46cce38 100644
--- a/src/widgets/misc/autotests/adduserswidgettest.cpp
+++ b/src/widgets/misc/autotests/adduserswidgettest.cpp
@@ -6,11 +6,11 @@
 
 #include "adduserswidgettest.h"
 
-#include "common/flowlayout.h"
 #include "dialogs/adduserscompletionlineedit.h"
 #include "misc/adduserswidget.h"
 #include <QTest>
 #include <QVBoxLayout>
+#include <TextAddonsWidgets/TextAddonsWidgetFlowLayout>
 QTEST_MAIN(AddUsersWidgetTest)
 using namespace Qt::Literals::StringLiterals;
 AddUsersWidgetTest::AddUsersWidgetTest(QObject *parent)
@@ -30,7 +30,7 @@ void AddUsersWidgetTest::shouldHaveDefaultValues()
     QVERIFY(mSearchUserLineEdit);
     QVERIFY(mSearchUserLineEdit->placeholderText().isEmpty());
 
-    auto mFlowLayout = w.findChild<FlowLayout *>(u"mFlowLayout"_s);
+    auto mFlowLayout = w.findChild<TextAddonsWidgets::TextAddonsWidgetFlowLayout *>(u"mFlowLayout"_s);
     QVERIFY(mFlowLayout);
 
     QVERIFY(w.userIds().isEmpty());
diff --git a/src/widgets/room/autotests/usersinroomflowwidgettest.cpp b/src/widgets/room/autotests/usersinroomflowwidgettest.cpp
index 5d41c2aac8..19c388210e 100644
--- a/src/widgets/room/autotests/usersinroomflowwidgettest.cpp
+++ b/src/widgets/room/autotests/usersinroomflowwidgettest.cpp
@@ -7,9 +7,9 @@
 #include "usersinroomflowwidgettest.h"
 using namespace Qt::Literals::StringLiterals;
 
-#include "common/flowlayout.h"
 #include "room/usersinroomflowwidget.h"
 #include <QTest>
+#include <TextAddonsWidgets/TextAddonsWidgetFlowLayout>
 QTEST_MAIN(UsersInRoomFlowWidgetTest)
 
 UsersInRoomFlowWidgetTest::UsersInRoomFlowWidgetTest(QObject *parent)
@@ -20,7 +20,7 @@ UsersInRoomFlowWidgetTest::UsersInRoomFlowWidgetTest(QObject *parent)
 void UsersInRoomFlowWidgetTest::shouldHaveDefaultValues()
 {
     UsersInRoomFlowWidget w;
-    auto mFlowLayout = w.findChild<FlowLayout *>(u"mFlowLayout"_s);
+    auto mFlowLayout = w.findChild<TextAddonsWidgets::TextAddonsWidgetFlowLayout *>(u"mFlowLayout"_s);
     QVERIFY(mFlowLayout);
     QCOMPARE(mFlowLayout->spacing(), 0);
     QCOMPARE(mFlowLayout->contentsMargins(), QMargins{});
diff --git a/src/widgets/room/pendingattachmentwidget.cpp b/src/widgets/room/pendingattachmentwidget.cpp
index a161c46d7c..93bf538d7d 100644
--- a/src/widgets/room/pendingattachmentwidget.cpp
+++ b/src/widgets/room/pendingattachmentwidget.cpp
@@ -5,7 +5,6 @@
 */
 
 #include "pendingattachmentwidget.h"
-#include "common/flowlayout.h"
 #include "pendingattachmentclickablewidget.h"
 #include <KLocalizedString>
 #include <QFileInfo>
@@ -14,12 +13,13 @@
 #include <QIcon>
 #include <QLabel>
 #include <QToolButton>
+#include <TextAddonsWidgets/TextAddonsWidgetFlowLayout>
 
 using namespace Qt::Literals::StringLiterals;
 
 PendingAttachmentWidget::PendingAttachmentWidget(QWidget *parent)
     : QWidget(parent)
-    , mFlowLayout(new FlowLayout(this))
+    , mFlowLayout(new TextAddonsWidgets::TextAddonsWidgetFlowLayout(this))
 {
     setAutoFillBackground(true);
     mFlowLayout->setSpacing(4);
diff --git a/src/widgets/room/pendingattachmentwidget.h b/src/widgets/room/pendingattachmentwidget.h
index a60a01dc12..0ae0224f77 100644
--- a/src/widgets/room/pendingattachmentwidget.h
+++ b/src/widgets/room/pendingattachmentwidget.h
@@ -10,7 +10,10 @@
 #include <QMap>
 #include <QUrl>
 #include <QWidget>
-class FlowLayout;
+namespace TextAddonsWidgets
+{
+class TextAddonsWidgetFlowLayout;
+}
 class LIBRUQOLAWIDGETS_TESTS_EXPORT PendingAttachmentWidget : public QWidget
 {
     Q_OBJECT
@@ -34,6 +37,6 @@ private:
     LIBRUQOLAWIDGETS_NO_EXPORT void slotRemoveAttachment(const QUrl &url);
     LIBRUQOLAWIDGETS_NO_EXPORT bool verifyExistingFile(const QUrl &fileUrl) const;
     LIBRUQOLAWIDGETS_NO_EXPORT void updateAttachments();
-    FlowLayout *const mFlowLayout;
+    TextAddonsWidgets::TextAddonsWidgetFlowLayout *const mFlowLayout;
     QMap<QUrl, PendingAttachmentClickableWidget *> mMap;
 };
diff --git a/src/widgets/room/usersinroomflowwidget.cpp b/src/widgets/room/usersinroomflowwidget.cpp
index 8e85cf4d34..fd8d7a2c7d 100644
--- a/src/widgets/room/usersinroomflowwidget.cpp
+++ b/src/widgets/room/usersinroomflowwidget.cpp
@@ -6,7 +6,6 @@
 
 #include "usersinroomflowwidget.h"
 
-#include "common/flowlayout.h"
 #include "model/usersforroomfilterproxymodel.h"
 #include "model/usersforroommodel.h"
 #include "rocketchataccount.h"
@@ -16,12 +15,13 @@
 #include "usersinroomlabel.h"
 #include <KLocalizedString>
 #include <QLabel>
+#include <TextAddonsWidgets/TextAddonsWidgetFlowLayout>
 
 using namespace Qt::Literals::StringLiterals;
 #define MAX_NUMBER_USER 70
 UsersInRoomFlowWidget::UsersInRoomFlowWidget(QWidget *parent)
     : QWidget(parent)
-    , mFlowLayout(new FlowLayout(this))
+    , mFlowLayout(new TextAddonsWidgets::TextAddonsWidgetFlowLayout(this))
     , mUsersForRoomFilterProxyModel(new UsersForRoomFilterProxyModel(this))
 {
     mFlowLayout->setObjectName(u"mFlowLayout"_s);
diff --git a/src/widgets/room/usersinroomflowwidget.h b/src/widgets/room/usersinroomflowwidget.h
index c84da59e0c..7c6bac88ed 100644
--- a/src/widgets/room/usersinroomflowwidget.h
+++ b/src/widgets/room/usersinroomflowwidget.h
@@ -10,7 +10,10 @@
 #include <QMap>
 #include <QPointer>
 #include <QWidget>
-class FlowLayout;
+namespace TextAddonsWidgets
+{
+class TextAddonsWidgetFlowLayout;
+}
 class Room;
 class UsersInRoomLabel;
 class UsersForRoomFilterProxyModel;
@@ -33,7 +36,7 @@ private:
     LIBRUQOLAWIDGETS_NO_EXPORT void generateListUsersWidget();
     LIBRUQOLAWIDGETS_NO_EXPORT void updateListUsersWidget(const QModelIndex &topLeft, const QModelIndex &bottomRight);
     LIBRUQOLAWIDGETS_NO_EXPORT void loadExternalDialog();
-    FlowLayout *const mFlowLayout;
+    TextAddonsWidgets::TextAddonsWidgetFlowLayout *const mFlowLayout;
     QPointer<Room> mRoom;
     // userId, UsersInRoomLabel
     QMap<QByteArray, UsersInRoomLabel *> mListUsersWidget;
diff --git a/src/widgets/teams/teamsearchroomforteamwidget.cpp b/src/widgets/teams/teamsearchroomforteamwidget.cpp
index b880aab3a2..246477ee67 100644
--- a/src/widgets/teams/teamsearchroomforteamwidget.cpp
+++ b/src/widgets/teams/teamsearchroomforteamwidget.cpp
@@ -6,15 +6,15 @@
 
 #include "teamsearchroomforteamwidget.h"
 
-#include "common/flowlayout.h"
 #include "misc/clickablewidget.h"
 #include <QVBoxLayout>
+#include <TextAddonsWidgets/TextAddonsWidgetFlowLayout>
 
 using namespace Qt::Literals::StringLiterals;
 TeamSearchRoomForTeamWidget::TeamSearchRoomForTeamWidget(RocketChatAccount *account, QWidget *parent)
     : QWidget(parent)
     , mSearchRoomLineEdit(new AddTeamRoomCompletionLineEdit(account, this))
-    , mFlowLayout(new FlowLayout)
+    , mFlowLayout(new TextAddonsWidgets::TextAddonsWidgetFlowLayout)
 {
     auto mainLayout = new QVBoxLayout(this);
     mainLayout->setObjectName(u"mainLayout"_s);
diff --git a/src/widgets/teams/teamsearchroomforteamwidget.h b/src/widgets/teams/teamsearchroomforteamwidget.h
index 3f16caf19e..015a3ab00c 100644
--- a/src/widgets/teams/teamsearchroomforteamwidget.h
+++ b/src/widgets/teams/teamsearchroomforteamwidget.h
@@ -10,7 +10,10 @@
 #include "libruqolawidgets_private_export.h"
 #include <QMap>
 #include <QWidget>
-class FlowLayout;
+namespace TextAddonsWidgets
+{
+class TextAddonsWidgetFlowLayout;
+}
 class ClickableWidget;
 class RocketChatAccount;
 class LIBRUQOLAWIDGETS_TESTS_EXPORT TeamSearchRoomForTeamWidget : public QWidget
@@ -30,6 +33,6 @@ private:
     LIBRUQOLAWIDGETS_NO_EXPORT void slotRemoveRoom(const QString &name);
     LIBRUQOLAWIDGETS_NO_EXPORT void slotAddNewName(const AddTeamRoomCompletionLineEdit::RoomCompletionInfo &info);
     AddTeamRoomCompletionLineEdit *const mSearchRoomLineEdit;
-    FlowLayout *const mFlowLayout;
+    TextAddonsWidgets::TextAddonsWidgetFlowLayout *const mFlowLayout;
     QMap<QString, ClickableWidget *> mMap;
 };
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.