summaryrefslogtreecommitdiffstats
path: root/src/gui
diff options
context:
space:
mode:
authorVolker Hilsheimer <volker.hilsheimer@qt.io>2022-11-15 11:36:51 +0100
committerVolker Hilsheimer <volker.hilsheimer@qt.io>2022-11-16 22:14:00 +0100
commit649dccf57b18626f6a0790d46e5e619e4e603078 (patch)
tree8ace4469cf575ad8cbf0e50407688a3f13b99add /src/gui
parent427152c9b9e12d74fc5c7526148d09c5fba9263b (diff)
Reintroduce converter APIs for supporting native clipboard formats
In Qt 5, QWin(dows)Mime and QMacMime lived in the respective Extras modules, which were removed and partially folded into the relevant modules in Qt. QWindowsMime and QMacMime continued to provide the abstraction for implementing built-in support for native clipboard formats and UTIs within Qt, but only as private APIs. After the recent clean up of those APIs and respective infrastructure, we can now bring them back as public converter interfaces. Application developers can subclass those and instantiate an instance of their implementation to add support for platform or application specific data formats. These interfaces are not in the QNativeInterface namespace, as applications don't call into Windows or macOS using those interfaces. I.e. there is no class on which an application would call auto *converter= nativeInterface<QWindowsMimeConverter>(); Also, since applications override those converter types, we do want to guarantee binary and source compatibility. [ChangeLog][QtGui][QWindowsMimeConverter] Reintroduced to allow applications to add support for conversion from and to Windows-native clipboard formats to MIME-encoded data. [ChangeLog][QtGui][QUtiMimeConverter] Reintroduced to allow applications to add support for conversion from and to clipboard data on macOS and iOS to MIME-encoded data. Fixes: QTBUG-93632 Change-Id: Iebd909c3970015d203f59d5ab15e306b3d312f6e Reviewed-by: Yuhang Zhao <2546789017@qq.com> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/CMakeLists.txt4
-rw-r--r--src/gui/doc/includes/QtGuiDoc1
-rw-r--r--src/gui/doc/src/dnd.qdoc4
-rw-r--r--src/gui/kernel/qguiapplication_p.h7
-rw-r--r--src/gui/platform/darwin/qmacmimeregistry.mm22
-rw-r--r--src/gui/platform/darwin/qmacmimeregistry_p.h10
-rw-r--r--src/gui/platform/darwin/qutimimeconverter.h (renamed from src/gui/platform/darwin/qmacmime_p.h)33
-rw-r--r--src/gui/platform/darwin/qutimimeconverter.mm (renamed from src/gui/platform/darwin/qmacmime.mm)59
-rw-r--r--src/gui/platform/windows/qwindowsmimeconverter.cpp (renamed from src/gui/platform/windows/qwindowsmime.cpp)51
-rw-r--r--src/gui/platform/windows/qwindowsmimeconverter.h (renamed from src/gui/platform/windows/qwindowsmime_p.h)40
-rw-r--r--src/gui/platform/windows/qwindowsnativeinterface.cpp9
11 files changed, 108 insertions, 132 deletions
diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt
index 6278ea45f9..b72e65dd28 100644
--- a/src/gui/CMakeLists.txt
+++ b/src/gui/CMakeLists.txt
@@ -390,7 +390,7 @@ qt_internal_extend_target(Gui CONDITION APPLE
painting/qrasterbackingstore.cpp painting/qrasterbackingstore_p.h
painting/qrhibackingstore.cpp painting/qrhibackingstore_p.h
platform/darwin/qmacmimeregistry.mm platform/darwin/qmacmimeregistry_p.h
- platform/darwin/qmacmime.mm platform/darwin/qmacmime_p.h
+ platform/darwin/qutimimeconverter.mm platform/darwin/qutimimeconverter.h
platform/darwin/qapplekeymapper.mm platform/darwin/qapplekeymapper_p.h
text/coretext/qcoretextfontdatabase.mm text/coretext/qcoretextfontdatabase_p.h
text/coretext/qfontengine_coretext.mm text/coretext/qfontengine_coretext_p.h
@@ -413,7 +413,7 @@ qt_internal_extend_target(Gui CONDITION WIN32
image/qpixmap_win.cpp
kernel/qwindowdefs_win.h
platform/windows/qwindowsguieventdispatcher.cpp platform/windows/qwindowsguieventdispatcher_p.h
- platform/windows/qwindowsmime_p.h platform/windows/qwindowsmime.cpp
+ platform/windows/qwindowsmimeconverter.h platform/windows/qwindowsmimeconverter.cpp
platform/windows/qwindowsnativeinterface.cpp
rhi/cs_tdr_p.h
rhi/qrhid3d11.cpp rhi/qrhid3d11_p.h
diff --git a/src/gui/doc/includes/QtGuiDoc b/src/gui/doc/includes/QtGuiDoc
index 00d01afa9c..80292141e2 100644
--- a/src/gui/doc/includes/QtGuiDoc
+++ b/src/gui/doc/includes/QtGuiDoc
@@ -16,4 +16,3 @@
#include <QtGui/qpa/qplatformscreen_p.h>
#include <QtGui/private/qguiapplication_p.h>
#include <QtGui/private/qkeymapper_p.h>
-#include <QtGui/private/qwindowsmime_p.h>
diff --git a/src/gui/doc/src/dnd.qdoc b/src/gui/doc/src/dnd.qdoc
index 8d91ee5582..cfa9b448ea 100644
--- a/src/gui/doc/src/dnd.qdoc
+++ b/src/gui/doc/src/dnd.qdoc
@@ -379,7 +379,7 @@
their clipboard formats.
Custom classes for translating proprietary clipboard formats can be
- registered by reimplementing QWinMime on Windows or
- QMacMime on \macos.
+ registered by reimplementing QWindowsMimeConverter on Windows or
+ QUtiMimeConverter on \macos.
*/
diff --git a/src/gui/kernel/qguiapplication_p.h b/src/gui/kernel/qguiapplication_p.h
index e68eb217e2..9d8e292445 100644
--- a/src/gui/kernel/qguiapplication_p.h
+++ b/src/gui/kernel/qguiapplication_p.h
@@ -333,11 +333,12 @@ private:
// ----------------- QNativeInterface -----------------
+class QWindowsMimeConverter;
+
namespace QNativeInterface::Private {
#if defined(Q_OS_WIN) || defined(Q_QDOC)
-class QWindowsMime;
struct Q_GUI_EXPORT QWindowsApplication
{
@@ -381,8 +382,8 @@ struct Q_GUI_EXPORT QWindowsApplication
virtual DarkModeHandling darkModeHandling() const = 0;
virtual void setDarkModeHandling(DarkModeHandling handling) = 0;
- virtual void registerMime(QWindowsMime *mime) = 0;
- virtual void unregisterMime(QWindowsMime *mime) = 0;
+ virtual void registerMime(QWindowsMimeConverter *mime) = 0;
+ virtual void unregisterMime(QWindowsMimeConverter *mime) = 0;
virtual int registerMimeType(const QString &mime) = 0;
diff --git a/src/gui/platform/darwin/qmacmimeregistry.mm b/src/gui/platform/darwin/qmacmimeregistry.mm
index c08172abcc..abf013248f 100644
--- a/src/gui/platform/darwin/qmacmimeregistry.mm
+++ b/src/gui/platform/darwin/qmacmimeregistry.mm
@@ -3,7 +3,7 @@
#include <QtCore/qmimedata.h>
-#include "qmacmime_p.h"
+#include "qutimimeconverter.h"
#include "qmacmimeregistry_p.h"
#include "qguiapplication.h"
#include "private/qcore_mac_p.h"
@@ -14,25 +14,25 @@ using namespace Qt::StringLiterals;
namespace QMacMimeRegistry {
-typedef QList<QMacMime*> MimeList;
+typedef QList<QUtiMimeConverter*> MimeList;
Q_GLOBAL_STATIC(MimeList, globalMimeList)
Q_GLOBAL_STATIC(QStringList, globalDraggedTypesList)
-// implemented in qmacmime.mm
+// implemented in qutimimeconverter.mm
void registerBuiltInTypes();
/*!
\fn void qRegisterDraggedTypes(const QStringList &types)
- \relates QMacMime
+ \relates QUtiMimeConverter
Registers the given \a types as custom pasteboard types.
This function should be called to enable the Drag and Drop events
for custom pasteboard types on Cocoa implementations. This is required
- in addition to a QMacMime subclass implementation. By default
+ in addition to a QUtiMimeConverter subclass implementation. By default
drag and drop is enabled for all standard pasteboard types.
- \sa QMacMime
+ \sa QUtiMimeConverter
*/
void registerDraggedTypes(const QStringList &types)
@@ -80,7 +80,7 @@ void destroyMimeTypes()
/*
Returns a MIME type of for scope \a scope for \a uti, or \nullptr if none exists.
*/
-QString flavorToMime(QMacMime::HandlerScope scope, const QString &uti)
+QString flavorToMime(QUtiMimeConverter::HandlerScope scope, const QString &uti)
{
MimeList *mimes = globalMimeList();
for (MimeList::const_iterator it = mimes->constBegin(); it != mimes->constEnd(); ++it) {
@@ -98,7 +98,7 @@ QString flavorToMime(QMacMime::HandlerScope scope, const QString &uti)
return QString();
}
-void registerMimeConverter(QMacMime *macMime)
+void registerMimeConverter(QUtiMimeConverter *macMime)
{
// globalMimeList is in decreasing priority order. Recently added
// converters take prioity over previously added converters: prepend
@@ -106,7 +106,7 @@ void registerMimeConverter(QMacMime *macMime)
globalMimeList()->prepend(macMime);
}
-void unregisterMimeConverter(QMacMime *macMime)
+void unregisterMimeConverter(QUtiMimeConverter *macMime)
{
if (!QGuiApplication::closingDown())
globalMimeList()->removeAll(macMime);
@@ -114,9 +114,9 @@ void unregisterMimeConverter(QMacMime *macMime)
/*
- Returns a list of all currently defined QMacMime objects for scope \a scope.
+ Returns a list of all currently defined QUtiMimeConverter objects for scope \a scope.
*/
-QList<QMacMime *> all(QMacMime::HandlerScope scope)
+QList<QUtiMimeConverter *> all(QUtiMimeConverter::HandlerScope scope)
{
MimeList ret;
MimeList *mimes = globalMimeList();
diff --git a/src/gui/platform/darwin/qmacmimeregistry_p.h b/src/gui/platform/darwin/qmacmimeregistry_p.h
index fb35bd8304..5928b81959 100644
--- a/src/gui/platform/darwin/qmacmimeregistry_p.h
+++ b/src/gui/platform/darwin/qmacmimeregistry_p.h
@@ -17,7 +17,7 @@
#include <QtGui/private/qtguiglobal_p.h>
-#include <QtGui/private/qmacmime_p.h>
+#include <QtGui/qutimimeconverter.h>
#include <CoreFoundation/CoreFoundation.h>
@@ -27,11 +27,11 @@ namespace QMacMimeRegistry {
Q_GUI_EXPORT void initializeMimeTypes();
Q_GUI_EXPORT void destroyMimeTypes();
- Q_GUI_EXPORT void registerMimeConverter(QMacMime *);
- Q_GUI_EXPORT void unregisterMimeConverter(QMacMime *);
+ Q_GUI_EXPORT void registerMimeConverter(QUtiMimeConverter *);
+ Q_GUI_EXPORT void unregisterMimeConverter(QUtiMimeConverter *);
- Q_GUI_EXPORT QList<QMacMime *> all(QMacMime::HandlerScope scope);
- Q_GUI_EXPORT QString flavorToMime(QMacMime::HandlerScope scope, const QString &flav);
+ Q_GUI_EXPORT QList<QUtiMimeConverter *> all(QUtiMimeConverter::HandlerScope scope);
+ Q_GUI_EXPORT QString flavorToMime(QUtiMimeConverter::HandlerScope scope, const QString &flav);
Q_GUI_EXPORT void registerDraggedTypes(const QStringList &types);
Q_GUI_EXPORT const QStringList& enabledDraggedTypes();
diff --git a/src/gui/platform/darwin/qmacmime_p.h b/src/gui/platform/darwin/qutimimeconverter.h
index 2b03528836..f3de4c0663 100644
--- a/src/gui/platform/darwin/qmacmime_p.h
+++ b/src/gui/platform/darwin/qutimimeconverter.h
@@ -1,28 +1,21 @@
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
-#ifndef QMACMIME_H
-#define QMACMIME_H
+#ifndef QUTIMIMECONVERTER_H
+#define QUTIMIMECONVERTER_H
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
+#include <QtGui/qtguiglobal.h>
-
-#include <QtGui/private/qtguiglobal_p.h>
-
-#include <CoreFoundation/CoreFoundation.h>
+#include <QtCore/qlist.h>
QT_BEGIN_NAMESPACE
-class Q_GUI_EXPORT QMacMime
+class QByteArray;
+class QString;
+class QVariant;
+class QMimeData;
+
+class Q_GUI_EXPORT QUtiMimeConverter
{
public:
enum class HandlerScope : uchar
@@ -35,9 +28,9 @@ public:
AllCompatible = All|Qt_compatible
};
- QMacMime();
- explicit QMacMime(HandlerScope scope); // internal
- virtual ~QMacMime();
+ QUtiMimeConverter();
+ explicit QUtiMimeConverter(HandlerScope scope); // internal
+ virtual ~QUtiMimeConverter();
HandlerScope scope() const { return m_scope; }
bool canConvert(const QString &mime, const QString &uti) const { return mimeForUti(uti) == mime; }
diff --git a/src/gui/platform/darwin/qmacmime.mm b/src/gui/platform/darwin/qutimimeconverter.mm
index 4e2a65cf76..8f8e348c0d 100644
--- a/src/gui/platform/darwin/qmacmime.mm
+++ b/src/gui/platform/darwin/qutimimeconverter.mm
@@ -2,6 +2,7 @@
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include <ImageIO/ImageIO.h>
+#include <CoreFoundation/CoreFoundation.h>
#include <QtCore/qsystemdetection.h>
#include <QtCore/qurl.h>
@@ -19,7 +20,7 @@
#import <UIKit/UIKit.h>
#endif
-#include "qmacmime_p.h"
+#include "qutimimeconverter.h"
#include "qmacmimeregistry_p.h"
#include "qguiapplication.h"
#include "private/qcore_mac_p.h"
@@ -34,9 +35,9 @@ using namespace Qt::StringLiterals;
//#define DEBUG_MIME_MAPS
/*!
- \class QMacMime
+ \class QUtiMimeConverter
\internal
- \brief The QMacMime class converts between a MIME type and a
+ \brief The QUtiMimeConverter class converts between a MIME type and a
\l{https://developer.apple.com/documentation/uniformtypeidentifiers}
{Uniform Type Identifier (UTI)} format.
\since 4.2
@@ -49,11 +50,11 @@ using namespace Qt::StringLiterals;
Mac, although some applications use MIME to describe clipboard
contents, it is more common to use Apple's UTI format.
- QMacMime's role is to bridge the gap between MIME and UTI;
+ QUtiMimeConverter's role is to bridge the gap between MIME and UTI;
By subclasses this class, one can extend Qt's drag and drop
and clipboard handling to convert to and from unsupported, or proprietary, UTI formats.
- A subclass of QMacMime will automatically be registered, and active, upon instantiation.
+ A subclass of QUtiMimeConverter will automatically be registered, and active, upon instantiation.
Qt has predefined support for the following UTIs:
\list
@@ -69,14 +70,14 @@ using namespace Qt::StringLiterals;
\li com.apple.pict - converts to "application/x-qt-image"
\endlist
- When working with MIME data, Qt will iterate through all instances of QMacMime to find
+ When working with MIME data, Qt will iterate through all instances of QUtiMimeConverter to find
find an instance that can convert to, or from, a specific MIME type. It will do this by calling
mimeForUti() or utiForMime() on each instance, starting with (and choosing) the last created
instance first. The actual conversions will be done by using convertToMime() and convertFromMime().
*/
/*!
- \enum QMacMime::HandlerScope
+ \enum QUtiMimeConverter::HandlerScope
\internal
*/
@@ -84,7 +85,7 @@ using namespace Qt::StringLiterals;
Constructs a new conversion object of type \a scope, adding it to the
globally accessed list of available converters.
*/
-QMacMime::QMacMime(HandlerScope scope)
+QUtiMimeConverter::QUtiMimeConverter(HandlerScope scope)
: m_scope(scope)
{
QMacMimeRegistry::registerMimeConverter(this);
@@ -94,8 +95,8 @@ QMacMime::QMacMime(HandlerScope scope)
Constructs a new conversion object and adds it to the
globally accessed list of available converters.
*/
-QMacMime::QMacMime()
- : QMacMime(HandlerScope::All)
+QUtiMimeConverter::QUtiMimeConverter()
+ : QUtiMimeConverter(HandlerScope::All)
{
}
@@ -103,7 +104,7 @@ QMacMime::QMacMime()
Destroys a conversion object, removing it from the global
list of available converters.
*/
-QMacMime::~QMacMime()
+QUtiMimeConverter::~QUtiMimeConverter()
{
QMacMimeRegistry::unregisterMimeConverter(this);
}
@@ -111,21 +112,21 @@ QMacMime::~QMacMime()
/*!
Returns the item count for the given \a mimeData
*/
-int QMacMime::count(const QMimeData *mimeData) const
+int QUtiMimeConverter::count(const QMimeData *mimeData) const
{
Q_UNUSED(mimeData);
return 1;
}
/*!
- \fn bool QMacMime::canConvert(const QString &mime, const QString &uti) const
+ \fn bool QUtiMimeConverter::canConvert(const QString &mime, const QString &uti) const
Returns \c true if the converter can convert (both ways) between
\a mime and \a uti; otherwise returns \c false.
*/
/*!
- \fn QString QMacMime::mimeForUti(QString uti)
+ \fn QString QUtiMimeConverter::mimeForUti(QString uti)
Returns the MIME type used for Mac UTI \a uti, or an empty string if
this converter does not support converting from \a uti.
@@ -134,7 +135,7 @@ int QMacMime::count(const QMimeData *mimeData) const
*/
/*!
- \fn QString QMacMime::utiForMime(const QString &mime)
+ \fn QString QUtiMimeConverter::utiForMime(const QString &mime)
Returns the Mac UTI used for MIME type \a mime, or an empty string if
this converter does not support converting from \a mime.
@@ -143,7 +144,7 @@ int QMacMime::count(const QMimeData *mimeData) const
*/
/*!
- \fn QVariant QMacMime::convertToMime(const QString &mime,
+ \fn QVariant QUtiMimeConverter::convertToMime(const QString &mime,
const QList<QByteArray> &data, const QString &uti)
Returns \a data converted from Mac UTI \a uti to MIME type \a mime.
@@ -155,7 +156,7 @@ int QMacMime::count(const QMimeData *mimeData) const
*/
/*!
- \fn QList<QByteArray> QMacMime::convertFromMime(const QString &mime,
+ \fn QList<QByteArray> QUtiMimeConverter::convertFromMime(const QString &mime,
const QVariant &data, const QString & uti)
Returns \a data converted from MIME type \a mime to Mac UTI \a uti.
@@ -167,9 +168,9 @@ int QMacMime::count(const QMimeData *mimeData) const
*/
-class QMacMimeAny : public QMacMime {
+class QMacMimeAny : public QUtiMimeConverter {
public:
- QMacMimeAny() : QMacMime(HandlerScope::AllCompatible) {}
+ QMacMimeAny() : QUtiMimeConverter(HandlerScope::AllCompatible) {}
QString utiForMime(const QString &mime) const override;
QString mimeForUti(const QString &uti) const override;
@@ -220,11 +221,11 @@ QList<QByteArray> QMacMimeAny::convertFromMime(const QString &mime, const QVaria
return ret;
}
-class QMacMimeTypeName : public QMacMime {
+class QMacMimeTypeName : public QUtiMimeConverter {
private:
public:
- QMacMimeTypeName(): QMacMime(HandlerScope::AllCompatible) {}
+ QMacMimeTypeName(): QUtiMimeConverter(HandlerScope::AllCompatible) {}
QString utiForMime(const QString &mime) const override;
QString mimeForUti(const QString &uti) const override;
@@ -257,7 +258,7 @@ QList<QByteArray> QMacMimeTypeName::convertFromMime(const QString &, const QVari
return ret;
}
-class QMacMimePlainTextFallback : public QMacMime
+class QMacMimePlainTextFallback : public QUtiMimeConverter
{
public:
QString utiForMime(const QString &mime) const override;
@@ -313,7 +314,7 @@ QMacMimePlainTextFallback::convertFromMime(const QString &, const QVariant &data
return ret;
}
-class QMacMimeUnicodeText : public QMacMime
+class QMacMimeUnicodeText : public QUtiMimeConverter
{
public:
QString utiForMime(const QString &mime) const override;
@@ -396,7 +397,7 @@ QMacMimeUnicodeText::convertFromMime(const QString &, const QVariant &data,
return ret;
}
-class QMacMimeHTMLText : public QMacMime
+class QMacMimeHTMLText : public QUtiMimeConverter
{
public:
QString utiForMime(const QString &mime) const override;
@@ -443,7 +444,7 @@ QMacMimeHTMLText::convertFromMime(const QString &mime,
return ret;
}
-class QMacMimeRtfText : public QMacMime
+class QMacMimeRtfText : public QUtiMimeConverter
{
public:
QString utiForMime(const QString &mime) const override;
@@ -511,7 +512,7 @@ QMacMimeRtfText::convertFromMime(const QString &mime,
return ret;
}
-class QMacMimeFileUri : public QMacMime
+class QMacMimeFileUri : public QUtiMimeConverter
{
public:
QString utiForMime(const QString &mime) const override;
@@ -594,7 +595,7 @@ int QMacMimeFileUri::count(const QMimeData *mimeData) const
return mimeData->urls().count();
}
-class QMacMimeUrl : public QMacMime
+class QMacMimeUrl : public QUtiMimeConverter
{
public:
QString utiForMime(const QString &mime) const override;
@@ -658,7 +659,7 @@ QList<QByteArray> QMacMimeUrl::convertFromMime(const QString &mime,
return ret;
}
-class QMacMimeVCard : public QMacMime
+class QMacMimeVCard : public QUtiMimeConverter
{
public:
QString utiForMime(const QString &mime) const override;
@@ -711,7 +712,7 @@ QList<QByteArray> QMacMimeVCard::convertFromMime(const QString &mime,
extern QImage qt_mac_toQImage(CGImageRef image);
extern CGImageRef qt_mac_toCGImage(const QImage &qImage);
-class QMacMimeTiff : public QMacMime
+class QMacMimeTiff : public QUtiMimeConverter
{
public:
QString utiForMime(const QString &mime) const override;
diff --git a/src/gui/platform/windows/qwindowsmime.cpp b/src/gui/platform/windows/qwindowsmimeconverter.cpp
index 74e083658d..d7998a3eb7 100644
--- a/src/gui/platform/windows/qwindowsmime.cpp
+++ b/src/gui/platform/windows/qwindowsmimeconverter.cpp
@@ -1,19 +1,19 @@
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
-#include "qwindowsmime_p.h"
+#include "qwindowsmimeconverter.h"
+
+#include <QtCore/qt_windows.h>
#include <QtGui/private/qguiapplication_p.h>
#include <QtGui/qpa/qplatformintegration.h>
QT_BEGIN_NAMESPACE
-using namespace QNativeInterface::Private;
-
/*!
- \class QWindowsMime
- \brief The QWindowsMime class maps open-standard MIME to Window Clipboard formats.
- \internal
+ \class QWindowsMimeConverter
+ \brief The QWindowsMimeConverter class maps open-standard MIME to Window Clipboard formats.
+ \inmodule QtGui
Qt's drag-and-drop and clipboard facilities use the MIME standard.
On X11, this maps trivially to the Xdnd protocol, but on Windows
@@ -21,8 +21,8 @@ using namespace QNativeInterface::Private;
formats, others use arbitrary non-standardized naming conventions,
or unnamed built-in formats of Windows.
- By instantiating subclasses of QWindowsMime that provide conversions
- between Windows Clipboard and MIME formats, you can convert
+ By instantiating subclasses of QWindowsMimeConverter that provide
+ conversions between Windows Clipboard and MIME formats, you can convert
proprietary clipboard formats to MIME formats.
Qt has predefined support for the following Windows Clipboard formats:
@@ -46,14 +46,11 @@ using namespace QNativeInterface::Private;
You can check if a MIME type is convertible using canConvertFromMime() and
can perform conversions with convertToMime() and convertFromMime().
-
- \sa QWindowsMimeRegistry
*/
/*!
- \fn bool QWindowsMime::canConvertFromMime(const FORMATETC &formatetc, const QMimeData *mimeData) const
- \internal
+ \fn bool QWindowsMimeConverter::canConvertFromMime(const FORMATETC &formatetc, const QMimeData *mimeData) const
Returns \c true if the converter can convert from the \a mimeData to
the format specified in \a formatetc.
@@ -62,8 +59,7 @@ using namespace QNativeInterface::Private;
*/
/*!
- \fn bool QWindowsMime::canConvertToMime(const QString &mimeType, IDataObject *pDataObj) const
- \internal
+ \fn bool QWindowsMimeConverter::canConvertToMime(const QString &mimeType, IDataObject *pDataObj) const
Returns \c true if the converter can convert to the \a mimeType from
the available formats in \a pDataObj.
@@ -72,8 +68,7 @@ using namespace QNativeInterface::Private;
*/
/*!
- \fn QString QWindowsMime::mimeForFormat(const FORMATETC &formatetc) const
- \internal
+ \fn QString QWindowsMimeConverter::mimeForFormat(const FORMATETC &formatetc) const
Returns the mime type that will be created form the format specified
in \a formatetc, or an empty string if this converter does not support
@@ -83,8 +78,7 @@ using namespace QNativeInterface::Private;
*/
/*!
- \fn QList<FORMATETC> QWindowsMime::formatsForMime(const QString &mimeType, const QMimeData *mimeData) const
- \internal
+ \fn QList<FORMATETC> QWindowsMimeConverter::formatsForMime(const QString &mimeType, const QMimeData *mimeData) const
Returns a QList of FORMATETC structures representing the different windows clipboard
formats that can be provided for the \a mimeType from the \a mimeData.
@@ -93,9 +87,8 @@ using namespace QNativeInterface::Private;
*/
/*!
- \fn QVariant QWindowsMime::convertToMime(const QString &mimeType, IDataObject *pDataObj,
+ \fn QVariant QWindowsMimeConverter::convertToMime(const QString &mimeType, IDataObject *pDataObj,
QMetaType preferredType) const
- \internal
Returns a QVariant containing the converted data for \a mimeType from \a pDataObj.
If possible the QVariant should be of the \a preferredType to avoid needless conversions.
@@ -104,8 +97,7 @@ using namespace QNativeInterface::Private;
*/
/*!
- \fn bool QWindowsMime::convertFromMime(const FORMATETC &formatetc, const QMimeData *mimeData, STGMEDIUM * pmedium) const
- \internal
+ \fn bool QWindowsMimeConverter::convertFromMime(const FORMATETC &formatetc, const QMimeData *mimeData, STGMEDIUM * pmedium) const
Convert the \a mimeData to the format specified in \a formatetc.
The converted data should then be placed in \a pmedium structure.
@@ -116,39 +108,42 @@ using namespace QNativeInterface::Private;
*/
/*!
- Constructs a QWindowsMime instance.
+ Constructs a QWindowsMimeConverter instance.
The instance is automatically registered, and will be called to convert data during
clipboard or drag'n'drop operations.
*/
-QWindowsMime::QWindowsMime()
+QWindowsMimeConverter::QWindowsMimeConverter()
{
+ using QWindowsApplication = QNativeInterface::Private::QWindowsApplication;
auto nativeWindowsApp = dynamic_cast<QWindowsApplication *>(QGuiApplicationPrivate::platformIntegration());
Q_ASSERT(nativeWindowsApp);
nativeWindowsApp->registerMime(this);
}
/*!
- Constructs a QWindowsMime instance.
+ Constructs a QWindowsMimeConverter instance.
The instance is automatically unregistered.
*/
-QWindowsMime::~QWindowsMime()
+QWindowsMimeConverter::~QWindowsMimeConverter()
{
+ using QWindowsApplication = QNativeInterface::Private::QWindowsApplication;
auto nativeWindowsApp = dynamic_cast<QWindowsApplication *>(QGuiApplicationPrivate::platformIntegration());
Q_ASSERT(nativeWindowsApp);
nativeWindowsApp->unregisterMime(this);
}
/*!
- Registers the MIME type \a mime, and returns an ID number
+ Registers the MIME type \a mimeType, and returns an ID number
identifying the format on Windows.
A mime type \c {application/x-qt-windows-mime;value="WindowsType"} will be
registered as the clipboard format for \c WindowsType.
*/
-int QWindowsMime::registerMimeType(const QString &mimeType)
+int QWindowsMimeConverter::registerMimeType(const QString &mimeType)
{
+ using QWindowsApplication = QNativeInterface::Private::QWindowsApplication;
auto nativeWindowsApp = dynamic_cast<QWindowsApplication *>(QGuiApplicationPrivate::platformIntegration());
Q_ASSERT(nativeWindowsApp);
return nativeWindowsApp->registerMimeType(mimeType);
diff --git a/src/gui/platform/windows/qwindowsmime_p.h b/src/gui/platform/windows/qwindowsmimeconverter.h
index f097a618ef..c1b80c1fef 100644
--- a/src/gui/platform/windows/qwindowsmime_p.h
+++ b/src/gui/platform/windows/qwindowsmimeconverter.h
@@ -1,37 +1,27 @@
// Copyright (C) 2020 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
-#ifndef QWINDOWSMIME_P_H
-#define QWINDOWSMIME_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtCore/qt_windows.h>
-#include <QtCore/qvariant.h>
+#ifndef QWINDOWSMIMECONVERTER_P_H
+#define QWINDOWSMIMECONVERTER_P_H
#include <QtGui/qtguiglobal.h>
-#include <QtCore/private/qglobal_p.h>
QT_BEGIN_NAMESPACE
+class QMetaType;
class QMimeData;
-
-namespace QNativeInterface::Private {
-
-class Q_GUI_EXPORT QWindowsMime
+class QVariant;
+struct tagFORMATETC;
+using FORMATETC = tagFORMATETC;
+struct tagSTGMEDIUM;
+using STGMEDIUM = tagSTGMEDIUM;
+struct IDataObject;
+
+class Q_GUI_EXPORT QWindowsMimeConverter
{
public:
- QWindowsMime();
- virtual ~QWindowsMime();
+ QWindowsMimeConverter();
+ virtual ~QWindowsMimeConverter();
static int registerMimeType(const QString &mimeType);
@@ -46,8 +36,6 @@ public:
virtual QString mimeForFormat(const FORMATETC &formatetc) const = 0;
};
-} // QNativeInterface::Private
-
QT_END_NAMESPACE
-#endif // QWINDOWSMIME_P_H
+#endif // QWINDOWSMIMECONVERTER_H
diff --git a/src/gui/platform/windows/qwindowsnativeinterface.cpp b/src/gui/platform/windows/qwindowsnativeinterface.cpp
index fe6f4e96dd..86c6593f5d 100644
--- a/src/gui/platform/windows/qwindowsnativeinterface.cpp
+++ b/src/gui/platform/windows/qwindowsnativeinterface.cpp
@@ -3,7 +3,6 @@
#include <QtGui/qopenglcontext.h>
#include <QtGui/private/qguiapplication_p.h>
-#include <QtGui/private/qwindowsmime_p.h>
#include <qpa/qplatformopenglcontext.h>
#include <qpa/qplatformintegration.h>
#include <qpa/qplatformwindow.h>
@@ -218,21 +217,21 @@ QT_DEFINE_PRIVATE_NATIVE_INTERFACE(QWindowsScreen);
*/
/*!
- \fn bool QNativeInterface::Private::QWindowsApplication::registerMime(QWindowsMime *mime)
+ \fn bool QNativeInterface::Private::QWindowsApplication::registerMime(QWindowsMimeConverter *mime)
\internal
Registers the converter \a mime to the system.
- \sa QNativeInterface::Private::QWindowsMime, unregisterMime()
+ \sa QWindowsMimeConverter, unregisterMime()
*/
/*!
- \fn void QNativeInterface::Private::QWindowsApplication::unregisterMime(QWindowsMime *mime)
+ \fn void QNativeInterface::Private::QWindowsApplication::unregisterMime(QWindowsMimeConverter *mime)
\internal
Unregisters the converter \a mime from the system.
- \sa QNativeInterface::Private::QWindowsMime, registerMime()
+ \sa QWindowsMimeConverter, registerMime()
*/
/*!