summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2020-07-28 06:11:31 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2020-07-28 13:20:23 +0200
commit2405aa9d6797dcfb2e47f45f113ee1ebbc201dda (patch)
treeea2b49501545cc98d63304b2751c2840bcf1dffd /src/plugins
parent904eaec9de3ed9efd446f2ef83c15055d2b2a871 (diff)
Windows QPA: Move mime-type related classes to the new interface
Move QWindowsMime (which was a public class in Qt 4 and moved to the QPA plugin in Qt 5) to the platform namespace and add register functions to the native application. Move in test code from QtWinExtras. Task-number: QTBUG-83252 Change-Id: Iaac440e2d5cb370110919921b1eeb779600b5b65 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/platforms/windows/qwindowsapplication.cpp18
-rw-r--r--src/plugins/platforms/windows/qwindowsapplication.h5
-rw-r--r--src/plugins/platforms/windows/qwindowsinternalmimedata.cpp4
-rw-r--r--src/plugins/platforms/windows/qwindowsmime.cpp71
-rw-r--r--src/plugins/platforms/windows/qwindowsmime.h26
-rw-r--r--src/plugins/platforms/windows/qwindowsnativeinterface.cpp16
-rw-r--r--src/plugins/platforms/windows/qwindowsnativeinterface.h3
-rw-r--r--src/plugins/platforms/windows/qwindowsole.cpp2
8 files changed, 63 insertions, 82 deletions
diff --git a/src/plugins/platforms/windows/qwindowsapplication.cpp b/src/plugins/platforms/windows/qwindowsapplication.cpp
index c137b2a8a8..83f42a8c86 100644
--- a/src/plugins/platforms/windows/qwindowsapplication.cpp
+++ b/src/plugins/platforms/windows/qwindowsapplication.cpp
@@ -40,6 +40,7 @@
#include "qwindowsapplication.h"
#include "qwindowsclipboard.h"
#include "qwindowscontext.h"
+#include "qwindowsmime.h"
#include "qwin10helpers.h"
@@ -109,4 +110,21 @@ void QWindowsApplication::setDarkModeHandling(QWindowsApplication::DarkModeHandl
m_darkModeHandling = handling;
}
+void QWindowsApplication::registerMime(QPlatformInterface::Private::QWindowsMime *mime)
+{
+ if (auto ctx = QWindowsContext::instance())
+ ctx->mimeConverter().registerMime(mime);
+}
+
+void QWindowsApplication::unregisterMime(QPlatformInterface::Private::QWindowsMime *mime)
+{
+ if (auto ctx = QWindowsContext::instance())
+ ctx->mimeConverter().unregisterMime(mime);
+}
+
+int QWindowsApplication::registerMimeType(const QString &mime)
+{
+ return QWindowsMimeConverter::registerMimeType(mime);
+}
+
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/windows/qwindowsapplication.h b/src/plugins/platforms/windows/qwindowsapplication.h
index 6cf8577ab5..6e488e3ed0 100644
--- a/src/plugins/platforms/windows/qwindowsapplication.h
+++ b/src/plugins/platforms/windows/qwindowsapplication.h
@@ -62,6 +62,11 @@ public:
DarkModeHandling darkModeHandling() const override;
void setDarkModeHandling(DarkModeHandling handling) override;
+ void registerMime(QPlatformInterface::Private::QWindowsMime *mime) override;
+ void unregisterMime(QPlatformInterface::Private::QWindowsMime *mime) override;
+
+ int registerMimeType(const QString &mime) override;
+
private:
WindowActivationBehavior m_windowActivationBehavior = DefaultActivateWindow;
TouchWindowTouchTypes m_touchWindowTouchTypes = NormalTouch;
diff --git a/src/plugins/platforms/windows/qwindowsinternalmimedata.cpp b/src/plugins/platforms/windows/qwindowsinternalmimedata.cpp
index ad3f02f83b..21f64f04b6 100644
--- a/src/plugins/platforms/windows/qwindowsinternalmimedata.cpp
+++ b/src/plugins/platforms/windows/qwindowsinternalmimedata.cpp
@@ -41,6 +41,8 @@
#include "qwindowscontext.h"
#include "qwindowsmime.h"
#include <QtCore/qdebug.h>
+#include <QtCore/qvariant.h>
+
/*!
\class QWindowsInternalMimeDataBase
\brief Base for implementations of QInternalMimeData using a IDataObject COM object.
@@ -97,7 +99,7 @@ QVariant QWindowsInternalMimeData::retrieveData_sys(const QString &mimeType,
QVariant result;
const QWindowsMimeConverter &mc = QWindowsContext::instance()->mimeConverter();
- if (const QWindowsMime *converter = mc.converterToMime(mimeType, pDataObj))
+ if (auto converter = mc.converterToMime(mimeType, pDataObj))
result = converter->convertToMime(mimeType, pDataObj, type);
releaseDataObject(pDataObj);
if (QWindowsContext::verbose) {
diff --git a/src/plugins/platforms/windows/qwindowsmime.cpp b/src/plugins/platforms/windows/qwindowsmime.cpp
index 59fc7f3a35..7cd35c7308 100644
--- a/src/plugins/platforms/windows/qwindowsmime.cpp
+++ b/src/plugins/platforms/windows/qwindowsmime.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the plugins of the Qt Toolkit.
@@ -485,30 +485,6 @@ QDebug operator<<(QDebug d, IDataObject *dataObj)
\sa QWindowsMimeConverter
*/
-/*!
-Constructs a new conversion object, adding it to the globally accessed
-list of available converters.
-*/
-QWindowsMime::QWindowsMime() = default;
-
-/*!
-Destroys a conversion object, removing it from the global
-list of available converters.
-*/
-QWindowsMime::~QWindowsMime() = default;
-
-/*!
- Registers the MIME type \a mime, and returns an ID number
- identifying the format on Windows.
-*/
-int QWindowsMime::registerMimeType(const QString &mime)
-{
- const UINT f = RegisterClipboardFormat(reinterpret_cast<const wchar_t *> (mime.utf16()));
- if (!f)
- qErrnoWarning("QWindowsMime::registerMimeType: Failed to register clipboard format");
-
- return int(f);
-}
/*!
\fn bool QWindowsMime::canConvertFromMime(const FORMATETC &formatetc, const QMimeData *mimeData) const
@@ -568,7 +544,7 @@ int QWindowsMime::registerMimeType(const QString &mime)
All subclasses must reimplement this pure virtual function.
*/
-class QWindowsMimeText : public QWindowsMime
+class QWindowsMimeText : public QPlatformInterface::Private::QWindowsMime
{
public:
bool canConvertToMime(const QString &mimeType, IDataObject *pDataObj) const override;
@@ -724,7 +700,7 @@ QVariant QWindowsMimeText::convertToMime(const QString &mime, LPDATAOBJECT pData
return ret;
}
-class QWindowsMimeURI : public QWindowsMime
+class QWindowsMimeURI : public QPlatformInterface::Private::QWindowsMime
{
public:
QWindowsMimeURI();
@@ -741,8 +717,8 @@ private:
QWindowsMimeURI::QWindowsMimeURI()
{
- CF_INETURL_W = QWindowsMime::registerMimeType(QStringLiteral("UniformResourceLocatorW"));
- CF_INETURL = QWindowsMime::registerMimeType(QStringLiteral("UniformResourceLocator"));
+ CF_INETURL_W = QWindowsMimeConverter::registerMimeType(QStringLiteral("UniformResourceLocatorW"));
+ CF_INETURL = QWindowsMimeConverter::registerMimeType(QStringLiteral("UniformResourceLocator"));
}
bool QWindowsMimeURI::canConvertFromMime(const FORMATETC &formatetc, const QMimeData *mimeData) const
@@ -890,7 +866,7 @@ QVariant QWindowsMimeURI::convertToMime(const QString &mimeType, LPDATAOBJECT pD
return QVariant();
}
-class QWindowsMimeHtml : public QWindowsMime
+class QWindowsMimeHtml : public QPlatformInterface::Private::QWindowsMime
{
public:
QWindowsMimeHtml();
@@ -911,7 +887,7 @@ private:
QWindowsMimeHtml::QWindowsMimeHtml()
{
- CF_HTML = QWindowsMime::registerMimeType(QStringLiteral("HTML Format"));
+ CF_HTML = QWindowsMimeConverter::registerMimeType(QStringLiteral("HTML Format"));
}
QList<FORMATETC> QWindowsMimeHtml::formatsForMime(const QString &mimeType, const QMimeData *mimeData) const
@@ -1028,7 +1004,7 @@ bool QWindowsMimeHtml::convertFromMime(const FORMATETC &formatetc, const QMimeDa
#ifndef QT_NO_IMAGEFORMAT_BMP
-class QWindowsMimeImage : public QWindowsMime
+class QWindowsMimeImage : public QPlatformInterface::Private::QWindowsMime
{
public:
QWindowsMimeImage();
@@ -1182,7 +1158,7 @@ QVariant QWindowsMimeImage::convertToMime(const QString &mimeType, IDataObject *
}
#endif
-class QBuiltInMimes : public QWindowsMime
+class QBuiltInMimes : public QPlatformInterface::Private::QWindowsMime
{
public:
QBuiltInMimes();
@@ -1205,8 +1181,8 @@ private:
QBuiltInMimes::QBuiltInMimes()
: QWindowsMime()
{
- outFormats.insert(QWindowsMime::registerMimeType(QStringLiteral("application/x-color")), QStringLiteral("application/x-color"));
- inFormats.insert(QWindowsMime::registerMimeType(QStringLiteral("application/x-color")), QStringLiteral("application/x-color"));
+ outFormats.insert(QWindowsMimeConverter::registerMimeType(QStringLiteral("application/x-color")), QStringLiteral("application/x-color"));
+ inFormats.insert(QWindowsMimeConverter::registerMimeType(QStringLiteral("application/x-color")), QStringLiteral("application/x-color"));
}
bool QBuiltInMimes::canConvertFromMime(const FORMATETC &formatetc, const QMimeData *mimeData) const
@@ -1303,7 +1279,7 @@ QString QBuiltInMimes::mimeForFormat(const FORMATETC &formatetc) const
}
-class QLastResortMimes : public QWindowsMime
+class QLastResortMimes : public QPlatformInterface::Private::QWindowsMime
{
public:
@@ -1387,7 +1363,7 @@ QList<FORMATETC> QLastResortMimes::formatsForMime(const QString &mimeType, const
auto mit = std::find(formats.begin(), formats.end(), mimeType);
// register any other available formats
if (mit == formats.end() && !excludeList.contains(mimeType, Qt::CaseInsensitive))
- mit = formats.insert(QWindowsMime::registerMimeType(mimeType), mimeType);
+ mit = formats.insert(QWindowsMimeConverter::registerMimeType(mimeType), mimeType);
if (mit != formats.end())
formatetcs += setCf(mit.key());
@@ -1431,7 +1407,7 @@ bool QLastResortMimes::canConvertToMime(const QString &mimeType, IDataObject *pD
}
// if it is not in there then register it and see if we can get it
const auto mit = std::find(formats.cbegin(), formats.cend(), mimeType);
- const int cf = mit != formats.cend() ? mit.key() : QWindowsMime::registerMimeType(mimeType);
+ const int cf = mit != formats.cend() ? mit.key() : QWindowsMimeConverter::registerMimeType(mimeType);
return canGetData(cf, pDataObj);
}
@@ -1448,7 +1424,7 @@ QVariant QLastResortMimes::convertToMime(const QString &mimeType, IDataObject *p
data = getData(int(cf), pDataObj, lindex);
} else {
const auto mit = std::find(formats.cbegin(), formats.cend(), mimeType);
- const int cf = mit != formats.cend() ? mit.key() : QWindowsMime::registerMimeType(mimeType);
+ const int cf = mit != formats.cend() ? mit.key() : QWindowsMimeConverter::registerMimeType(mimeType);
data = getData(cf, pDataObj);
}
if (!data.isEmpty())
@@ -1506,7 +1482,7 @@ QWindowsMimeConverter::~QWindowsMimeConverter()
qDeleteAll(m_mimes.begin(), m_mimes.begin() + m_internalMimeCount);
}
-QWindowsMime * QWindowsMimeConverter::converterToMime(const QString &mimeType, IDataObject *pDataObj) const
+QWindowsMimeConverter::QWindowsMime *QWindowsMimeConverter::converterToMime(const QString &mimeType, IDataObject *pDataObj) const
{
ensureInitialized();
for (int i = m_mimes.size()-1; i >= 0; --i) {
@@ -1545,7 +1521,7 @@ QStringList QWindowsMimeConverter::allMimesForFormats(IDataObject *pDataObj) con
return formats;
}
-QWindowsMime * QWindowsMimeConverter::converterFromMime(const FORMATETC &formatetc, const QMimeData *mimeData) const
+QWindowsMimeConverter::QWindowsMime *QWindowsMimeConverter::converterFromMime(const FORMATETC &formatetc, const QMimeData *mimeData) const
{
ensureInitialized();
qCDebug(lcQpaMime) << __FUNCTION__ << formatetc;
@@ -1623,4 +1599,17 @@ void QWindowsMimeConverter::registerMime(QWindowsMime *mime)
m_mimes.append(mime);
}
+/*!
+ Registers the MIME type \a mime, and returns an ID number
+ identifying the format on Windows.
+*/
+int QWindowsMimeConverter::registerMimeType(const QString &mime)
+{
+ const UINT f = RegisterClipboardFormat(reinterpret_cast<const wchar_t *> (mime.utf16()));
+ if (!f)
+ qErrnoWarning("QWindowsApplication::registerMimeType: Failed to register clipboard format");
+
+ return int(f);
+}
+
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/windows/qwindowsmime.h b/src/plugins/platforms/windows/qwindowsmime.h
index af2a35457f..ee71bee2ba 100644
--- a/src/plugins/platforms/windows/qwindowsmime.h
+++ b/src/plugins/platforms/windows/qwindowsmime.h
@@ -40,6 +40,8 @@
#ifndef QWINDOWSMIME_H
#define QWINDOWSMIME_H
+#include <QtGui/private/qwindowsmime_p.h>
+
#include <QtCore/qt_windows.h>
#include <QtCore/qlist.h>
@@ -50,30 +52,12 @@ QT_BEGIN_NAMESPACE
class QDebug;
class QMimeData;
-class QWindowsMime
-{
- Q_DISABLE_COPY_MOVE(QWindowsMime)
-public:
- QWindowsMime();
- virtual ~QWindowsMime();
-
- // for converting from Qt
- virtual bool canConvertFromMime(const FORMATETC &formatetc, const QMimeData *mimeData) const = 0;
- virtual bool convertFromMime(const FORMATETC &formatetc, const QMimeData *mimeData, STGMEDIUM * pmedium) const = 0;
- virtual QList<FORMATETC> formatsForMime(const QString &mimeType, const QMimeData *mimeData) const = 0;
-
- // for converting to Qt
- virtual bool canConvertToMime(const QString &mimeType, IDataObject *pDataObj) const = 0;
- virtual QVariant convertToMime(const QString &mimeType, IDataObject *pDataObj, QVariant::Type preferredType) const = 0;
- virtual QString mimeForFormat(const FORMATETC &formatetc) const = 0;
-
- static int registerMimeType(const QString &mime);
-};
-
class QWindowsMimeConverter
{
Q_DISABLE_COPY_MOVE(QWindowsMimeConverter)
public:
+ using QWindowsMime = QPlatformInterface::Private::QWindowsMime;
+
QWindowsMimeConverter();
~QWindowsMimeConverter();
@@ -89,6 +73,8 @@ public:
void registerMime(QWindowsMime *mime);
void unregisterMime(QWindowsMime *mime) { m_mimes.removeOne(mime); }
+ static int registerMimeType(const QString &mime);
+
static QString clipboardFormatName(int cf);
private:
diff --git a/src/plugins/platforms/windows/qwindowsnativeinterface.cpp b/src/plugins/platforms/windows/qwindowsnativeinterface.cpp
index 12950d02d6..fe0da98a47 100644
--- a/src/plugins/platforms/windows/qwindowsnativeinterface.cpp
+++ b/src/plugins/platforms/windows/qwindowsnativeinterface.cpp
@@ -45,7 +45,6 @@
#include "qwindowsopenglcontext.h"
#include "qwindowsopengltester.h"
#include "qwindowsintegration.h"
-#include "qwindowsmime.h"
#include "qwindowstheme.h"
#include "qwin10helpers.h"
@@ -205,21 +204,6 @@ void QWindowsNativeInterface::setAsyncExpose(bool value)
QWindowsContext::instance()->setAsyncExpose(value);
}
-void QWindowsNativeInterface::registerWindowsMime(void *mimeIn)
-{
- QWindowsContext::instance()->mimeConverter().registerMime(reinterpret_cast<QWindowsMime *>(mimeIn));
-}
-
-void QWindowsNativeInterface::unregisterWindowsMime(void *mimeIn)
-{
- QWindowsContext::instance()->mimeConverter().unregisterMime(reinterpret_cast<QWindowsMime *>(mimeIn));
-}
-
-int QWindowsNativeInterface::registerMimeType(const QString &mimeType)
-{
- return QWindowsMime::registerMimeType(mimeType);
-}
-
QFont QWindowsNativeInterface::logFontToQFont(const void *logFont, int verticalDpi)
{
return QWindowsFontDatabase::LOGFONT_to_QFont(*reinterpret_cast<const LOGFONT *>(logFont), verticalDpi);
diff --git a/src/plugins/platforms/windows/qwindowsnativeinterface.h b/src/plugins/platforms/windows/qwindowsnativeinterface.h
index bb7801f398..68a795f466 100644
--- a/src/plugins/platforms/windows/qwindowsnativeinterface.h
+++ b/src/plugins/platforms/windows/qwindowsnativeinterface.h
@@ -82,9 +82,6 @@ public:
Q_INVOKABLE QString registerWindowClass(const QString &classNameIn, void *eventProc) const;
- Q_INVOKABLE void registerWindowsMime(void *mimeIn);
- Q_INVOKABLE void unregisterWindowsMime(void *mime);
- Q_INVOKABLE int registerMimeType(const QString &mimeType);
Q_INVOKABLE QFont logFontToQFont(const void *logFont, int verticalDpi);
bool asyncExpose() const;
diff --git a/src/plugins/platforms/windows/qwindowsole.cpp b/src/plugins/platforms/windows/qwindowsole.cpp
index 4427133882..c040137a6d 100644
--- a/src/plugins/platforms/windows/qwindowsole.cpp
+++ b/src/plugins/platforms/windows/qwindowsole.cpp
@@ -103,7 +103,7 @@ QWindowsOleDataObject::GetData(LPFORMATETC pformatetc, LPSTGMEDIUM pmedium)
if (data) {
const QWindowsMimeConverter &mc = QWindowsContext::instance()->mimeConverter();
- if (QWindowsMime *converter = mc.converterFromMime(*pformatetc, data))
+ if (auto converter = mc.converterFromMime(*pformatetc, data))
if (converter->convertFromMime(*pformatetc, data, pmedium))
hr = ResultFromScode(S_OK);
}