diff --git a/imports/NeoChat/Component/Timeline/MessageDelegate.qml b/imports/NeoChat/Component/Timeline/MessageDelegate.qml index 94ce1e5d8..625e38f77 100644 --- a/imports/NeoChat/Component/Timeline/MessageDelegate.qml +++ b/imports/NeoChat/Component/Timeline/MessageDelegate.qml @@ -25,12 +25,12 @@ TimelineContainer { TapHandler { acceptedButtons: Qt.RightButton - onTapped: openMessageContext(model, parent.selectedText) + onTapped: openMessageContext(model, parent.selectedText, Controller.plainText(parent.textDocument)) } TapHandler { acceptedButtons: Qt.LeftButton - onLongPressed: openMessageContext(model, parent.selectedText) + onLongPressed: openMessageContext(model, parent.selectedText, Controller.plainText(parent.textDocument)) } } } diff --git a/imports/NeoChat/Menu/Timeline/MessageDelegateContextMenu.qml b/imports/NeoChat/Menu/Timeline/MessageDelegateContextMenu.qml index c5356bcc2..78e88ee29 100644 --- a/imports/NeoChat/Menu/Timeline/MessageDelegateContextMenu.qml +++ b/imports/NeoChat/Menu/Timeline/MessageDelegateContextMenu.qml @@ -20,6 +20,7 @@ Loader { property string formattedBody: "" required property string source property string selectedText: "" + required property string plainMessage property list nestedActions @@ -45,7 +46,7 @@ Loader { Kirigami.Action { text: i18n("Copy") icon.name: "edit-copy" - onTriggered: Clipboard.saveText(loadRoot.selectedText === "" ? loadRoot.message : loadRoot.selectedText) + onTriggered: Clipboard.saveText(loadRoot.selectedText === "" ? loadRoot.plainMessage : loadRoot.selectedText) }, Kirigami.Action { text: i18n("View Source") @@ -111,7 +112,7 @@ Loader { Instantiator { model: WebShortcutModel { id: webshortcutmodel - selectedText: loadRoot.selectedText ? loadRoot.selectedText : loadRoot.message + selectedText: loadRoot.selectedText ? loadRoot.selectedText : loadRoot.plainMessage onOpenUrl: RoomManager.visitNonMatrix(url) } delegate: QQC2.MenuItem { diff --git a/imports/NeoChat/Page/RoomPage.qml b/imports/NeoChat/Page/RoomPage.qml index 50d7381b8..1c5347847 100644 --- a/imports/NeoChat/Page/RoomPage.qml +++ b/imports/NeoChat/Page/RoomPage.qml @@ -598,12 +598,13 @@ Kirigami.ScrollablePage { file: file, mimeType: event.mimeType, progressInfo: event.progressInfo, + plainMessage: event.message, }); contextMenu.open(); } /// Open context menu for normal message - function openMessageContext(event, selectedText) { + function openMessageContext(event, selectedText, plainMessage) { const contextMenu = messageDelegateContextMenu.createObject(page, { selectedText: selectedText, author: event.author, @@ -611,7 +612,8 @@ Kirigami.ScrollablePage { eventId: event.eventId, formattedBody: event.formattedBody, source: event.source, - eventType: event.eventType + eventType: event.eventType, + plainMessage: plainMessage, }); contextMenu.open(); } diff --git a/src/controller.cpp b/src/controller.cpp index 3c004139d..f4e26fa54 100644 --- a/src/controller.cpp +++ b/src/controller.cpp @@ -24,10 +24,12 @@ #include #include #include +#include #include #include #include #include +#include #include #include @@ -700,3 +702,8 @@ bool Controller::hasWindowSystem() const return false; #endif } + +QString Controller::plainText(QQuickTextDocument *document) const +{ + return document->textDocument()->toPlainText(); +} \ No newline at end of file diff --git a/src/controller.h b/src/controller.h index eef1342fd..3a51f22ab 100644 --- a/src/controller.h +++ b/src/controller.h @@ -21,6 +21,7 @@ class NeoChatRoom; class NeoChatUser; class TrayIcon; class QQuickWindow; +class QQuickTextDocument; namespace QKeychain { @@ -94,6 +95,7 @@ public: Q_INVOKABLE void setBlur(QQuickItem *item, bool blur); Q_INVOKABLE void raiseWindow(QWindow *window); + Q_INVOKABLE QString plainText(QQuickTextDocument *document) const; private: explicit Controller(QObject *parent = nullptr);