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)
|
||||
{
|
||||
MimeList *mimes = globalMimeList();
|
||||
for (MimeList::const_iterator it = mimes->constBegin(); it != mimes->constEnd(); ++it) {
|
||||
const bool relevantScope = uchar((*it)->scope()) & uchar(scope);
|
||||
const MimeList &mimes = *globalMimeList();
|
||||
for (const auto &mime : mimes) {
|
||||
const bool relevantScope = mime->scope() & scope;
|
||||
#ifdef DEBUG_MIME_MAPS
|
||||
qDebug("QMacMimeRegistry::flavorToMime: attempting (%d) for uti %s [%s]",
|
||||
relevantScope, qPrintable(uti), qPrintable((*it)->mimeForUti(uti)));
|
||||
#endif
|
||||
if (relevantScope) {
|
||||
QString mimeType = (*it)->mimeForUti(uti);
|
||||
const QString mimeType = mime->mimeForUti(uti);
|
||||
if (!mimeType.isNull())
|
||||
return mimeType;
|
||||
}
|
||||
@ -119,11 +119,10 @@ void unregisterMimeConverter(QUtiMimeConverter *macMime)
|
||||
QList<QUtiMimeConverter *> all(QUtiMimeConverter::HandlerScope scope)
|
||||
{
|
||||
MimeList ret;
|
||||
MimeList *mimes = globalMimeList();
|
||||
for (MimeList::const_iterator it = mimes->constBegin(); it != mimes->constEnd(); ++it) {
|
||||
const bool relevantScope = uchar((*it)->scope()) & uchar(scope);
|
||||
if (relevantScope)
|
||||
ret.append((*it));
|
||||
const MimeList &mimes = *globalMimeList();
|
||||
for (const auto &mime : mimes) {
|
||||
if (mime->scope() & scope)
|
||||
ret.append(mime);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
@ -19,7 +19,7 @@ class Q_GUI_EXPORT QUtiMimeConverter
|
||||
{
|
||||
Q_DISABLE_COPY(QUtiMimeConverter)
|
||||
public:
|
||||
enum class HandlerScope : uchar
|
||||
enum class HandlerScopeFlag : uint8_t
|
||||
{
|
||||
DnD = 0x01,
|
||||
Clipboard = 0x02,
|
||||
@ -28,9 +28,9 @@ public:
|
||||
All = DnD|Clipboard,
|
||||
AllCompatible = All|Qt_compatible
|
||||
};
|
||||
Q_DECLARE_FLAGS(HandlerScope, HandlerScopeFlag)
|
||||
|
||||
QUtiMimeConverter();
|
||||
explicit QUtiMimeConverter(HandlerScope scope); // internal
|
||||
virtual ~QUtiMimeConverter();
|
||||
|
||||
HandlerScope scope() const { return m_scope; }
|
||||
@ -46,8 +46,15 @@ public:
|
||||
virtual int count(const QMimeData *mimeData) const;
|
||||
|
||||
private:
|
||||
friend class QMacMimeTypeName;
|
||||
friend class QMacMimeAny;
|
||||
|
||||
explicit QUtiMimeConverter(HandlerScope scope);
|
||||
|
||||
const HandlerScope m_scope;
|
||||
};
|
||||
Q_DECLARE_OPERATORS_FOR_FLAGS(QUtiMimeConverter::HandlerScope)
|
||||
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
|
@ -96,7 +96,7 @@ QUtiMimeConverter::QUtiMimeConverter(HandlerScope scope)
|
||||
globally accessed list of available converters.
|
||||
*/
|
||||
QUtiMimeConverter::QUtiMimeConverter()
|
||||
: QUtiMimeConverter(HandlerScope::All)
|
||||
: QUtiMimeConverter(HandlerScopeFlag::All)
|
||||
{
|
||||
}
|
||||
|
||||
@ -170,7 +170,7 @@ int QUtiMimeConverter::count(const QMimeData *mimeData) const
|
||||
|
||||
class QMacMimeAny : public QUtiMimeConverter {
|
||||
public:
|
||||
QMacMimeAny() : QUtiMimeConverter(HandlerScope::AllCompatible) {}
|
||||
QMacMimeAny() : QUtiMimeConverter(HandlerScopeFlag::AllCompatible) {}
|
||||
|
||||
QString utiForMime(const QString &mime) const override;
|
||||
QString mimeForUti(const QString &uti) const override;
|
||||
@ -225,7 +225,7 @@ class QMacMimeTypeName : public QUtiMimeConverter {
|
||||
private:
|
||||
|
||||
public:
|
||||
QMacMimeTypeName(): QUtiMimeConverter(HandlerScope::AllCompatible) {}
|
||||
QMacMimeTypeName(): QUtiMimeConverter(HandlerScopeFlag::AllCompatible) {}
|
||||
|
||||
QString utiForMime(const QString &mime) const override;
|
||||
QString mimeForUti(const QString &uti) const override;
|
||||
|
@ -10,8 +10,8 @@
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
QCocoaClipboard::QCocoaClipboard()
|
||||
:m_clipboard(new QMacPasteboard(kPasteboardClipboard, QUtiMimeConverter::HandlerScope::Clipboard))
|
||||
,m_find(new QMacPasteboard(kPasteboardFind, QUtiMimeConverter::HandlerScope::Clipboard))
|
||||
:m_clipboard(new QMacPasteboard(kPasteboardClipboard, QUtiMimeConverter::HandlerScopeFlag::Clipboard))
|
||||
,m_find(new QMacPasteboard(kPasteboardFind, QUtiMimeConverter::HandlerScopeFlag::Clipboard))
|
||||
{
|
||||
connect(qGuiApp, &QGuiApplication::applicationStateChanged, this, &QCocoaClipboard::handleApplicationStateChanged);
|
||||
}
|
||||
|
@ -98,7 +98,7 @@ Qt::DropAction QCocoaDrag::drag(QDrag *o)
|
||||
m_drag = o;
|
||||
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"));
|
||||
dragBoard.setMimeData(m_drag->mimeData(), QMacPasteboard::LazyRequest);
|
||||
|
||||
@ -305,7 +305,7 @@ QStringList QCocoaDropData::formats_sys() const
|
||||
qDebug("DnD: Cannot get PasteBoard!");
|
||||
return formats;
|
||||
}
|
||||
formats = QMacPasteboard(board, QUtiMimeConverter::HandlerScope::DnD).formats();
|
||||
formats = QMacPasteboard(board, QUtiMimeConverter::HandlerScopeFlag::DnD).formats();
|
||||
return formats;
|
||||
}
|
||||
|
||||
@ -317,7 +317,7 @@ QVariant QCocoaDropData::retrieveData_sys(const QString &mimeType, QMetaType) co
|
||||
qDebug("DnD: Cannot get PasteBoard!");
|
||||
return data;
|
||||
}
|
||||
data = QMacPasteboard(board, QUtiMimeConverter::HandlerScope::DnD).retrieveData(mimeType);
|
||||
data = QMacPasteboard(board, QUtiMimeConverter::HandlerScopeFlag::DnD).retrieveData(mimeType);
|
||||
CFRelease(board);
|
||||
return data;
|
||||
}
|
||||
@ -330,7 +330,7 @@ bool QCocoaDropData::hasFormat_sys(const QString &mimeType) const
|
||||
qDebug("DnD: Cannot get PasteBoard!");
|
||||
return has;
|
||||
}
|
||||
has = QMacPasteboard(board, QUtiMimeConverter::HandlerScope::DnD).hasFormat(mimeType);
|
||||
has = QMacPasteboard(board, QUtiMimeConverter::HandlerScopeFlag::DnD).hasFormat(mimeType);
|
||||
CFRelease(board);
|
||||
return has;
|
||||
}
|
||||
|
@ -48,9 +48,9 @@ private:
|
||||
static OSStatus promiseKeeper(PasteboardRef, PasteboardItemID, CFStringRef, void *);
|
||||
void clear_helper();
|
||||
public:
|
||||
QMacPasteboard(PasteboardRef p, QUtiMimeConverter::HandlerScope scope = QUtiMimeConverter::HandlerScope::All);
|
||||
QMacPasteboard(PasteboardRef p, QUtiMimeConverter::HandlerScope scope = QUtiMimeConverter::HandlerScopeFlag::All);
|
||||
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();
|
||||
|
||||
bool hasUti(const QString &uti) const;
|
||||
|
@ -111,7 +111,7 @@ QMacPasteboard::~QMacPasteboard()
|
||||
Commit all promises for paste when shutting down,
|
||||
unless we are the stack-allocated clipboard used by QCocoaDrag.
|
||||
*/
|
||||
if (scope == QUtiMimeConverter::HandlerScope::DnD)
|
||||
if (scope == QUtiMimeConverter::HandlerScopeFlag::DnD)
|
||||
resolvingBeforeDestruction = true;
|
||||
PasteboardResolvePromises(paste);
|
||||
if (paste)
|
||||
@ -130,7 +130,7 @@ OSStatus QMacPasteboard::promiseKeeper(PasteboardRef paste, PasteboardItemID id,
|
||||
const long promise_id = (long)id;
|
||||
|
||||
// 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);
|
||||
QMacPasteboard::Promise promise;
|
||||
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) {
|
||||
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))
|
||||
foundMimeTypes << mimeType;
|
||||
}
|
||||
@ -130,7 +130,7 @@ QVariant QIOSMimeData::retrieveData(const QString &mimeType, QMetaType) const
|
||||
UIPasteboard *pb = [UIPasteboard pasteboardWithQClipboardMode:m_mode];
|
||||
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 (NSUInteger i = 0; i < [pasteboardTypes count]; ++i) {
|
||||
NSString *availableUtiNSString = [pasteboardTypes objectAtIndex:i];
|
||||
@ -183,7 +183,7 @@ void QIOSClipboard::setMimeData(QMimeData *mimeData, QClipboard::Mode mode)
|
||||
|
||||
const auto formats = mimeData->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) {
|
||||
const QString uti = converter->utiForMime(mimeType);
|
||||
if (uti.isEmpty())
|
||||
|
Loading…
x
Reference in New Issue
Block a user