diff --git a/src/TextInputWidget.cpp b/src/TextInputWidget.cpp
index 1ae26c2d6bd6575f992306c9ab0dff4c6fc3d85b..f723c01ac92774977deb9aef7896a9d89a051a13 100644
--- a/src/TextInputWidget.cpp
+++ b/src/TextInputWidget.cpp
@@ -306,8 +306,9 @@ FilteredTextEdit::insertFromMimeData(const QMimeData *source)
         const auto audio   = formats.filter("audio/", Qt::CaseInsensitive);
         const auto video   = formats.filter("video/", Qt::CaseInsensitive);
 
-        if (!image.empty()) {
-                showPreview(source, image);
+        if (source->hasImage()) {
+                QImage img = qvariant_cast<QImage>(source->imageData());
+                previewDialog_.setPreview(img, image.front());
         } else if (!audio.empty()) {
                 showPreview(source, audio);
         } else if (!video.empty()) {
diff --git a/src/TextInputWidget.h b/src/TextInputWidget.h
index 4a72636462fa779a475ac0999ef0b46cfd506c04..71f794d13e5be56343ffbcc88b1b709c7b89bbe5 100644
--- a/src/TextInputWidget.h
+++ b/src/TextInputWidget.h
@@ -34,10 +34,6 @@
 #include "popups/ReplyPopup.h"
 #include "popups/SuggestionsPopup.h"
 
-namespace dialogs {
-class PreviewUploadOverlay;
-}
-
 struct SearchResult;
 
 class FlatButton;
diff --git a/src/dialogs/PreviewUploadOverlay.cpp b/src/dialogs/PreviewUploadOverlay.cpp
index c404799ec290a4d5ab0141a5c1198da4d901ba2c..31d0121406645a992c9a96f24333927f751d31c6 100644
--- a/src/dialogs/PreviewUploadOverlay.cpp
+++ b/src/dialogs/PreviewUploadOverlay.cpp
@@ -134,6 +134,28 @@ PreviewUploadOverlay::setLabels(const QString &type, const QString &mime, uint64
         }
 }
 
+void
+PreviewUploadOverlay::setPreview(const QImage &src, const QString &mime)
+{
+        auto const &split = mime.split('/');
+        auto const &type  = split[1];
+
+        QBuffer buffer(&data_);
+        buffer.open(QIODevice::WriteOnly);
+        if (src.save(&buffer, type.toStdString().c_str()))
+                titleLabel_.setText(QString{tr(DEFAULT)}.arg("image"));
+        else
+                titleLabel_.setText(QString{tr(ERR_MSG)}.arg(type));
+
+        mediaType_ = split[0];
+        filePath_  = "clipboard." + type;
+        image_.convertFromImage(src);
+        isImage_ = true;
+
+        titleLabel_.setText(QString{tr(DEFAULT)}.arg("image"));
+        init();
+}
+
 void
 PreviewUploadOverlay::setPreview(const QByteArray data, const QString &mime)
 {
diff --git a/src/dialogs/PreviewUploadOverlay.h b/src/dialogs/PreviewUploadOverlay.h
index 8099d9c2176174e29f0e136193ad6de1f4f25bcb..11cd49bcfe1f952d2f1393c9cf7967a042eaf5a4 100644
--- a/src/dialogs/PreviewUploadOverlay.h
+++ b/src/dialogs/PreviewUploadOverlay.h
@@ -17,6 +17,7 @@
 
 #pragma once
 
+#include <QImage>
 #include <QLabel>
 #include <QLineEdit>
 #include <QPixmap>
@@ -33,6 +34,7 @@ class PreviewUploadOverlay : public QWidget
 public:
         PreviewUploadOverlay(QWidget *parent = nullptr);
 
+        void setPreview(const QImage &src, const QString &mime);
         void setPreview(const QByteArray data, const QString &mime);
         void setPreview(const QString &path);