[network/neochat] src: Actually listen to application palette changes

Joshua Goins <[email protected]> Tue, 4 Aug 2026 16:30:32 +0000 (UTC)
Newsgroups gmane.comp.kde.cvs
Message-ID <[email protected]>
Git commit 51e161879b73be0e7bc3811e64b038e69016da80 by Joshua Goins.
Committed on 04/08/2026 at 16:10.
Pushed by redstrate into branch 'master'.

Actually listen to application palette changes

It turns out when I initially ported this it doesn't actually work,
oops! The event filter method is a much more reliable way for the models
to pick up this change.

M  +5    -2    src/libneochat/models/locationsmodel.cpp
M  +1    -1    src/libneochat/models/locationsmodel.h
M  +4    -2    src/libneochat/models/userlistmodel.cpp
M  +1    -1    src/libneochat/models/userlistmodel.h
M  +5    -2    src/timeline/models/messagemodel.cpp
M  +1    -1    src/timeline/models/messagemodel.h

https://invent.kde.org/network/neochat/-/commit/51e161879b73be0e7bc3811e64b038e69016da80

diff --git a/src/libneochat/models/locationsmodel.cpp b/src/libneochat/models/locationsmodel.cpp
index ed3129481..021aa3382 100644
--- a/src/libneochat/models/locationsmodel.cpp
+++ b/src/libneochat/models/locationsmodel.cpp
@@ -10,6 +10,8 @@ using namespace Quotient;
 LocationsModel::LocationsModel(QObject *parent)
     : QAbstractListModel(parent)
 {
+    qGuiApp->installEventFilter(this);
+
     connect(this, &LocationsModel::roomChanged, this, [this]() {
         for (const auto &event : m_room->messageEvents()) {
             if (const auto &roomMessageEvent = event.viewAs<RoomMessageEvent>()) {
@@ -125,14 +127,15 @@ QRectF LocationsModel::boundingBox() const
     return bbox;
 }
 
-bool LocationsModel::event(QEvent *event)
+bool LocationsModel::eventFilter(QObject *obj, QEvent *event)
 {
+    Q_UNUSED(obj)
     if (event->type() == QEvent::ApplicationPaletteChange) {
         if (rowCount() > 0) {
             Q_EMIT dataChanged(index(0, 0), index(rowCount() - 1, 0), {AuthorRole});
         }
     }
-    return QObject::event(event);
+    return false;
 }
 
 #include "moc_locationsmodel.cpp"
diff --git a/src/libneochat/models/locationsmodel.h b/src/libneochat/models/locationsmodel.h
index 4b4992851..95a6a0eff 100644
--- a/src/libneochat/models/locationsmodel.h
+++ b/src/libneochat/models/locationsmodel.h
@@ -47,7 +47,7 @@ Q_SIGNALS:
     void boundingBoxChanged();
 
 protected:
-    bool event(QEvent *event) override;
+    bool eventFilter(QObject *obj, QEvent *event) override;
 
 private:
     QPointer<NeoChatRoom> m_room;
diff --git a/src/libneochat/models/userlistmodel.cpp b/src/libneochat/models/userlistmodel.cpp
index f1b967e0c..a8fb61b93 100644
--- a/src/libneochat/models/userlistmodel.cpp
+++ b/src/libneochat/models/userlistmodel.cpp
@@ -16,6 +16,7 @@ using namespace Quotient;
 UserListModel::UserListModel(QObject *parent)
     : QAbstractListModel(parent)
 {
+    qGuiApp->installEventFilter(this);
 }
 
 void UserListModel::setRoom(NeoChatRoom *room)
@@ -140,13 +141,14 @@ int UserListModel::rowCount(const QModelIndex &parent) const
     return m_members.count();
 }
 
-bool UserListModel::event(QEvent *event)
+bool UserListModel::eventFilter(QObject *obj, QEvent *event)
 {
+    Q_UNUSED(obj)
     if (event->type() == QEvent::ApplicationPaletteChange && !m_members.isEmpty()) {
         // Quotient::RoomMember::color needs to be recalculated for the new palette
         Q_EMIT dataChanged(index(0, 0), index(m_members.size() - 1, 0), {ColorRole});
     }
-    return QObject::event(event);
+    return false;
 }
 
 void UserListModel::memberJoined(const Quotient::RoomMember &member)
diff --git a/src/libneochat/models/userlistmodel.h b/src/libneochat/models/userlistmodel.h
index fb0a1b279..d0043e1fb 100644
--- a/src/libneochat/models/userlistmodel.h
+++ b/src/libneochat/models/userlistmodel.h
@@ -87,7 +87,7 @@ Q_SIGNALS:
     void usersRefreshed();
 
 protected:
-    bool event(QEvent *event) override;
+    bool eventFilter(QObject *obj, QEvent *event) override;
 
 private Q_SLOTS:
     void memberJoined(const Quotient::RoomMember &member);
diff --git a/src/timeline/models/messagemodel.cpp b/src/timeline/models/messagemodel.cpp
index 0c766ad2a..b9b30ed05 100644
--- a/src/timeline/models/messagemodel.cpp
+++ b/src/timeline/models/messagemodel.cpp
@@ -33,6 +33,8 @@ std::function<bool(const Quotient::RoomEvent *)> MessageModel::m_hiddenFilter =
 MessageModel::MessageModel(QObject *parent)
     : QAbstractListModel(parent)
 {
+    qGuiApp->installEventFilter(this);
+
     connect(this, &MessageModel::newEventAdded, this, &MessageModel::createEventObjects, Qt::QueuedConnection);
 
     connect(this, &MessageModel::modelAboutToReset, this, [this]() {
@@ -779,14 +781,15 @@ void MessageModel::clearEventObjects()
     m_readMarkerModels.clear();
 }
 
-bool MessageModel::event(QEvent *event)
+bool MessageModel::eventFilter(QObject *obj, QEvent *event)
 {
+    Q_UNUSED(obj);
     if (event->type() == QEvent::ApplicationPaletteChange) {
         if (rowCount() > 0) {
             Q_EMIT dataChanged(index(0, 0), index(rowCount() - 1, 0), {AuthorRole, ReadMarkersRole});
         }
     }
-    return QObject::event(event);
+    return false;
 }
 
 void MessageModel::setHiddenFilter(std::function<bool(const Quotient::RoomEvent *)> hiddenFilter)
diff --git a/src/timeline/models/messagemodel.h b/src/timeline/models/messagemodel.h
index dbd871dec..6f2c23342 100644
--- a/src/timeline/models/messagemodel.h
+++ b/src/timeline/models/messagemodel.h
@@ -254,7 +254,7 @@ protected:
     void clearModel();
     void clearEventObjects();
 
-    bool event(QEvent *event) override;
+    bool eventFilter(QObject *obj, QEvent *event) override;
 
 private:
     QMap<QString, QSharedPointer<ReadMarkerModel>> m_readMarkerModels;