diff --git a/src/actionshandler.h b/src/actionshandler.h index f3a6786bc..e1c2c813b 100644 --- a/src/actionshandler.h +++ b/src/actionshandler.h @@ -35,20 +35,18 @@ class ActionsHandler : public QObject { Q_OBJECT QML_ELEMENT - - /** - * @brief The room that messages will be sent to. - */ - Q_PROPERTY(NeoChatRoom *room READ room WRITE setRoom NOTIFY roomChanged) + QML_UNCREATABLE("") public: explicit ActionsHandler(QObject *parent = nullptr); + /** + * @brief The room that messages will be sent to. + */ [[nodiscard]] NeoChatRoom *room() const; void setRoom(NeoChatRoom *room); Q_SIGNALS: - void roomChanged(); void showEffect(const QString &effect); public Q_SLOTS: diff --git a/src/qml/ChatBar.qml b/src/qml/ChatBar.qml index ee9235786..5b170ceec 100644 --- a/src/qml/ChatBar.qml +++ b/src/qml/ChatBar.qml @@ -478,7 +478,7 @@ QQC2.Control { } function postMessage() { - actionsHandler.handleMessageEvent(_private.chatBarCache); + RoomManager.actionsHandler.handleMessageEvent(_private.chatBarCache); repeatTimer.stop() root.currentRoom.markAllMessagesAsRead(); textField.clear(); diff --git a/src/qml/MessageEditComponent.qml b/src/qml/MessageEditComponent.qml index 7f4b2860c..ed08c5567 100644 --- a/src/qml/MessageEditComponent.qml +++ b/src/qml/MessageEditComponent.qml @@ -137,7 +137,7 @@ QQC2.TextArea { } function postEdit() { - actionsHandler.handleMessageEvent(_private.chatBarCache); + RoomManager.actionsHandler.handleMessageEvent(_private.chatBarCache); root.clear(); _private.chatBarCache.editId = ""; } diff --git a/src/qml/RoomPage.qml b/src/qml/RoomPage.qml index 7b7077650..188c01678 100644 --- a/src/qml/RoomPage.qml +++ b/src/qml/RoomPage.qml @@ -139,11 +139,6 @@ Kirigami.Page { } } - ActionsHandler { - id: actionsHandler - room: root.currentRoom - } - Shortcut { sequence: StandardKey.Cancel onActivated: { diff --git a/src/qml/TimelineView.qml b/src/qml/TimelineView.qml index 34bbe4ff7..96646caac 100644 --- a/src/qml/TimelineView.qml +++ b/src/qml/TimelineView.qml @@ -292,7 +292,7 @@ QQC2.ScrollView { Connections { enabled: Config.showFancyEffects - target: actionsHandler + target: RoomManager.actionsHandler function onShowEffect(fancyEffect) { fancyEffectsContainer.processFancyEffectsReason(fancyEffect) diff --git a/src/roommanager.cpp b/src/roommanager.cpp index 8aa18ebaf..e5bf5b6e1 100644 --- a/src/roommanager.cpp +++ b/src/roommanager.cpp @@ -4,6 +4,7 @@ #include "roommanager.h" +#include "actionshandler.h" #include "chatbarcache.h" #include "controller.h" #include "enums/delegatetype.h" @@ -29,6 +30,7 @@ RoomManager::RoomManager(QObject *parent) , m_currentRoom(nullptr) , m_lastCurrentRoom(nullptr) , m_config(KSharedConfig::openStateConfig()) + , m_actionsHandler(new ActionsHandler(this)) , m_messageEventModel(new MessageEventModel(this)) , m_messageFilterModel(new MessageFilterModel(this, m_messageEventModel)) , m_mediaMessageFilterModel(new MediaMessageFilterModel(this, m_messageFilterModel)) @@ -36,6 +38,7 @@ RoomManager::RoomManager(QObject *parent) m_lastRoomConfig = m_config->group(QStringLiteral("LastOpenRoom")); connect(this, &RoomManager::currentRoomChanged, this, [this]() { + m_actionsHandler->setRoom(m_currentRoom); m_messageEventModel->setRoom(m_currentRoom); }); } @@ -55,6 +58,11 @@ NeoChatRoom *RoomManager::currentRoom() const return m_currentRoom; } +ActionsHandler *RoomManager::actionsHandler() const +{ + return m_actionsHandler; +} + MessageEventModel *RoomManager::messageEventModel() const { return m_messageEventModel; diff --git a/src/roommanager.h b/src/roommanager.h index 21fb614dd..afa75df1a 100644 --- a/src/roommanager.h +++ b/src/roommanager.h @@ -10,6 +10,7 @@ #include #include +#include "actionshandler.h" #include "chatdocumenthandler.h" #include "enums/delegatetype.h" #include "models/mediamessagefiltermodel.h" @@ -44,6 +45,17 @@ class RoomManager : public QObject, public UriResolverBase */ Q_PROPERTY(NeoChatRoom *currentRoom READ currentRoom NOTIFY currentRoomChanged) + /** + * @brief The ActionsHandler that should be used when sending messages. + * + * The room object the object uses will be updated by this class so there is no + * need to do this manually or replace the object when a room changes. + * + * @note Available here so that the room page and drawer both have access to the + * same model. + */ + Q_PROPERTY(ActionsHandler *actionsHandler READ actionsHandler CONSTANT) + /** * @brief The MessageEventModel that should be used for room message visualisation. * @@ -98,6 +110,8 @@ public: NeoChatRoom *currentRoom() const; + ActionsHandler *actionsHandler() const; + MessageEventModel *messageEventModel() const; MessageFilterModel *messageFilterModel() const; MediaMessageFilterModel *mediaMessageFilterModel() const; @@ -375,6 +389,8 @@ private: KConfigGroup m_lastRoomConfig; QPointer m_chatDocumentHandler; + ActionsHandler *m_actionsHandler; + MessageEventModel *m_messageEventModel; MessageFilterModel *m_messageFilterModel; MediaMessageFilterModel *m_mediaMessageFilterModel;