83 qsizetype newLineIndex = -1;
85 const char *begin = text.data();
86 while ((newLineIndex = text.indexOf(
'\n', from)) != -1) {
87 const auto bav = QByteArrayView(begin + from, begin + newLineIndex).trimmed();
89 list.push_back(QUrl::fromEncoded(bav));
90 from = newLineIndex + 1;
91 if (from >= text.size())
94 if (from != text.size()) {
95 const auto bav = QByteArrayView(begin + from, text.end()).trimmed();
97 list.push_back(QUrl::fromEncoded(bav));
104 Q_Q(
const QMimeData);
105 int typeId = type.id();
107 QVariant data = q->retrieveData(format, type);
110 if (format ==
"text/plain"_L1 && !data.isValid()) {
111 data = retrieveTypedData(textUriListLiteral(), QMetaType(QMetaType::QVariantList));
112 if (
const QUrl *url = get_if<QUrl>(&std::as_const(data))) {
113 data = QVariant(url->toDisplayString());
114 }
else if (
const QVariantList *list = get_if<QVariantList>(&std::as_const(data))) {
117 for (
const auto &element : *list) {
118 if (
const QUrl *url = get_if<QUrl>(&element)) {
119 text += url->toDisplayString();
126 data = QVariant(text);
130 if (data.metaType() == type || !data.isValid())
136 if ((typeId == QMetaType::QUrl && data.metaType().id() == QMetaType::QVariantList)
137 || (typeId == QMetaType::QVariantList && data.metaType().id() == QMetaType::QUrl))
141 if ((typeId == QMetaType::QPixmap && data.metaType().id() == QMetaType::QImage)
142 || (typeId == QMetaType::QImage && data.metaType().id() == QMetaType::QPixmap))
145 if (
const QByteArray *ba = get_if<QByteArray>(&std::as_const(data))) {
148 case QMetaType::QString: {
151 if (format ==
"text/html"_L1) {
153 if (decoder.isValid()) {
154 return QString(decoder(*ba));
158 return QString::fromUtf8(*ba);
160 case QMetaType::QColor: {
161 QVariant newData = data;
162 newData.convert(QMetaType(QMetaType::QColor));
165 case QMetaType::QVariantList: {
166 if (format !=
"text/uri-list"_L1)
170 case QMetaType::QUrl: {
171 auto bav = data.view<QByteArrayView>();
175 if (bav.endsWith(
'\0'))
177 return dataToUrls(bav);
183 }
else if (typeId == QMetaType::QByteArray) {
186 switch (data.metaType().id()) {
187 case QMetaType::QByteArray:
188 case QMetaType::QColor:
189 return data.toByteArray();
190 case QMetaType::QString:
191 return data.toString().toUtf8();
192 case QMetaType::QUrl:
193 return data.toUrl().toEncoded();
194 case QMetaType::QVariantList: {
197 const QList<QVariant> list = data.toList();
198 for (
const auto &element : list) {
199 if (
const QUrl *url = get_if<QUrl>(&element)) {
200 result += url->toEncoded();
204 if (!result.isEmpty())
327QList<QUrl> QMimeData::urls()
const
329 Q_D(
const QMimeData);
330 const QVariant data = d->retrieveTypedData(textUriListLiteral(), QMetaType(QMetaType::QVariantList));
332 if (
const QUrl *url = get_if<QUrl>(&data)) {
334 }
else if (
const QVariantList *list = get_if<QVariantList>(&data)) {
335 for (
const auto &element : *list) {
336 if (
const QUrl *url = get_if<QUrl>(&element))