From: Enrico Forestieri Date: Sun, 17 Oct 2021 13:06:05 +0000 (+0200) Subject: Enable QWindowsMimeMetafile with Qt6 X-Git-Tag: 2.4-beta2~1107 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=771f30e9463d8d7bf7acd4dfc564f462b28eae16;p=lyx.git Enable QWindowsMimeMetafile with Qt6 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. --- diff --git a/config/qt.m4 b/config/qt.m4 index 99f43a215b..70a722fbbf 100644 --- a/config/qt.m4 +++ b/config/qt.m4 @@ -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 diff --git a/src/frontends/qt/GuiApplication.cpp b/src/frontends/qt/GuiApplication.cpp index f4110881be..54c8910990 100644 --- a/src/frontends/qt/GuiApplication.cpp +++ b/src/frontends/qt/GuiApplication.cpp @@ -137,14 +137,22 @@ #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 #define QWINDOWSMIME QWindowsMime +#define QVARIANTTYPE QVariant::Type +#elif (QT_VERSION >= 0x060000) +#include +#include +#include +#define QWINDOWSMIME QWindowsMime +#define QVARIANTTYPE QMetaType +using QWindowsMime = QNativeInterface::Private::QWindowsMime; +using QWindowsApplication = QNativeInterface::Private::QWindowsApplication; #else #include #define QWINDOWSMIME QWinMime -#endif +#define QVARIANTTYPE QVariant::Type #endif #ifdef Q_CC_GNU #include @@ -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 + (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