Clean up QUtiMimeConverter API
Based on header review comments, make the internal constructor private and declare classes that need it as friends. QFlag-ify the HandlerScope enum, as it is a list of flags, and adjust code accordingly. Change-Id: I1d8843265e49e696d463e9eea8306f4dbae75c78 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> (cherry picked from commit 1dc5e20c16353476ee4b449343a8fbe78a9ac7d8) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
0134e56859
commit
ce89ab80da
@ -82,15 +82,15 @@ void destroyMimeTypes()
|
|||||||
*/
|
*/
|
||||||
QString flavorToMime(QUtiMimeConverter::HandlerScope scope, const QString &uti)
|
QString flavorToMime(QUtiMimeConverter::HandlerScope scope, const QString &uti)
|
||||||
{
|
{
|
||||||
MimeList *mimes = globalMimeList();
|
const MimeList &mimes = *globalMimeList();
|
||||||
for (MimeList::const_iterator it = mimes->constBegin(); it != mimes->constEnd(); ++it) {
|
for (const auto &mime : mimes) {
|
||||||
const bool relevantScope = uchar((*it)->scope()) & uchar(scope);
|
const bool relevantScope = mime->scope() & scope;
|
||||||
#ifdef DEBUG_MIME_MAPS
|
#ifdef DEBUG_MIME_MAPS
|
||||||
qDebug("QMacMimeRegistry::flavorToMime: attempting (%d) for uti %s [%s]",
|
qDebug("QMacMimeRegistry::flavorToMime: attempting (%d) for uti %s [%s]",
|
||||||
relevantScope, qPrintable(uti), qPrintable((*it)->mimeForUti(uti)));
|
relevantScope, qPrintable(uti), qPrintable((*it)->mimeForUti(uti)));
|
||||||
#endif
|
#endif
|
||||||
if (relevantScope) {
|
if (relevantScope) {
|
||||||
QString mimeType = (*it)->mimeForUti(uti);
|
const QString mimeType = mime->mimeForUti(uti);
|
||||||
if (!mimeType.isNull())
|
if (!mimeType.isNull())
|
||||||
return mimeType;
|
return mimeType;
|
||||||
}
|
}
|
||||||
@ -119,11 +119,10 @@ void unregisterMimeConverter(QUtiMimeConverter *macMime)
|
|||||||
QList<QUtiMimeConverter *> all(QUtiMimeConverter::HandlerScope scope)
|
QList<QUtiMimeConverter *> all(QUtiMimeConverter::HandlerScope scope)
|
||||||
{
|
{
|
||||||
MimeList ret;
|
MimeList ret;
|
||||||
MimeList *mimes = globalMimeList();
|
const MimeList &mimes = *globalMimeList();
|
||||||
for (MimeList::const_iterator it = mimes->constBegin(); it != mimes->constEnd(); ++it) {
|
for (const auto &mime : mimes) {
|
||||||
const bool relevantScope = uchar((*it)->scope()) & uchar(scope);
|
if (mime->scope() & scope)
|
||||||
if (relevantScope)
|
ret.append(mime);
|
||||||
ret.append((*it));
|
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@ class Q_GUI_EXPORT QUtiMimeConverter
|
|||||||
{
|
{
|
||||||
Q_DISABLE_COPY(QUtiMimeConverter)
|
Q_DISABLE_COPY(QUtiMimeConverter)
|
||||||
public:
|
public:
|
||||||
enum class HandlerScope : uchar
|
enum class HandlerScopeFlag : uint8_t
|
||||||
{
|
{
|
||||||
DnD = 0x01,
|
DnD = 0x01,
|
||||||
Clipboard = 0x02,
|
Clipboard = 0x02,
|
||||||
@ -28,9 +28,9 @@ public:
|
|||||||
All = DnD|Clipboard,
|
All = DnD|Clipboard,
|
||||||
AllCompatible = All|Qt_compatible
|
AllCompatible = All|Qt_compatible
|
||||||
};
|
};
|
||||||
|
Q_DECLARE_FLAGS(HandlerScope, HandlerScopeFlag)
|
||||||
|
|
||||||
QUtiMimeConverter();
|
QUtiMimeConverter();
|
||||||
explicit QUtiMimeConverter(HandlerScope scope); // internal
|
|
||||||
virtual ~QUtiMimeConverter();
|
virtual ~QUtiMimeConverter();
|
||||||
|
|
||||||
HandlerScope scope() const { return m_scope; }
|
HandlerScope scope() const { return m_scope; }
|
||||||
@ -46,8 +46,15 @@ public:
|
|||||||
virtual int count(const QMimeData *mimeData) const;
|
virtual int count(const QMimeData *mimeData) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
friend class QMacMimeTypeName;
|
||||||
|
friend class QMacMimeAny;
|
||||||
|
|
||||||
|
explicit QUtiMimeConverter(HandlerScope scope);
|
||||||
|
|
||||||
const HandlerScope m_scope;
|
const HandlerScope m_scope;
|
||||||
};
|
};
|
||||||
|
Q_DECLARE_OPERATORS_FOR_FLAGS(QUtiMimeConverter::HandlerScope)
|
||||||
|
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
@ -96,7 +96,7 @@ QUtiMimeConverter::QUtiMimeConverter(HandlerScope scope)
|
|||||||
globally accessed list of available converters.
|
globally accessed list of available converters.
|
||||||
*/
|
*/
|
||||||
QUtiMimeConverter::QUtiMimeConverter()
|
QUtiMimeConverter::QUtiMimeConverter()
|
||||||
: QUtiMimeConverter(HandlerScope::All)
|
: QUtiMimeConverter(HandlerScopeFlag::All)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -170,7 +170,7 @@ int QUtiMimeConverter::count(const QMimeData *mimeData) const
|
|||||||
|
|
||||||
class QMacMimeAny : public QUtiMimeConverter {
|
class QMacMimeAny : public QUtiMimeConverter {
|
||||||
public:
|
public:
|
||||||
QMacMimeAny() : QUtiMimeConverter(HandlerScope::AllCompatible) {}
|
QMacMimeAny() : QUtiMimeConverter(HandlerScopeFlag::AllCompatible) {}
|
||||||
|
|
||||||
QString utiForMime(const QString &mime) const override;
|
QString utiForMime(const QString &mime) const override;
|
||||||
QString mimeForUti(const QString &uti) const override;
|
QString mimeForUti(const QString &uti) const override;
|
||||||
@ -225,7 +225,7 @@ class QMacMimeTypeName : public QUtiMimeConverter {
|
|||||||
private:
|
private:
|
||||||
|
|
||||||
public:
|
public:
|
||||||
QMacMimeTypeName(): QUtiMimeConverter(HandlerScope::AllCompatible) {}
|
QMacMimeTypeName(): QUtiMimeConverter(HandlerScopeFlag::AllCompatible) {}
|
||||||
|
|
||||||
QString utiForMime(const QString &mime) const override;
|
QString utiForMime(const QString &mime) const override;
|
||||||
QString mimeForUti(const QString &uti) const override;
|
QString mimeForUti(const QString &uti) const override;
|
||||||
|
@ -10,8 +10,8 @@
|
|||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
QCocoaClipboard::QCocoaClipboard()
|
QCocoaClipboard::QCocoaClipboard()
|
||||||
:m_clipboard(new QMacPasteboard(kPasteboardClipboard, QUtiMimeConverter::HandlerScope::Clipboard))
|
:m_clipboard(new QMacPasteboard(kPasteboardClipboard, QUtiMimeConverter::HandlerScopeFlag::Clipboard))
|
||||||
,m_find(new QMacPasteboard(kPasteboardFind, QUtiMimeConverter::HandlerScope::Clipboard))
|
,m_find(new QMacPasteboard(kPasteboardFind, QUtiMimeConverter::HandlerScopeFlag::Clipboard))
|
||||||
{
|
{
|
||||||
connect(qGuiApp, &QGuiApplication::applicationStateChanged, this, &QCocoaClipboard::handleApplicationStateChanged);
|
connect(qGuiApp, &QGuiApplication::applicationStateChanged, this, &QCocoaClipboard::handleApplicationStateChanged);
|
||||||
}
|
}
|
||||||
|
@ -98,7 +98,7 @@ Qt::DropAction QCocoaDrag::drag(QDrag *o)
|
|||||||
m_drag = o;
|
m_drag = o;
|
||||||
m_executed_drop_action = Qt::IgnoreAction;
|
m_executed_drop_action = Qt::IgnoreAction;
|
||||||
|
|
||||||
QMacPasteboard dragBoard(CFStringRef(NSPasteboardNameDrag), QUtiMimeConverter::HandlerScope::DnD);
|
QMacPasteboard dragBoard(CFStringRef(NSPasteboardNameDrag), QUtiMimeConverter::HandlerScopeFlag::DnD);
|
||||||
m_drag->mimeData()->setData("application/x-qt-mime-type-name"_L1, QByteArray("dummy"));
|
m_drag->mimeData()->setData("application/x-qt-mime-type-name"_L1, QByteArray("dummy"));
|
||||||
dragBoard.setMimeData(m_drag->mimeData(), QMacPasteboard::LazyRequest);
|
dragBoard.setMimeData(m_drag->mimeData(), QMacPasteboard::LazyRequest);
|
||||||
|
|
||||||
@ -305,7 +305,7 @@ QStringList QCocoaDropData::formats_sys() const
|
|||||||
qDebug("DnD: Cannot get PasteBoard!");
|
qDebug("DnD: Cannot get PasteBoard!");
|
||||||
return formats;
|
return formats;
|
||||||
}
|
}
|
||||||
formats = QMacPasteboard(board, QUtiMimeConverter::HandlerScope::DnD).formats();
|
formats = QMacPasteboard(board, QUtiMimeConverter::HandlerScopeFlag::DnD).formats();
|
||||||
return formats;
|
return formats;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -317,7 +317,7 @@ QVariant QCocoaDropData::retrieveData_sys(const QString &mimeType, QMetaType) co
|
|||||||
qDebug("DnD: Cannot get PasteBoard!");
|
qDebug("DnD: Cannot get PasteBoard!");
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
data = QMacPasteboard(board, QUtiMimeConverter::HandlerScope::DnD).retrieveData(mimeType);
|
data = QMacPasteboard(board, QUtiMimeConverter::HandlerScopeFlag::DnD).retrieveData(mimeType);
|
||||||
CFRelease(board);
|
CFRelease(board);
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
@ -330,7 +330,7 @@ bool QCocoaDropData::hasFormat_sys(const QString &mimeType) const
|
|||||||
qDebug("DnD: Cannot get PasteBoard!");
|
qDebug("DnD: Cannot get PasteBoard!");
|
||||||
return has;
|
return has;
|
||||||
}
|
}
|
||||||
has = QMacPasteboard(board, QUtiMimeConverter::HandlerScope::DnD).hasFormat(mimeType);
|
has = QMacPasteboard(board, QUtiMimeConverter::HandlerScopeFlag::DnD).hasFormat(mimeType);
|
||||||
CFRelease(board);
|
CFRelease(board);
|
||||||
return has;
|
return has;
|
||||||
}
|
}
|
||||||
|
@ -48,9 +48,9 @@ private:
|
|||||||
static OSStatus promiseKeeper(PasteboardRef, PasteboardItemID, CFStringRef, void *);
|
static OSStatus promiseKeeper(PasteboardRef, PasteboardItemID, CFStringRef, void *);
|
||||||
void clear_helper();
|
void clear_helper();
|
||||||
public:
|
public:
|
||||||
QMacPasteboard(PasteboardRef p, QUtiMimeConverter::HandlerScope scope = QUtiMimeConverter::HandlerScope::All);
|
QMacPasteboard(PasteboardRef p, QUtiMimeConverter::HandlerScope scope = QUtiMimeConverter::HandlerScopeFlag::All);
|
||||||
QMacPasteboard(QUtiMimeConverter::HandlerScope scope);
|
QMacPasteboard(QUtiMimeConverter::HandlerScope scope);
|
||||||
QMacPasteboard(CFStringRef name=nullptr, QUtiMimeConverter::HandlerScope scope = QUtiMimeConverter::HandlerScope::All);
|
QMacPasteboard(CFStringRef name=nullptr, QUtiMimeConverter::HandlerScope scope = QUtiMimeConverter::HandlerScopeFlag::All);
|
||||||
~QMacPasteboard();
|
~QMacPasteboard();
|
||||||
|
|
||||||
bool hasUti(const QString &uti) const;
|
bool hasUti(const QString &uti) const;
|
||||||
|
@ -111,7 +111,7 @@ QMacPasteboard::~QMacPasteboard()
|
|||||||
Commit all promises for paste when shutting down,
|
Commit all promises for paste when shutting down,
|
||||||
unless we are the stack-allocated clipboard used by QCocoaDrag.
|
unless we are the stack-allocated clipboard used by QCocoaDrag.
|
||||||
*/
|
*/
|
||||||
if (scope == QUtiMimeConverter::HandlerScope::DnD)
|
if (scope == QUtiMimeConverter::HandlerScopeFlag::DnD)
|
||||||
resolvingBeforeDestruction = true;
|
resolvingBeforeDestruction = true;
|
||||||
PasteboardResolvePromises(paste);
|
PasteboardResolvePromises(paste);
|
||||||
if (paste)
|
if (paste)
|
||||||
@ -130,7 +130,7 @@ OSStatus QMacPasteboard::promiseKeeper(PasteboardRef paste, PasteboardItemID id,
|
|||||||
const long promise_id = (long)id;
|
const long promise_id = (long)id;
|
||||||
|
|
||||||
// Find the kept promise
|
// Find the kept promise
|
||||||
const QList<QUtiMimeConverter*> availableConverters = QMacMimeRegistry::all(QUtiMimeConverter::HandlerScope::All);
|
const QList<QUtiMimeConverter*> availableConverters = QMacMimeRegistry::all(QUtiMimeConverter::HandlerScopeFlag::All);
|
||||||
const QString utiAsQString = QString::fromCFString(uti);
|
const QString utiAsQString = QString::fromCFString(uti);
|
||||||
QMacPasteboard::Promise promise;
|
QMacPasteboard::Promise promise;
|
||||||
for (int i = 0; i < qpaste->promises.size(); i++){
|
for (int i = 0; i < qpaste->promises.size(); i++){
|
||||||
|
@ -117,7 +117,7 @@ QStringList QIOSMimeData::formats() const
|
|||||||
|
|
||||||
for (NSUInteger i = 0; i < [pasteboardTypes count]; ++i) {
|
for (NSUInteger i = 0; i < [pasteboardTypes count]; ++i) {
|
||||||
const QString uti = QString::fromNSString([pasteboardTypes objectAtIndex:i]);
|
const QString uti = QString::fromNSString([pasteboardTypes objectAtIndex:i]);
|
||||||
const QString mimeType = QMacMimeRegistry::flavorToMime(QUtiMimeConverter::HandlerScope::All, uti);
|
const QString mimeType = QMacMimeRegistry::flavorToMime(QUtiMimeConverter::HandlerScopeFlag::All, uti);
|
||||||
if (!mimeType.isEmpty() && !foundMimeTypes.contains(mimeType))
|
if (!mimeType.isEmpty() && !foundMimeTypes.contains(mimeType))
|
||||||
foundMimeTypes << mimeType;
|
foundMimeTypes << mimeType;
|
||||||
}
|
}
|
||||||
@ -130,7 +130,7 @@ QVariant QIOSMimeData::retrieveData(const QString &mimeType, QMetaType) const
|
|||||||
UIPasteboard *pb = [UIPasteboard pasteboardWithQClipboardMode:m_mode];
|
UIPasteboard *pb = [UIPasteboard pasteboardWithQClipboardMode:m_mode];
|
||||||
NSArray<NSString *> *pasteboardTypes = [pb pasteboardTypes];
|
NSArray<NSString *> *pasteboardTypes = [pb pasteboardTypes];
|
||||||
|
|
||||||
const auto converters = QMacMimeRegistry::all(QUtiMimeConverter::HandlerScope::All);
|
const auto converters = QMacMimeRegistry::all(QUtiMimeConverter::HandlerScopeFlag::All);
|
||||||
for (QUtiMimeConverter *converter : converters) {
|
for (QUtiMimeConverter *converter : converters) {
|
||||||
for (NSUInteger i = 0; i < [pasteboardTypes count]; ++i) {
|
for (NSUInteger i = 0; i < [pasteboardTypes count]; ++i) {
|
||||||
NSString *availableUtiNSString = [pasteboardTypes objectAtIndex:i];
|
NSString *availableUtiNSString = [pasteboardTypes objectAtIndex:i];
|
||||||
@ -183,7 +183,7 @@ void QIOSClipboard::setMimeData(QMimeData *mimeData, QClipboard::Mode mode)
|
|||||||
|
|
||||||
const auto formats = mimeData->formats();
|
const auto formats = mimeData->formats();
|
||||||
for (const QString &mimeType : formats) {
|
for (const QString &mimeType : formats) {
|
||||||
const auto converters = QMacMimeRegistry::all(QUtiMimeConverter::HandlerScope::All);
|
const auto converters = QMacMimeRegistry::all(QUtiMimeConverter::HandlerScopeFlag::All);
|
||||||
for (const QUtiMimeConverter *converter : converters) {
|
for (const QUtiMimeConverter *converter : converters) {
|
||||||
const QString uti = converter->utiForMime(mimeType);
|
const QString uti = converter->utiForMime(mimeType);
|
||||||
if (uti.isEmpty())
|
if (uti.isEmpty())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user