mirror of
https://gitee.com/vnotex/vnote.git
synced 2025-07-05 13:59:52 +08:00
bug-fix: retry to set clipboard after failure on Windows
On Windows, set data to clipboard may fail due to operating system's design. We will repeatedly retry untin succeed.
This commit is contained in:
parent
d3ff787153
commit
3e7fa998ee
@ -98,7 +98,8 @@ SOURCES += main.cpp\
|
|||||||
dialog/veditsnippetdialog.cpp \
|
dialog/veditsnippetdialog.cpp \
|
||||||
utils/vimnavigationforwidget.cpp \
|
utils/vimnavigationforwidget.cpp \
|
||||||
vtoolbox.cpp \
|
vtoolbox.cpp \
|
||||||
vinsertselector.cpp
|
vinsertselector.cpp \
|
||||||
|
utils/vclipboardutils.cpp
|
||||||
|
|
||||||
HEADERS += vmainwindow.h \
|
HEADERS += vmainwindow.h \
|
||||||
vdirectorytree.h \
|
vdirectorytree.h \
|
||||||
@ -183,7 +184,8 @@ HEADERS += vmainwindow.h \
|
|||||||
dialog/veditsnippetdialog.h \
|
dialog/veditsnippetdialog.h \
|
||||||
utils/vimnavigationforwidget.h \
|
utils/vimnavigationforwidget.h \
|
||||||
vtoolbox.h \
|
vtoolbox.h \
|
||||||
vinsertselector.h
|
vinsertselector.h \
|
||||||
|
utils/vclipboardutils.h
|
||||||
|
|
||||||
RESOURCES += \
|
RESOURCES += \
|
||||||
vnote.qrc \
|
vnote.qrc \
|
||||||
|
35
src/utils/vclipboardutils.cpp
Normal file
35
src/utils/vclipboardutils.cpp
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
#include "vclipboardutils.h"
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
|
#include "vutils.h"
|
||||||
|
|
||||||
|
void VClipboardUtils::setImageToClipboard(QClipboard *p_clipboard,
|
||||||
|
const QImage &p_image,
|
||||||
|
QClipboard::Mode p_mode)
|
||||||
|
{
|
||||||
|
#if defined(Q_OS_WIN)
|
||||||
|
// On Windows, setImage() may fail. We will repeatedly retry until succeed.
|
||||||
|
setImageLoop(p_clipboard, p_image, p_mode);
|
||||||
|
#else
|
||||||
|
p_clipboard->setImage(p_image, p_mode);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void VClipboardUtils::setImageLoop(QClipboard *p_clipboard,
|
||||||
|
const QImage &p_image,
|
||||||
|
QClipboard::Mode p_mode)
|
||||||
|
{
|
||||||
|
while (true) {
|
||||||
|
p_clipboard->setImage(p_image, p_mode);
|
||||||
|
|
||||||
|
QImage image = p_clipboard->image(p_mode);
|
||||||
|
if (!image.isNull()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
qDebug() << "fail to set image, retry";
|
||||||
|
|
||||||
|
VUtils::sleepWait(100 /* ms */);
|
||||||
|
}
|
||||||
|
}
|
25
src/utils/vclipboardutils.h
Normal file
25
src/utils/vclipboardutils.h
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
#ifndef VCLIPBOARDUTILS_H
|
||||||
|
#define VCLIPBOARDUTILS_H
|
||||||
|
|
||||||
|
#include <QImage>
|
||||||
|
#include <QClipboard>
|
||||||
|
|
||||||
|
|
||||||
|
class VClipboardUtils
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static void setImageToClipboard(QClipboard *p_clipboard,
|
||||||
|
const QImage &p_image,
|
||||||
|
QClipboard::Mode p_mode = QClipboard::Clipboard);
|
||||||
|
|
||||||
|
private:
|
||||||
|
VClipboardUtils()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static void setImageLoop(QClipboard *p_clipboard,
|
||||||
|
const QImage &p_image,
|
||||||
|
QClipboard::Mode p_mode);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // VCLIPBOARDUTILS_H
|
@ -11,6 +11,7 @@
|
|||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QImage>
|
#include <QImage>
|
||||||
#include "vfile.h"
|
#include "vfile.h"
|
||||||
|
#include "utils/vclipboardutils.h"
|
||||||
|
|
||||||
// We set the property of the clipboard to mark that the URL copied in the
|
// We set the property of the clipboard to mark that the URL copied in the
|
||||||
// clipboard has been altered.
|
// clipboard has been altered.
|
||||||
@ -133,7 +134,7 @@ void VWebView::copyImage()
|
|||||||
if (!imgPath.isEmpty()) {
|
if (!imgPath.isEmpty()) {
|
||||||
QImage img(imgPath);
|
QImage img(imgPath);
|
||||||
if (!img.isNull()) {
|
if (!img.isNull()) {
|
||||||
clipboard->setImage(img, QClipboard::Clipboard);
|
VClipboardUtils::setImageToClipboard(clipboard, img, QClipboard::Clipboard);
|
||||||
qDebug() << "clipboard copy image via URL" << imgPath;
|
qDebug() << "clipboard copy image via URL" << imgPath;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user