Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions src/utils/clipboardutils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

#include "utils.h"
#include "pathutils.h"
#include "fileutils.h"

using namespace vnotex;

Expand Down Expand Up @@ -186,6 +187,7 @@ void ClipboardUtils::setImageToClipboard(QClipboard *p_clipboard,
#endif
}


void ClipboardUtils::setImageLoop(QClipboard *p_clipboard,
const QImage &p_image,
QClipboard::Mode p_mode)
Expand Down Expand Up @@ -220,3 +222,16 @@ std::unique_ptr<QMimeData> ClipboardUtils::linkMimeData(const QString &p_link)
data->setText(text);
return data;
}

void ClipboardUtils::setLocalFileToClipboard(QClipboard *p_clipboard,
const QString &p_filePath,
QClipboard::Mode p_mode)
{
// Check if the file exists
if (!FileUtils::existsCaseInsensitive(p_filePath)) {
qWarning() << "ClipboardUtils::setLocalFileToClipboard: file does not exist:" << p_filePath;
return;
}

setMimeDataToClipboard(p_clipboard, linkMimeData(p_filePath).release(), p_mode);
}
5 changes: 5 additions & 0 deletions src/utils/clipboardutils.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@ namespace vnotex
const QImage &p_image,
QClipboard::Mode p_mode = QClipboard::Clipboard);

// Set a local file to clipboard.
static void setLocalFileToClipboard(QClipboard *p_clipboard,
const QString &p_filePath,
QClipboard::Mode p_mode = QClipboard::Clipboard);

private:
static bool mimeDataEquals(const QMimeData *p_a, const QMimeData *p_b);

Expand Down
6 changes: 6 additions & 0 deletions src/widgets/editors/markdowneditor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1677,6 +1677,12 @@ bool MarkdownEditor::prependImageMenu(QMenu *p_menu, QAction *p_before, int p_cu
auto clipboard = QApplication::clipboard();
clipboard->clear();

// Copy local GIF to clipboard to ensure no frame loss
if (imgPath.endsWith(QStringLiteral(".gif"), Qt::CaseInsensitive) && FileUtils::existsCaseInsensitive(imgPath)) {
ClipboardUtils::setLocalFileToClipboard(clipboard, imgPath, QClipboard::Clipboard);
return ;
}

auto img = FileUtils::imageFromFile(imgPath);
if (!img.isNull()) {
ClipboardUtils::setImageToClipboard(clipboard, img);
Expand Down
Loading