diff --git a/src/core/MacPasteboard.h b/src/core/MacPasteboard.h index 8461cbc5..d471a096 100644 --- a/src/core/MacPasteboard.h +++ b/src/core/MacPasteboard.h @@ -20,8 +20,9 @@ #include #include +#include -class MacPasteboard : public QMacPasteboardMime +class MacPasteboard : public QObject, public QMacPasteboardMime { public: explicit MacPasteboard() : QMacPasteboardMime(MIME_ALL) {} diff --git a/src/gui/Clipboard.cpp b/src/gui/Clipboard.cpp index 78bad273..2c0d3d6e 100644 --- a/src/gui/Clipboard.cpp +++ b/src/gui/Clipboard.cpp @@ -24,14 +24,19 @@ #include "core/Config.h" Clipboard* Clipboard::m_instance(nullptr); +#ifdef Q_OS_MAC +QPointer Clipboard::m_pasteboard(nullptr); +#endif Clipboard::Clipboard(QObject* parent) : QObject(parent) , m_timer(new QTimer(this)) -#ifdef Q_OS_MAC - , m_pasteboard(new MacPasteboard) -#endif { +#ifdef Q_OS_MAC + if (!m_pasteboard) { + m_pasteboard = new MacPasteboard(); + } +#endif m_timer->setSingleShot(true); connect(m_timer, SIGNAL(timeout()), SLOT(clearClipboard())); connect(qApp, SIGNAL(aboutToQuit()), SLOT(clearCopiedText())); diff --git a/src/gui/Clipboard.h b/src/gui/Clipboard.h index 6f8ff9ac..279ae7f0 100644 --- a/src/gui/Clipboard.h +++ b/src/gui/Clipboard.h @@ -21,6 +21,7 @@ #include #ifdef Q_OS_MAC #include "core/MacPasteboard.h" +#include #endif class QTimer; @@ -47,7 +48,9 @@ private: QTimer* m_timer; #ifdef Q_OS_MAC - QScopedPointer m_pasteboard; + // This object lives for the whole program lifetime and we cannot delete it on exit, + // so ignore leak warnings. See https://bugreports.qt.io/browse/QTBUG-54832 + static QPointer m_pasteboard; #endif QString m_lastCopied; };