From 2cbeb6e2090435f7f211ced0c19064a55207db71 Mon Sep 17 00:00:00 2001 From: Cameron Porter Date: Sat, 1 Feb 2025 23:36:04 -0600 Subject: [PATCH 1/3] Disable QT keywords to avoid clashes with other libraries. --- src/CMakeLists.txt | 1 + src/common/SignalVectorModel.hpp | 4 ++-- src/common/network/NetworkPrivate.cpp | 2 +- src/common/network/NetworkPrivate.hpp | 2 +- src/common/network/NetworkTask.hpp | 4 ++-- src/providers/links/LinkInfo.hpp | 2 +- src/singletons/StreamerMode.hpp | 2 +- src/singletons/Toasts.cpp | 4 ++-- src/widgets/BaseWindow.hpp | 2 +- src/widgets/dialogs/ColorPickerDialog.cpp | 4 ++-- src/widgets/dialogs/ColorPickerDialog.hpp | 4 ++-- src/widgets/dialogs/EditHotkeyDialog.hpp | 2 +- src/widgets/dialogs/switcher/QuickSwitcherPopup.hpp | 2 +- src/widgets/helper/Button.cpp | 6 +++--- src/widgets/helper/Button.hpp | 2 +- src/widgets/helper/NotebookButton.cpp | 2 +- src/widgets/helper/NotebookButton.hpp | 2 +- src/widgets/helper/ResizingTextEdit.hpp | 2 +- src/widgets/helper/SettingsDialogTab.cpp | 2 +- src/widgets/helper/SettingsDialogTab.hpp | 2 +- src/widgets/helper/SignalLabel.cpp | 8 ++++---- src/widgets/helper/SignalLabel.hpp | 2 +- src/widgets/helper/color/AlphaSlider.cpp | 2 +- src/widgets/helper/color/AlphaSlider.hpp | 4 ++-- src/widgets/helper/color/ColorButton.hpp | 2 +- src/widgets/helper/color/ColorInput.cpp | 2 +- src/widgets/helper/color/ColorInput.hpp | 4 ++-- src/widgets/helper/color/HueSlider.cpp | 2 +- src/widgets/helper/color/HueSlider.hpp | 4 ++-- src/widgets/helper/color/SBCanvas.cpp | 2 +- src/widgets/helper/color/SBCanvas.hpp | 4 ++-- src/widgets/listview/GenericListView.cpp | 2 +- src/widgets/listview/GenericListView.hpp | 2 +- src/widgets/splits/Split.hpp | 2 +- src/widgets/splits/SplitHeader.hpp | 2 +- src/widgets/splits/SplitInput.hpp | 2 +- 36 files changed, 50 insertions(+), 49 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e6385e2d161..bcc5311dd36 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -3,6 +3,7 @@ set(VERSION_PROJECT "${LIBRARY_PROJECT}-version") set(EXECUTABLE_PROJECT "${PROJECT_NAME}") add_compile_definitions(QT_DISABLE_DEPRECATED_BEFORE=0x050F00) add_compile_definitions(QT_WARN_DEPRECATED_UP_TO=0x050F00) +add_compile_definitions(QT_NO_KEYWORDS) # registers the native messageing host option(CHATTERINO_DEBUG_NATIVE_MESSAGES "Debug native messages" OFF) diff --git a/src/common/SignalVectorModel.hpp b/src/common/SignalVectorModel.hpp index f7983288b16..f34a5612604 100644 --- a/src/common/SignalVectorModel.hpp +++ b/src/common/SignalVectorModel.hpp @@ -182,7 +182,7 @@ class SignalVectorModel : public QAbstractTableModel, QVector roles = QVector(); roles.append(role); - emit dataChanged(index, index, roles); + dataChanged(index, index, roles); } return true; @@ -218,7 +218,7 @@ class SignalVectorModel : public QAbstractTableModel, this->headerData_[section][role] = value; - emit this->headerDataChanged(Qt::Horizontal, section, section); + this->headerDataChanged(Qt::Horizontal, section, section); return true; } diff --git a/src/common/network/NetworkPrivate.cpp b/src/common/network/NetworkPrivate.cpp index 425a1f5f235..9261512909b 100644 --- a/src/common/network/NetworkPrivate.cpp +++ b/src/common/network/NetworkPrivate.cpp @@ -54,7 +54,7 @@ void loadUncached(std::shared_ptr &&data) QObject::connect(&requester, &NetworkRequester::requestUrl, worker, &NetworkTask::run); - emit requester.requestUrl(); + requester.requestUrl(); } void loadCached(std::shared_ptr &&data) diff --git a/src/common/network/NetworkPrivate.hpp b/src/common/network/NetworkPrivate.hpp index 434d9f66dd9..f39efe699e7 100644 --- a/src/common/network/NetworkPrivate.hpp +++ b/src/common/network/NetworkPrivate.hpp @@ -21,7 +21,7 @@ class NetworkRequester : public QObject { Q_OBJECT -signals: +Q_SIGNALS: void requestUrl(); }; diff --git a/src/common/network/NetworkTask.hpp b/src/common/network/NetworkTask.hpp index d88d0a11388..c458eddbb68 100644 --- a/src/common/network/NetworkTask.hpp +++ b/src/common/network/NetworkTask.hpp @@ -29,7 +29,7 @@ class NetworkTask : public QObject NetworkTask &operator=(NetworkTask &&) = delete; // NOLINTNEXTLINE(readability-redundant-access-specifiers) -public slots: +public Q_SLOTS: void run(); private: @@ -43,7 +43,7 @@ public slots: QTimer *timer_{}; // parent: this // NOLINTNEXTLINE(readability-redundant-access-specifiers) -private slots: +private Q_SLOTS: void timeout(); void finished(); }; diff --git a/src/providers/links/LinkInfo.hpp b/src/providers/links/LinkInfo.hpp index 1d1c24b4490..15b726bb50c 100644 --- a/src/providers/links/LinkInfo.hpp +++ b/src/providers/links/LinkInfo.hpp @@ -116,7 +116,7 @@ class LinkInfo : public QObject /// @see #hasThumbnail(), #thumbnail() void setThumbnail(ImagePtr thumbnail); -signals: +Q_SIGNALS: /// @brief Emitted when this link's state changes /// /// @param state The new state diff --git a/src/singletons/StreamerMode.hpp b/src/singletons/StreamerMode.hpp index 58ce43be6fa..457d67217b0 100644 --- a/src/singletons/StreamerMode.hpp +++ b/src/singletons/StreamerMode.hpp @@ -22,7 +22,7 @@ class IStreamerMode : public QObject virtual void start() = 0; -signals: +Q_SIGNALS: void changed(bool enabled); }; diff --git a/src/singletons/Toasts.cpp b/src/singletons/Toasts.cpp index a15e186af0e..86f7b9d1851 100644 --- a/src/singletons/Toasts.cpp +++ b/src/singletons/Toasts.cpp @@ -57,7 +57,7 @@ class AvatarDownloader : public QObject QFile file_; QNetworkReply *reply_{}; -signals: +Q_SIGNALS: void downloadComplete(); }; @@ -314,7 +314,7 @@ AvatarDownloader::AvatarDownloader(const QString &avatarURL, { this->file_.close(); } - emit downloadComplete(); + downloadComplete(); this->deleteLater(); }); } diff --git a/src/widgets/BaseWindow.hpp b/src/widgets/BaseWindow.hpp index 1f0455dce6c..77e5c723cb0 100644 --- a/src/widgets/BaseWindow.hpp +++ b/src/widgets/BaseWindow.hpp @@ -89,7 +89,7 @@ class BaseWindow : public BaseWidget static bool supportsCustomWindowFrame(); -signals: +Q_SIGNALS: void topMostChanged(bool topMost); protected: diff --git a/src/widgets/dialogs/ColorPickerDialog.cpp b/src/widgets/dialogs/ColorPickerDialog.cpp index a6a57956133..3e803fd6495 100644 --- a/src/widgets/dialogs/ColorPickerDialog.cpp +++ b/src/widgets/dialogs/ColorPickerDialog.cpp @@ -136,7 +136,7 @@ ColorPickerDialog::ColorPickerDialog(QColor color, QWidget *parent) new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); QObject::connect(buttonBox, &QDialogButtonBox::accepted, this, [this] { - emit this->colorConfirmed(this->color()); + this->colorConfirmed(this->color()); this->close(); }); QObject::connect(buttonBox, &QDialogButtonBox::rejected, this, @@ -156,7 +156,7 @@ void ColorPickerDialog::setColor(const QColor &color) return; } this->color_ = color; - emit this->colorChanged(color); + this->colorChanged(color); } } // namespace chatterino diff --git a/src/widgets/dialogs/ColorPickerDialog.hpp b/src/widgets/dialogs/ColorPickerDialog.hpp index d9c896e943a..fc418e5e364 100644 --- a/src/widgets/dialogs/ColorPickerDialog.hpp +++ b/src/widgets/dialogs/ColorPickerDialog.hpp @@ -13,11 +13,11 @@ class ColorPickerDialog : public BasePopup QColor color() const; -signals: +Q_SIGNALS: void colorChanged(QColor color); void colorConfirmed(QColor color); -public slots: +public Q_SLOTS: void setColor(const QColor &color); private: diff --git a/src/widgets/dialogs/EditHotkeyDialog.hpp b/src/widgets/dialogs/EditHotkeyDialog.hpp index 3f8bed15894..90102df5732 100644 --- a/src/widgets/dialogs/EditHotkeyDialog.hpp +++ b/src/widgets/dialogs/EditHotkeyDialog.hpp @@ -25,7 +25,7 @@ class EditHotkeyDialog final : public QDialog std::shared_ptr data(); -protected slots: +protected Q_SLOTS: /** * @brief validates the hotkey * diff --git a/src/widgets/dialogs/switcher/QuickSwitcherPopup.hpp b/src/widgets/dialogs/switcher/QuickSwitcherPopup.hpp index 4f6fe37e6f9..5773f0684a7 100644 --- a/src/widgets/dialogs/switcher/QuickSwitcherPopup.hpp +++ b/src/widgets/dialogs/switcher/QuickSwitcherPopup.hpp @@ -26,7 +26,7 @@ class QuickSwitcherPopup : public BasePopup protected: void themeChangedEvent() override; -public slots: +public Q_SLOTS: void updateSuggestions(const QString &text); private: diff --git a/src/widgets/helper/Button.cpp b/src/widgets/helper/Button.cpp index d1f2b6dcccd..5c658cb3336 100644 --- a/src/widgets/helper/Button.cpp +++ b/src/widgets/helper/Button.cpp @@ -290,7 +290,7 @@ void Button::mousePressEvent(QMouseEvent *event) this->mouseDown_ = true; - emit this->leftMousePress(); + this->leftMousePress(); if (this->menu_ && !this->menuVisible_) { @@ -317,13 +317,13 @@ void Button::mouseReleaseEvent(QMouseEvent *event) if (isInside) { - emit leftClicked(); + leftClicked(); } } if (isInside) { - emit clicked(event->button()); + clicked(event->button()); } } diff --git a/src/widgets/helper/Button.hpp b/src/widgets/helper/Button.hpp index da3ec4c72df..b66c8a1099a 100644 --- a/src/widgets/helper/Button.hpp +++ b/src/widgets/helper/Button.hpp @@ -51,7 +51,7 @@ class Button : public BaseWidget void setMenu(std::unique_ptr menu); -signals: +Q_SIGNALS: void leftClicked(); void clicked(Qt::MouseButton button); void leftMousePress(); diff --git a/src/widgets/helper/NotebookButton.cpp b/src/widgets/helper/NotebookButton.cpp index 0b661262749..355575e60d8 100644 --- a/src/widgets/helper/NotebookButton.cpp +++ b/src/widgets/helper/NotebookButton.cpp @@ -147,7 +147,7 @@ void NotebookButton::mouseReleaseEvent(QMouseEvent *event) update(); - emit leftClicked(); + leftClicked(); } Button::mouseReleaseEvent(event); diff --git a/src/widgets/helper/NotebookButton.hpp b/src/widgets/helper/NotebookButton.hpp index 95010f30bde..3e10d0eeadf 100644 --- a/src/widgets/helper/NotebookButton.hpp +++ b/src/widgets/helper/NotebookButton.hpp @@ -31,7 +31,7 @@ class NotebookButton : public Button void hideEvent(QHideEvent *) override; void showEvent(QShowEvent *) override; -signals: +Q_SIGNALS: void leftClicked(); private: diff --git a/src/widgets/helper/ResizingTextEdit.hpp b/src/widgets/helper/ResizingTextEdit.hpp index 6842a312116..a967b6e083b 100644 --- a/src/widgets/helper/ResizingTextEdit.hpp +++ b/src/widgets/helper/ResizingTextEdit.hpp @@ -67,7 +67,7 @@ class ResizingTextEdit : public QTextEdit bool eventFilter(QObject *obj, QEvent *event) override; -private slots: +private Q_SLOTS: void insertCompletion(const QString &completion); }; diff --git a/src/widgets/helper/SettingsDialogTab.cpp b/src/widgets/helper/SettingsDialogTab.cpp index 03920196829..de962cec161 100644 --- a/src/widgets/helper/SettingsDialogTab.cpp +++ b/src/widgets/helper/SettingsDialogTab.cpp @@ -36,7 +36,7 @@ void SettingsDialogTab::setSelected(bool _selected) // height: px; this->selected_ = _selected; - emit selectedChanged(selected_); + selectedChanged(selected_); } SettingsPage *SettingsDialogTab::page() diff --git a/src/widgets/helper/SettingsDialogTab.hpp b/src/widgets/helper/SettingsDialogTab.hpp index 0c60688b2aa..e47f1767714 100644 --- a/src/widgets/helper/SettingsDialogTab.hpp +++ b/src/widgets/helper/SettingsDialogTab.hpp @@ -37,7 +37,7 @@ class SettingsDialogTab : public BaseWidget const QString &name() const; -signals: +Q_SIGNALS: void selectedChanged(bool); private: diff --git a/src/widgets/helper/SignalLabel.cpp b/src/widgets/helper/SignalLabel.cpp index 4fa24ab15aa..c75964d186c 100644 --- a/src/widgets/helper/SignalLabel.cpp +++ b/src/widgets/helper/SignalLabel.cpp @@ -9,14 +9,14 @@ SignalLabel::SignalLabel(QWidget *parent, Qt::WindowFlags f) void SignalLabel::mouseDoubleClickEvent(QMouseEvent *ev) { - emit this->mouseDoubleClick(ev); + this->mouseDoubleClick(ev); } void SignalLabel::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { - emit leftMouseDown(); + leftMouseDown(); } event->ignore(); @@ -26,7 +26,7 @@ void SignalLabel::mouseReleaseEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { - emit leftMouseUp(); + leftMouseUp(); } event->ignore(); @@ -34,7 +34,7 @@ void SignalLabel::mouseReleaseEvent(QMouseEvent *event) void SignalLabel::mouseMoveEvent(QMouseEvent *event) { - emit this->mouseMove(event); + this->mouseMove(event); event->ignore(); } diff --git a/src/widgets/helper/SignalLabel.hpp b/src/widgets/helper/SignalLabel.hpp index d5ec3a4b4d1..f5580cceb87 100644 --- a/src/widgets/helper/SignalLabel.hpp +++ b/src/widgets/helper/SignalLabel.hpp @@ -15,7 +15,7 @@ class SignalLabel : public QLabel explicit SignalLabel(QWidget *parent = nullptr, Qt::WindowFlags f = {}); ~SignalLabel() override = default; -signals: +Q_SIGNALS: void mouseDoubleClick(QMouseEvent *ev); void leftMouseDown(); diff --git a/src/widgets/helper/color/AlphaSlider.cpp b/src/widgets/helper/color/AlphaSlider.cpp index 75d159e77bc..c098f244edd 100644 --- a/src/widgets/helper/color/AlphaSlider.cpp +++ b/src/widgets/helper/color/AlphaSlider.cpp @@ -156,7 +156,7 @@ void AlphaSlider::setAlpha(int alpha) this->alpha_ = alpha; this->color_.setAlpha(alpha); - emit this->colorChanged(this->color_); + this->colorChanged(this->color_); this->update(); } diff --git a/src/widgets/helper/color/AlphaSlider.hpp b/src/widgets/helper/color/AlphaSlider.hpp index 6a78990d5ff..978cb5d9b78 100644 --- a/src/widgets/helper/color/AlphaSlider.hpp +++ b/src/widgets/helper/color/AlphaSlider.hpp @@ -15,10 +15,10 @@ class AlphaSlider : public QWidget int alpha() const; -signals: +Q_SIGNALS: void colorChanged(QColor color) const; -public slots: +public Q_SLOTS: void setColor(QColor color); protected: diff --git a/src/widgets/helper/color/ColorButton.hpp b/src/widgets/helper/color/ColorButton.hpp index 33f55c98eba..17ebcde6431 100644 --- a/src/widgets/helper/color/ColorButton.hpp +++ b/src/widgets/helper/color/ColorButton.hpp @@ -16,7 +16,7 @@ class ColorButton : public QAbstractButton QColor color() const; // NOLINTNEXTLINE(readability-redundant-access-specifiers) -public slots: +public Q_SLOTS: void setColor(const QColor &color); protected: diff --git a/src/widgets/helper/color/ColorInput.cpp b/src/widgets/helper/color/ColorInput.cpp index 63220644a12..17f802bf187 100644 --- a/src/widgets/helper/color/ColorInput.cpp +++ b/src/widgets/helper/color/ColorInput.cpp @@ -162,7 +162,7 @@ void ColorInput::emitUpdate() { this->updateComponents(); // our components triggered this update, emit the new color - emit this->colorChanged(this->currentColor_); + this->colorChanged(this->currentColor_); } } // namespace chatterino diff --git a/src/widgets/helper/color/ColorInput.hpp b/src/widgets/helper/color/ColorInput.hpp index a654403ef5e..f5f0e4c928d 100644 --- a/src/widgets/helper/color/ColorInput.hpp +++ b/src/widgets/helper/color/ColorInput.hpp @@ -17,10 +17,10 @@ class ColorInput : public QWidget QColor color() const; -signals: +Q_SIGNALS: void colorChanged(QColor color); -public slots: +public Q_SLOTS: void setColor(QColor color); private: diff --git a/src/widgets/helper/color/HueSlider.cpp b/src/widgets/helper/color/HueSlider.cpp index 75a91bb4d15..6c929695e61 100644 --- a/src/widgets/helper/color/HueSlider.cpp +++ b/src/widgets/helper/color/HueSlider.cpp @@ -158,7 +158,7 @@ void HueSlider::setHue(int hue) this->color_.getHsv(&h, &s, &v, &a); this->color_.setHsv(this->hue_, s, v, a); - emit this->colorChanged(this->color_); + this->colorChanged(this->color_); this->update(); } diff --git a/src/widgets/helper/color/HueSlider.hpp b/src/widgets/helper/color/HueSlider.hpp index 90c12f34fe0..c153b97dcf8 100644 --- a/src/widgets/helper/color/HueSlider.hpp +++ b/src/widgets/helper/color/HueSlider.hpp @@ -15,10 +15,10 @@ class HueSlider : public QWidget int hue() const; -signals: +Q_SIGNALS: void colorChanged(QColor color) const; -public slots: +public Q_SLOTS: void setColor(QColor color); protected: diff --git a/src/widgets/helper/color/SBCanvas.cpp b/src/widgets/helper/color/SBCanvas.cpp index 78dbef05f42..5815e3bc1c7 100644 --- a/src/widgets/helper/color/SBCanvas.cpp +++ b/src/widgets/helper/color/SBCanvas.cpp @@ -186,7 +186,7 @@ void SBCanvas::emitUpdatedColor() { this->color_.setHsv(this->hue_, this->saturation_, this->brightness_, this->color_.alpha()); - emit this->colorChanged(this->color_); + this->colorChanged(this->color_); } } // namespace chatterino diff --git a/src/widgets/helper/color/SBCanvas.hpp b/src/widgets/helper/color/SBCanvas.hpp index 6a64d82bf32..76811ca4080 100644 --- a/src/widgets/helper/color/SBCanvas.hpp +++ b/src/widgets/helper/color/SBCanvas.hpp @@ -17,10 +17,10 @@ class SBCanvas : public QWidget int saturation() const; int brightness() const; -signals: +Q_SIGNALS: void colorChanged(QColor color) const; -public slots: +public Q_SLOTS: void setColor(QColor color); protected: diff --git a/src/widgets/listview/GenericListView.cpp b/src/widgets/listview/GenericListView.cpp index 57d2522754f..6c7a0047e28 100644 --- a/src/widgets/listview/GenericListView.cpp +++ b/src/widgets/listview/GenericListView.cpp @@ -213,7 +213,7 @@ void GenericListView::focusPreviousCompletion() void GenericListView::requestClose() { - emit this->closeRequested(); + this->closeRequested(); } } // namespace chatterino diff --git a/src/widgets/listview/GenericListView.hpp b/src/widgets/listview/GenericListView.hpp index 0301fb285dc..7c9f3a908ce 100644 --- a/src/widgets/listview/GenericListView.hpp +++ b/src/widgets/listview/GenericListView.hpp @@ -26,7 +26,7 @@ class GenericListView : public QListView void refreshTheme(const Theme &theme); -signals: +Q_SIGNALS: void closeRequested(); private: diff --git a/src/widgets/splits/Split.hpp b/src/widgets/splits/Split.hpp index 6d604bdf8d5..0b4aa413c0f 100644 --- a/src/widgets/splits/Split.hpp +++ b/src/widgets/splits/Split.hpp @@ -177,7 +177,7 @@ class Split : public BaseWidget pajlada::Signals::SignalHolder signalHolder_; std::vector bSignals_; -public slots: +public Q_SLOTS: void addSibling(); void deleteFromContainer(); void changeChannel(); diff --git a/src/widgets/splits/SplitHeader.hpp b/src/widgets/splits/SplitHeader.hpp index efae94849ab..31284ac1639 100644 --- a/src/widgets/splits/SplitHeader.hpp +++ b/src/widgets/splits/SplitHeader.hpp @@ -102,7 +102,7 @@ class SplitHeader final : public BaseWidget pajlada::Signals::SignalHolder channelConnections_; std::vector bSignals_; -public slots: +public Q_SLOTS: void reloadChannelEmotes(); void reloadSubscriberEmotes(); void reconnect(); diff --git a/src/widgets/splits/SplitInput.hpp b/src/widgets/splits/SplitInput.hpp index fe822285fed..bf5b504868e 100644 --- a/src/widgets/splits/SplitInput.hpp +++ b/src/widgets/splits/SplitInput.hpp @@ -168,7 +168,7 @@ class SplitInput : public BaseWidget // set the height of the split input to 0 if we're supposed to be hidden instead bool hidden{false}; -private slots: +private Q_SLOTS: void editTextChanged(); friend class Split; From 1afe151db315060e03306bf2644785387d0f16f8 Mon Sep 17 00:00:00 2001 From: Rasmus Karlsson Date: Sun, 2 Feb 2025 10:37:17 +0100 Subject: [PATCH 2/3] nit: add `this->` prefix to method call --- src/common/SignalVectorModel.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/SignalVectorModel.hpp b/src/common/SignalVectorModel.hpp index f34a5612604..6bd25f150e6 100644 --- a/src/common/SignalVectorModel.hpp +++ b/src/common/SignalVectorModel.hpp @@ -182,7 +182,7 @@ class SignalVectorModel : public QAbstractTableModel, QVector roles = QVector(); roles.append(role); - dataChanged(index, index, roles); + this->dataChanged(index, index, roles); } return true; From 783ee3cc959653bd972e47f160d72ee027c1bb73 Mon Sep 17 00:00:00 2001 From: Rasmus Karlsson Date: Sun, 2 Feb 2025 10:38:23 +0100 Subject: [PATCH 3/3] chore: add changelog entry --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8498b55a69c..45e5044151e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ - Bugfix: Fixed suspicious user treatment update messages not being searchable. (#5865) - Dev: Highlight checks now use non-capturing groups for the boundaries. (#5784) - Dev: Updated Conan dependencies. (#5776) +- Dev: Disable QT keywords (i.e. `emit`, `slots`, and `signals`). (#5882) - Dev: Replaced usage of `parseTime` with `serverReceivedTime` for clearchat messages. (#5824, #5855) - Dev: Support Boost 1.87. (#5832) - Dev: Words from `TextElement`s are now combined where possible. (#5847)