diff --git a/src/libneochat/chatbarcache.cpp b/src/libneochat/chatbarcache.cpp index 2770ab8bf..a7f1bf613 100644 --- a/src/libneochat/chatbarcache.cpp +++ b/src/libneochat/chatbarcache.cpp @@ -150,9 +150,9 @@ Quotient::RoomMember ChatBarCache::relationAuthor() const if (m_relationId.isEmpty()) { return room->member(QString()); } - const auto evtIt = room->findInTimeline(m_relationId); - if (evtIt != room->messageEvents().rend()) { - return room->member((*evtIt)->senderId()); + const auto [event, _] = room->getEvent(m_relationId); + if (event != nullptr) { + return room->member(event->senderId()); } qWarning() << "Failed to find relation" << m_relationId << "in timeline?"; return room->member(QString()); @@ -178,8 +178,8 @@ QString ChatBarCache::relationMessage() const return {}; } - if (auto event = room->findInTimeline(m_relationId); event != room->historyEdge()) { - return EventHandler::markdownBody(&**event); + if (auto [event, _] = room->getEvent(m_relationId); event != nullptr) { + return EventHandler::markdownBody(event); } return {}; } @@ -285,11 +285,6 @@ void ChatBarCache::postMessage() return; } - const auto replyIt = room->findInTimeline(replyId()); - if (replyIt == room->historyEdge()) { - isReply = false; - } - auto content = std::make_unique(sendText, u"text/html"_s); room->post(text(), *std::get>(result), std::move(content), relatesTo); diff --git a/src/roominfo/RoomSearchPage.qml b/src/roominfo/RoomSearchPage.qml index 785cef129..23d0d85ea 100644 --- a/src/roominfo/RoomSearchPage.qml +++ b/src/roominfo/RoomSearchPage.qml @@ -3,6 +3,8 @@ import QtQuick +import org.kde.kirigami as Kirigami + import org.kde.neochat.libneochat import org.kde.neochat.timeline @@ -45,4 +47,15 @@ SearchPage { noResultPlaceholderMessage: i18n("No messages found") listVerticalLayoutDirection: ListView.BottomToTop + + Connections { + target: root.room.mainCache + + function onRelationIdChanged(oldEventId: string, newEventId: string): void { + // If we start replying/editing an event, we need to close the search dialog so the user can type. + if (newEventId.length > 0) { + root.Kirigami.PageStack.closeDialog(); + } + } + } } diff --git a/src/timeline/MessageDelegate.qml b/src/timeline/MessageDelegate.qml index 6e7d5e157..67a34b83d 100644 --- a/src/timeline/MessageDelegate.qml +++ b/src/timeline/MessageDelegate.qml @@ -227,6 +227,7 @@ MessageDelegateBase { quickActionComponent: QuickActions { room: root.room eventId: root.eventId + author: root.author } QtObject { diff --git a/src/timeline/QuickActions.qml b/src/timeline/QuickActions.qml index 755217d68..d48c85cea 100644 --- a/src/timeline/QuickActions.qml +++ b/src/timeline/QuickActions.qml @@ -22,6 +22,15 @@ RowLayout { */ required property string eventId + /** + * @brief The message author. + * + * A Quotient::RoomMember object. + * + * @sa Quotient::RoomMember + */ + required property var author + property real availableWidth: 0.0 property bool reacting: false