From bc96954aef67246bf90e51328eae8f96f03fd74e Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Fri, 13 Jun 2014 14:20:30 +0200 Subject: Windows: Expose helper functions for QWindowsMime to the native interface. Enable QWindowsMimeConverter to use external mime handlers which it does not own. Task-number: QTBUG-39559 Change-Id: Ife6607dffd9571fa4aa12fffdc61b42662182b0a Reviewed-by: Joerg Bornemann --- src/plugins/platforms/windows/qwindowsmime.cpp | 11 +++++++++-- src/plugins/platforms/windows/qwindowsmime.h | 6 ++++-- .../platforms/windows/qwindowsnativeinterface.cpp | 16 ++++++++++++++++ src/plugins/platforms/windows/qwindowsnativeinterface.h | 4 ++++ 4 files changed, 33 insertions(+), 4 deletions(-) (limited to 'src/plugins/platforms/windows') diff --git a/src/plugins/platforms/windows/qwindowsmime.cpp b/src/plugins/platforms/windows/qwindowsmime.cpp index 3af2cff9a0..0343b7f110 100644 --- a/src/plugins/platforms/windows/qwindowsmime.cpp +++ b/src/plugins/platforms/windows/qwindowsmime.cpp @@ -1442,13 +1442,13 @@ QString QLastResortMimes::mimeForFormat(const FORMATETC &formatetc) const \sa QWindowsMime */ -QWindowsMimeConverter::QWindowsMimeConverter() +QWindowsMimeConverter::QWindowsMimeConverter() : m_internalMimeCount(0) { } QWindowsMimeConverter::~QWindowsMimeConverter() { - qDeleteAll(m_mimes); + qDeleteAll(m_mimes.begin(), m_mimes.begin() + m_internalMimeCount); } QWindowsMime * QWindowsMimeConverter::converterToMime(const QString &mimeType, IDataObject *pDataObj) const @@ -1526,6 +1526,7 @@ void QWindowsMimeConverter::ensureInitialized() const m_mimes << new QWindowsMimeImage << new QLastResortMimes << new QWindowsMimeText << new QWindowsMimeURI << new QWindowsMimeHtml << new QBuiltInMimes; + m_internalMimeCount = m_mimes.size(); } } @@ -1552,4 +1553,10 @@ QVariant QWindowsMimeConverter::convertToMime(const QStringList &mimeTypes, return QVariant(); } +void QWindowsMimeConverter::registerMime(QWindowsMime *mime) +{ + ensureInitialized(); + m_mimes.append(mime); +} + QT_END_NAMESPACE diff --git a/src/plugins/platforms/windows/qwindowsmime.h b/src/plugins/platforms/windows/qwindowsmime.h index cd0fb4d8b3..e2818422bf 100644 --- a/src/plugins/platforms/windows/qwindowsmime.h +++ b/src/plugins/platforms/windows/qwindowsmime.h @@ -89,12 +89,14 @@ public: QVariant convertToMime(const QStringList &mimeTypes, IDataObject *pDataObj, QVariant::Type preferredType, QString *format = 0) const; -private: - typedef QSharedPointer MimePtr; + void registerMime(QWindowsMime *mime); + void unregisterMime(QWindowsMime *mime) { m_mimes.removeOne(mime); } +private: void ensureInitialized() const; mutable QList m_mimes; + mutable int m_internalMimeCount; }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/windows/qwindowsnativeinterface.cpp b/src/plugins/platforms/windows/qwindowsnativeinterface.cpp index 7d274f330f..8ec1d8eb2f 100644 --- a/src/plugins/platforms/windows/qwindowsnativeinterface.cpp +++ b/src/plugins/platforms/windows/qwindowsnativeinterface.cpp @@ -44,6 +44,7 @@ #include "qwindowscontext.h" #include "qwindowsopenglcontext.h" #include "qwindowsintegration.h" +#include "qwindowsmime.h" #include #include @@ -172,4 +173,19 @@ void QWindowsNativeInterface::setAsyncExpose(bool value) QWindowsContext::instance()->setAsyncExpose(value); } +void QWindowsNativeInterface::registerWindowsMime(void *mimeIn) +{ + QWindowsContext::instance()->mimeConverter().registerMime(reinterpret_cast(mimeIn)); +} + +void QWindowsNativeInterface::unregisterWindowsMime(void *mimeIn) +{ + QWindowsContext::instance()->mimeConverter().unregisterMime(reinterpret_cast(mimeIn)); +} + +int QWindowsNativeInterface::registerMimeType(const QString &mimeType) +{ + return QWindowsMime::registerMimeType(mimeType); +} + QT_END_NAMESPACE diff --git a/src/plugins/platforms/windows/qwindowsnativeinterface.h b/src/plugins/platforms/windows/qwindowsnativeinterface.h index a8fbf4fd2c..1afa0571a0 100644 --- a/src/plugins/platforms/windows/qwindowsnativeinterface.h +++ b/src/plugins/platforms/windows/qwindowsnativeinterface.h @@ -82,6 +82,10 @@ public: Q_INVOKABLE void beep() { MessageBeep(MB_OK); } // For QApplication + Q_INVOKABLE void registerWindowsMime(void *mimeIn); + Q_INVOKABLE void unregisterWindowsMime(void *mime); + Q_INVOKABLE int registerMimeType(const QString &mimeType); + bool asyncExpose() const; void setAsyncExpose(bool value); -- cgit v1.2.3