blob: eb953bbf08844e8925aa00c11a155ab5c6d6d64f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
// 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
#include <QtCore/qmimedata.h>
#include "qmacmime_p.h"
#include "qmacmimeregistry_p.h"
#include "qguiapplication.h"
#include "private/qcore_mac_p.h"
QT_BEGIN_NAMESPACE
using namespace Qt::StringLiterals;
namespace QMacMimeRegistry {
typedef QList<QMacMime*> MimeList;
Q_GLOBAL_STATIC(MimeList, globalMimeList)
Q_GLOBAL_STATIC(QStringList, globalDraggedTypesList)
// implemented in qmacmime.mm
void registerBuiltInTypes();
/*!
\fn void qRegisterDraggedTypes(const QStringList &types)
\relates QMacMime
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
drag and drop is enabled for all standard pasteboard types.
\sa QMacMime
*/
void registerDraggedTypes(const QStringList &types)
{
(*globalDraggedTypesList()) += types;
}
const QStringList& enabledDraggedTypes()
{
return (*globalDraggedTypesList());
}
/*****************************************************************************
QDnD debug facilities
*****************************************************************************/
//#define DEBUG_MIME_MAPS
/*!
\class QMacMimeRegistry
\internal
\ingroup draganddrop
*/
/*!
\internal
This is an internal function.
*/
void initializeMimeTypes()
{
if (globalMimeList()->isEmpty())
registerBuiltInTypes();
}
/*!
\internal
*/
void destroyMimeTypes()
{
MimeList *mimes = globalMimeList();
while (!mimes->isEmpty())
delete mimes->takeFirst();
}
/*
Returns a MIME type of for scope \a scope for \a flav, or \nullptr if none exists.
*/
QString flavorToMime(QMacMime::HandlerScope scope, const QString &flav)
{
MimeList *mimes = globalMimeList();
for (MimeList::const_iterator it = mimes->constBegin(); it != mimes->constEnd(); ++it) {
const bool relevantScope = uchar((*it)->scope()) & uchar(scope);
#ifdef DEBUG_MIME_MAPS
qDebug("QMacMimeRegistry::flavorToMime: attempting (%d) for flavor %s [%s]",
relevantScope, qPrintable(flav), qPrintable((*it)->mimeForFlavor(flav)));
#endif
if (relevantScope) {
QString mimeType = (*it)->mimeForFlavor(flav);
if (!mimeType.isNull())
return mimeType;
}
}
return QString();
}
void registerMimeConverter(QMacMime *macMime)
{
// globalMimeList is in decreasing priority order. Recently added
// converters take prioity over previously added converters: prepend
// to the list.
globalMimeList()->prepend(macMime);
}
void unregisterMimeConverter(QMacMime *macMime)
{
if (!QGuiApplication::closingDown())
globalMimeList()->removeAll(macMime);
}
/*
Returns a list of all currently defined QMacMime objects for scope \a scope.
*/
QList<QMacMime *> all(QMacMime::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));
}
return ret;
}
} // namespace QMacMimeRegistry
QT_END_NAMESPACE
|