diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp
index 8de6bec6..cad39bc5 100644
--- a/src/timeline/TimelineModel.cpp
+++ b/src/timeline/TimelineModel.cpp
@@ -196,9 +196,6 @@ TimelineModel::TimelineModel(TimelineViewManager *manager, QString room_id, QObj
if (idx >= 0)
emit dataChanged(index(idx, 0), index(idx, 0));
});
-
- connect(
- ChatPage::instance(), &ChatPage::themeChanged, this, [this]() { userColors.clear(); });
}
QHash<int, QByteArray>
@@ -650,15 +647,6 @@ TimelineModel::addBackwardsEvents(const mtx::responses::Messages &msgs)
prev_batch_token_ = QString::fromStdString(msgs.end);
}
-QColor
-TimelineModel::userColor(QString id, QColor background)
-{
- if (!userColors.contains(id))
- userColors.insert(
- id, QColor(utils::generateContrastingHexColor(id, background.name())));
- return userColors.value(id);
-}
-
QString
TimelineModel::displayName(QString id) const
{
@@ -1446,7 +1434,8 @@ TimelineModel::formatTypingUsers(const std::vector<QString> &users, QColor bg)
auto formatUser = [this, bg](const QString &user_id) -> QString {
auto uncoloredUsername = escapeEmoji(displayName(user_id).toHtmlEscaped());
- QString prefix = QString("<font color=\"%1\">").arg(userColor(user_id, bg).name());
+ QString prefix =
+ QString("<font color=\"%1\">").arg(manager_->userColor(user_id, bg).name());
// color only parts that don't have a font already specified
QString coloredUsername;
diff --git a/src/timeline/TimelineModel.h b/src/timeline/TimelineModel.h
index 642e9bbc..f06de5d9 100644
--- a/src/timeline/TimelineModel.h
+++ b/src/timeline/TimelineModel.h
@@ -165,7 +165,6 @@ public:
bool canFetchMore(const QModelIndex &) const override;
void fetchMore(const QModelIndex &) override;
- Q_INVOKABLE QColor userColor(QString id, QColor background);
Q_INVOKABLE QString displayName(QString id) const;
Q_INVOKABLE QString avatarUrl(QString id) const;
Q_INVOKABLE QString formatDateSeparator(QDate date) const;
@@ -248,7 +247,6 @@ private:
bool paginationInProgress = false;
bool isProcessingPending = false;
- QHash<QString, QColor> userColors;
QString currentId;
std::vector<QString> typingUsers_;
diff --git a/src/timeline/TimelineViewManager.cpp b/src/timeline/TimelineViewManager.cpp
index 7cd1432d..14f903a1 100644
--- a/src/timeline/TimelineViewManager.cpp
+++ b/src/timeline/TimelineViewManager.cpp
@@ -18,6 +18,8 @@ Q_DECLARE_METATYPE(mtx::events::collections::TimelineEvents)
void
TimelineViewManager::updateColorPalette()
{
+ userColors.clear();
+
if (settings->theme() == "light") {
QPalette lightActive(/*windowText*/ QColor("#333"),
/*button*/ QColor("#333"),
@@ -53,6 +55,15 @@ TimelineViewManager::updateColorPalette()
}
}
+QColor
+TimelineViewManager::userColor(QString id, QColor background)
+{
+ if (!userColors.contains(id))
+ userColors.insert(
+ id, QColor(utils::generateContrastingHexColor(id, background.name())));
+ return userColors.value(id);
+}
+
TimelineViewManager::TimelineViewManager(QSharedPointer<UserSettings> userSettings, QWidget *parent)
: imgProvider(new MxcImageProvider())
, colorImgProvider(new ColorImageProvider())
diff --git a/src/timeline/TimelineViewManager.h b/src/timeline/TimelineViewManager.h
index 625999c9..338101c7 100644
--- a/src/timeline/TimelineViewManager.h
+++ b/src/timeline/TimelineViewManager.h
@@ -40,6 +40,7 @@ public:
Q_INVOKABLE TimelineModel *activeTimeline() const { return timeline_; }
Q_INVOKABLE bool isInitialSync() const { return isInitialSync_; }
Q_INVOKABLE void openImageOverlay(QString mxcUrl, QString eventId) const;
+ Q_INVOKABLE QColor userColor(QString id, QColor background);
signals:
void clearRoomMessageCount(QString roomid);
@@ -118,4 +119,5 @@ private:
QString replyingEvent_;
QSharedPointer<UserSettings> settings;
+ QHash<QString, QColor> userColors;
};
|