diff --git a/CMakeLists.txt b/CMakeLists.txt
index 80ea628f..9f824048 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -496,7 +496,6 @@ qt5_wrap_cpp(MOC_HEADERS
src/dialogs/LeaveRoom.h
src/dialogs/Logout.h
src/dialogs/PreviewUploadOverlay.h
- src/dialogs/RawMessage.h
src/dialogs/ReCaptcha.h
# Emoji
diff --git a/resources/qml/RawMessageDialog.qml b/resources/qml/RawMessageDialog.qml
new file mode 100644
index 00000000..231e2f6d
--- /dev/null
+++ b/resources/qml/RawMessageDialog.qml
@@ -0,0 +1,51 @@
+// SPDX-FileCopyrightText: 2021 Nheko Contributors
+//
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+import QtQuick 2.15
+import QtQuick.Controls 2.15
+import im.nheko 1.0
+
+ApplicationWindow {
+ id: rawMessageRoot
+
+ property alias rawMessage: rawMessageView.text
+
+ x: MainWindow.x + (MainWindow.width / 2) - (width / 2)
+ y: MainWindow.y + (MainWindow.height / 2) - (height / 2)
+ height: 420
+ width: 420
+ palette: Nheko.colors
+ color: Nheko.colors.window
+ flags: Qt.Tool | Qt.WindowStaysOnTopHint
+
+ Shortcut {
+ sequence: StandardKey.Cancel
+ onActivated: rawMessageRoot.close()
+ }
+
+ ScrollView {
+ anchors.margins: Nheko.paddingMedium
+ anchors.fill: parent
+ palette: Nheko.colors
+ padding: Nheko.paddingMedium
+
+ TextArea {
+ id: rawMessageView
+
+ font: Nheko.monospaceFont()
+ color: Nheko.colors.text
+ readOnly: true
+
+ background: Rectangle {
+ color: Nheko.colors.base
+ }
+ }
+
+ }
+
+ footer: DialogButtonBox {
+ standardButtons: DialogButtonBox.Ok
+ onAccepted: rawMessageRoot.close()
+ }
+}
diff --git a/resources/qml/Root.qml b/resources/qml/Root.qml
index 7d91beae..70cfbda5 100644
--- a/resources/qml/Root.qml
+++ b/resources/qml/Root.qml
@@ -104,6 +104,14 @@ Page {
}
+ Component {
+ id: rawMessageDialog
+
+ RawMessageDialog {
+ }
+
+ }
+
Shortcut {
sequence: "Ctrl+K"
onActivated: {
diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml
index d19f2cc9..e4036eb7 100644
--- a/resources/qml/TimelineView.qml
+++ b/resources/qml/TimelineView.qml
@@ -258,6 +258,13 @@ Item {
dialog.show();
}
+ function onShowRawMessageDialog(rawMessage) {
+ var dialog = rawMessageDialog.createObject(timelineRoot, {
+ "rawMessage": rawMessage
+ });
+ dialog.show();
+ }
+
target: room
}
diff --git a/resources/res.qrc b/resources/res.qrc
index 2b655b9e..c911653c 100644
--- a/resources/res.qrc
+++ b/resources/res.qrc
@@ -177,6 +177,7 @@
qml/RoomMembers.qml
qml/InviteDialog.qml
qml/ReadReceipts.qml
+ qml/RawMessageDialog.qml
media/ring.ogg
diff --git a/src/dialogs/RawMessage.h b/src/dialogs/RawMessage.h
deleted file mode 100644
index e95f675c..00000000
--- a/src/dialogs/RawMessage.h
+++ /dev/null
@@ -1,60 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Nheko Contributors
-//
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-#pragma once
-
-#include
-#include
-#include
-#include
-#include
-
-#include "nlohmann/json.hpp"
-
-#include "Logging.h"
-#include "MainWindow.h"
-#include "ui/FlatButton.h"
-
-namespace dialogs {
-
-class RawMessage : public QWidget
-{
- Q_OBJECT
-public:
- RawMessage(QString msg, QWidget *parent = nullptr)
- : QWidget{parent}
- {
- QFont monospaceFont = QFontDatabase::systemFont(QFontDatabase::FixedFont);
-
- auto layout = new QVBoxLayout{this};
- auto viewer = new QTextBrowser{this};
- viewer->setFont(monospaceFont);
- viewer->setText(msg);
-
- layout->setSpacing(0);
- layout->setMargin(0);
- layout->addWidget(viewer);
-
- setAutoFillBackground(true);
- setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint);
- setAttribute(Qt::WA_DeleteOnClose, true);
-
- QSize winsize;
- QPoint center;
-
- auto window = MainWindow::instance();
- if (window) {
- winsize = window->frameGeometry().size();
- center = window->frameGeometry().center();
-
- move(center.x() - (width() * 0.5), center.y() - (height() * 0.5));
- } else {
- nhlog::ui()->warn("unable to retrieve MainWindow's size");
- }
-
- raise();
- show();
- }
-};
-} // namespace dialogs
diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp
index 6ae0c4d1..a8adf05b 100644
--- a/src/timeline/TimelineModel.cpp
+++ b/src/timeline/TimelineModel.cpp
@@ -31,7 +31,6 @@
#include "ReadReceiptsModel.h"
#include "TimelineViewManager.h"
#include "Utils.h"
-#include "dialogs/RawMessage.h"
Q_DECLARE_METATYPE(QModelIndex)
@@ -1026,14 +1025,13 @@ TimelineModel::formatDateSeparator(QDate date) const
}
void
-TimelineModel::viewRawMessage(QString id) const
+TimelineModel::viewRawMessage(QString id)
{
auto e = events.get(id.toStdString(), "", false);
if (!e)
return;
std::string ev = mtx::accessors::serialize_event(*e).dump(4);
- auto dialog = new dialogs::RawMessage(QString::fromStdString(ev));
- Q_UNUSED(dialog);
+ emit showRawMessageDialog(QString::fromStdString(ev));
}
void
@@ -1047,15 +1045,14 @@ TimelineModel::forwardMessage(QString eventId, QString roomId)
}
void
-TimelineModel::viewDecryptedRawMessage(QString id) const
+TimelineModel::viewDecryptedRawMessage(QString id)
{
auto e = events.get(id.toStdString(), "");
if (!e)
return;
std::string ev = mtx::accessors::serialize_event(*e).dump(4);
- auto dialog = new dialogs::RawMessage(QString::fromStdString(ev));
- Q_UNUSED(dialog);
+ emit showRawMessageDialog(QString::fromStdString(ev));
}
void
diff --git a/src/timeline/TimelineModel.h b/src/timeline/TimelineModel.h
index 0d5f7109..f62c5360 100644
--- a/src/timeline/TimelineModel.h
+++ b/src/timeline/TimelineModel.h
@@ -236,9 +236,9 @@ public:
Q_INVOKABLE QString formatGuestAccessEvent(QString id);
Q_INVOKABLE QString formatPowerLevelEvent(QString id);
- Q_INVOKABLE void viewRawMessage(QString id) const;
+ Q_INVOKABLE void viewRawMessage(QString id);
Q_INVOKABLE void forwardMessage(QString eventId, QString roomId);
- Q_INVOKABLE void viewDecryptedRawMessage(QString id) const;
+ Q_INVOKABLE void viewDecryptedRawMessage(QString id);
Q_INVOKABLE void openUserProfile(QString userid);
Q_INVOKABLE void editAction(QString id);
Q_INVOKABLE void replyAction(QString id);
@@ -350,6 +350,7 @@ signals:
void replyChanged(QString reply);
void editChanged(QString reply);
void openReadReceiptsDialog(ReadReceiptsProxy *rr);
+ void showRawMessageDialog(QString rawMessage);
void paginationInProgressChanged(const bool);
void newCallEvent(const mtx::events::collections::TimelineEvents &event);
void scrollToIndex(int index);
diff --git a/src/ui/NhekoGlobalObject.h b/src/ui/NhekoGlobalObject.h
index 14135fd1..cfe982c5 100644
--- a/src/ui/NhekoGlobalObject.h
+++ b/src/ui/NhekoGlobalObject.h
@@ -4,6 +4,7 @@
#pragma once
+#include
#include
#include
@@ -38,6 +39,10 @@ public:
int paddingLarge() const { return 20; }
UserProfile *currentUser() const;
+ Q_INVOKABLE QFont monospaceFont() const
+ {
+ return QFontDatabase::systemFont(QFontDatabase::FixedFont);
+ }
Q_INVOKABLE void openLink(QString link) const;
Q_INVOKABLE void setStatusMessage(QString msg) const;
Q_INVOKABLE void showUserSettingsPage() const;