diff --git a/src/dialogs/PreviewUploadOverlay.cpp b/src/dialogs/PreviewUploadOverlay.cpp
index e850c03b..2e95bd91 100644
--- a/src/dialogs/PreviewUploadOverlay.cpp
+++ b/src/dialogs/PreviewUploadOverlay.cpp
@@ -158,6 +158,8 @@ PreviewUploadOverlay::setPreview(const QImage &src, const QString &mime)
void
PreviewUploadOverlay::setPreview(const QByteArray data, const QString &mime)
{
+ nhlog::ui()->info("Pasting {} bytes of data, mimetype {}", data.size(), mime.toStdString());
+
auto const &split = mime.split('/');
auto const &type = split[1];
@@ -166,6 +168,11 @@ PreviewUploadOverlay::setPreview(const QByteArray data, const QString &mime)
filePath_ = "clipboard." + type;
isImage_ = false;
+ if (mime == "image/svg+xml") {
+ isImage_ = true;
+ image_.loadFromData(data_, mediaType_.toStdString().c_str());
+ }
+
setLabels(type, mime, data_.size());
init();
}
diff --git a/src/main.cpp b/src/main.cpp
index cf7e29e6..f6373d2a 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -176,12 +176,6 @@ main(int argc, char *argv[])
100,
userdata);
- if (app.isSecondary()) {
- // open uri in main instance
- app.sendMessage(matrixUri.toUtf8());
- return 0;
- }
-
QCommandLineParser parser;
parser.addHelpOption();
parser.addVersionOption();
@@ -202,6 +196,15 @@ main(int argc, char *argv[])
parser.process(app);
+ // This check needs to happen _after_ process(), so that we actually print help for --help when
+ // Nheko is already running.
+ if (app.isSecondary()) {
+ nhlog::ui()->info("Sending Matrix URL to main application: {}", matrixUri.toStdString());
+ // open uri in main instance
+ app.sendMessage(matrixUri.toUtf8());
+ return 0;
+ }
+
app.setWindowIcon(QIcon::fromTheme("nheko", QIcon{":/logos/nheko.png"}));
http::init();
diff --git a/src/timeline/InputBar.cpp b/src/timeline/InputBar.cpp
index f0c38c84..f518248b 100644
--- a/src/timeline/InputBar.cpp
+++ b/src/timeline/InputBar.cpp
@@ -45,10 +45,8 @@ InputBar::paste(bool fromMouse)
{
const QMimeData *md = nullptr;
- if (fromMouse) {
- if (QGuiApplication::clipboard()->supportsSelection()) {
- md = QGuiApplication::clipboard()->mimeData(QClipboard::Selection);
- }
+ if (fromMouse && QGuiApplication::clipboard()->supportsSelection()) {
+ md = QGuiApplication::clipboard()->mimeData(QClipboard::Selection);
} else {
md = QGuiApplication::clipboard()->mimeData(QClipboard::Clipboard);
}
@@ -69,8 +67,12 @@ InputBar::insertMimeData(const QMimeData *md)
const auto audio = formats.filter("audio/", Qt::CaseInsensitive);
const auto video = formats.filter("video/", Qt::CaseInsensitive);
- if (!image.empty() && md->hasImage()) {
- showPreview(*md, "", image);
+ if (md->hasImage()) {
+ if (formats.contains("image/svg+xml", Qt::CaseInsensitive)) {
+ showPreview(*md, "", QStringList("image/svg+xml"));
+ } else {
+ showPreview(*md, "", image);
+ }
} else if (!audio.empty()) {
showPreview(*md, "", audio);
} else if (!video.empty()) {
@@ -653,9 +655,16 @@ InputBar::showPreview(const QMimeData &source, QString path, const QStringList &
new dialogs::PreviewUploadOverlay(ChatPage::instance());
previewDialog_->setAttribute(Qt::WA_DeleteOnClose);
- if (source.hasImage())
- previewDialog_->setPreview(qvariant_cast<QImage>(source.imageData()), formats.front());
- else if (!path.isEmpty())
+ // Force SVG to _not_ be handled as an image, but as raw data
+ if (source.hasImage() && (!formats.size() || formats.front() != "image/svg+xml")) {
+ if (formats.size() && formats.front().startsWith("image/")) {
+ // known format, keep as-is
+ previewDialog_->setPreview(qvariant_cast<QImage>(source.imageData()), formats.front());
+ } else {
+ // unknown image format, default to image/png
+ previewDialog_->setPreview(qvariant_cast<QImage>(source.imageData()), "image/png");
+ }
+ } else if (!path.isEmpty())
previewDialog_->setPreview(path);
else if (!formats.isEmpty()) {
auto mime = formats.first();
@@ -675,6 +684,12 @@ InputBar::showPreview(const QMimeData &source, QString path, const QStringList &
&dialogs::PreviewUploadOverlay::confirmUpload,
this,
[this](const QByteArray data, const QString &mime, const QString &fn) {
+ if (!data.size()) {
+ nhlog::ui()->warn("Attempted to upload zero-byte file?! Mimetype {}, filename {}",
+ mime.toStdString(),
+ fn.toStdString());
+ return;
+ }
setUploading(true);
setText("");
|