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 <joerg.bornemann@digia.com>
bb10
Friedemann Kleint 2014-06-13 14:20:30 +02:00
parent afc8e4cda7
commit bc96954aef
4 changed files with 33 additions and 4 deletions

View File

@ -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

View File

@ -89,12 +89,14 @@ public:
QVariant convertToMime(const QStringList &mimeTypes, IDataObject *pDataObj, QVariant::Type preferredType,
QString *format = 0) const;
private:
typedef QSharedPointer<QWindowsMime> MimePtr;
void registerMime(QWindowsMime *mime);
void unregisterMime(QWindowsMime *mime) { m_mimes.removeOne(mime); }
private:
void ensureInitialized() const;
mutable QList<QWindowsMime *> m_mimes;
mutable int m_internalMimeCount;
};
QT_END_NAMESPACE

View File

@ -44,6 +44,7 @@
#include "qwindowscontext.h"
#include "qwindowsopenglcontext.h"
#include "qwindowsintegration.h"
#include "qwindowsmime.h"
#include <QtGui/QWindow>
#include <QtGui/QOpenGLContext>
@ -172,4 +173,19 @@ 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);
}
QT_END_NAMESPACE

View File

@ -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);