]> git.lyx.org Git - lyx.git/commitdiff
Enable QWindowsMimeMetafile with Qt6
authorEnrico Forestieri <forenr@lyx.org>
Sun, 17 Oct 2021 13:06:05 +0000 (15:06 +0200)
committerEnrico Forestieri <forenr@lyx.org>
Sun, 17 Oct 2021 13:06:05 +0000 (15:06 +0200)
The QWinMime class has been removed in Qt6 but the functionality
is still present. However, one has to allow inclusion of private
headers and register the mime handling to the QWindowsApplication
native interface.

config/qt.m4
src/frontends/qt/GuiApplication.cpp

index 99f43a215b2eb5343a95de82f2d8bc9f3f94cc9f..70a722fbbfaa0872770337658bf331e7069e990f 100644 (file)
@@ -442,6 +442,7 @@ qtHaveModule(gui):          QT += gui
 qtHaveModule(svg):             QT += svg
 qtHaveModule(svgwidgets):      QT += svgwidgets
 qtHaveModule(widgets):         QT += widgets
+QT += gui-private
 percent.target = %
 percent.commands = @echo -n "\$(\$(@))\ "
 QMAKE_EXTRA_TARGETS += percent
index f4110881beb64140f25c26f6f9c01f3de2cf63cc..54c89109906b63c9aae6324780bd856aa7616383 100644 (file)
 
 #if (QT_VERSION < 0x050000) || (QT_VERSION >= 0x050400)
 #if defined(Q_OS_WIN) || defined(Q_CYGWIN_WIN)
-#if (QT_VERSION < 0x060000)
 #if (QT_VERSION < 0x050000)
 #include <QWindowsMime>
 #define QWINDOWSMIME QWindowsMime
+#define QVARIANTTYPE QVariant::Type
+#elif (QT_VERSION >= 0x060000)
+#include <QtGui/private/qguiapplication_p.h>
+#include <QtGui/private/qwindowsmime_p.h>
+#include <QtGui/qpa/qplatformintegration.h>
+#define QWINDOWSMIME QWindowsMime
+#define QVARIANTTYPE QMetaType
+using QWindowsMime = QNativeInterface::Private::QWindowsMime;
+using QWindowsApplication = QNativeInterface::Private::QWindowsApplication;
 #else
 #include <QWinMime>
 #define QWINDOWSMIME QWinMime
-#endif
+#define QVARIANTTYPE QVariant::Type
 #endif
 #ifdef Q_CC_GNU
 #include <wtypes.h>
@@ -812,7 +820,7 @@ public:
 ////////////////////////////////////////////////////////////////////////
 // Windows specific stuff goes here...
 
-#if (QT_VERSION < 0x050000) || (QT_VERSION >= 0x050400 && QT_VERSION < 0x060000)
+#if (QT_VERSION < 0x050000) || (QT_VERSION >= 0x050400)
 #if defined(Q_OS_WIN) || defined(Q_CYGWIN_WIN)
 // QWindowsMimeMetafile can only be compiled on Windows.
 
@@ -859,7 +867,7 @@ public:
        }
 
        QVariant convertToMime(QString const & mimetype, IDataObject * pDataObj,
-               QVariant::Type /*preferredType*/) const override
+               QVARIANTTYPE /*preferredType*/) const override
        {
                QByteArray data;
                if (!canConvertToMime(mimetype, pDataObj))
@@ -978,15 +986,29 @@ struct GuiApplication::Private
                , last_state_(Qt::ApplicationInactive)
        #endif
        {
-       #if (QT_VERSION < 0x050000) || (QT_VERSION >= 0x050400 && QT_VERSION < 0x060000)
+       #if (QT_VERSION < 0x050000) || (QT_VERSION >= 0x050400)
        #if defined(Q_OS_WIN) || defined(Q_CYGWIN_WIN)
                /// WMF Mime handler for Windows clipboard.
                wmf_mime_ = new QWindowsMimeMetafile;
+       #if (QT_VERSION >= 0x060000)
+               win_app_ = dynamic_cast<QWindowsApplication *>
+                       (QGuiApplicationPrivate::platformIntegration());
+               win_app_->registerMime(wmf_mime_);
+       #endif
        #endif
        #endif
                initKeySequences(&theTopLevelKeymap());
        }
 
+       #if (QT_VERSION >= 0x060000)
+       #if defined(Q_OS_WIN) || defined(Q_CYGWIN_WIN)
+       ~Private()
+       {
+               win_app_->unregisterMime(wmf_mime_);
+       }
+       #endif
+       #endif
+
        void initKeySequences(KeyMap * kb)
        {
                keyseq = KeySequence(kb, kb);
@@ -1053,10 +1075,13 @@ struct GuiApplication::Private
        QMacPasteboardMimeGraphics mac_pasteboard_mime_;
 #endif
 
-#if (QT_VERSION < 0x050000) || (QT_VERSION >= 0x050400 && QT_VERSION < 0x060000)
+#if (QT_VERSION < 0x050000) || (QT_VERSION >= 0x050400)
 #if defined(Q_OS_WIN) || defined(Q_CYGWIN_WIN)
        /// WMF Mime handler for Windows clipboard.
        QWindowsMimeMetafile * wmf_mime_;
+#if (QT_VERSION >= 0x060000)
+       QWindowsApplication * win_app_;
+#endif
 #endif
 #endif