kio_fonts: fix the thumbnails creation by tweaking the USEntry fields

- Set the fancy name, e.g. "Foo, Bold Italic", as UDS_DISPLAY_NAME
- Set the actual file name, e.g. foo-bold.ttf, as UDS_NAME
- Set the actual file url, e.g. /usr/share/fonts/truetype/foo-bold.ttf as UDS_URL

Setting the UDS_URL fixes font thumbnail creation when using kio_fonts.
And IIUC, also avoids calling get() on "font:/" urls, the files are already
local; setting the UDS_URL makes all the font previews work on my system
at least.

BUG: 234754
FIXED-IN: 5.23
wilder-5.24
Ahmad Samir 5 years ago
parent ffa1baa6d4
commit 6ae36d4b50
  1. 33
      kcms/kfontinst/kio/KioFonts.cpp

@ -617,18 +617,20 @@ bool CKioFonts::createUDSEntry(KIO::UDSEntry &entry, EFolder folder, const Famil
entry.clear();
entry.fastInsert(KIO::UDSEntry::UDS_NAME, name);
entry.fastInsert(KIO::UDSEntry::UDS_DISPLAY_NAME, name);
entry.fastInsert(KIO::UDSEntry::UDS_SIZE, size);
entry.fastInsert(UDS_EXTRA_FC_STYLE, style.value());
QList<File>::ConstIterator it(files.constBegin()), end(files.constEnd());
for (; it != end; ++it) {
QByteArray cPath(QFile::encodeName((*it).path()));
const QString fontPath = it->path();
QByteArray cPath(QFile::encodeName(fontPath));
QT_STATBUF buff;
if (-1 != QT_LSTAT(cPath, &buff)) {
QString fileName(Misc::getFile((*it).path())), mt;
const QString fileName = Misc::getFile(fontPath);
QString mt;
int dotPos(fileName.lastIndexOf('.'));
QString extension(-1 == dotPos ? QString() : fileName.mid(dotPos));
@ -650,7 +652,7 @@ bool CKioFonts::createUDSEntry(KIO::UDSEntry &entry, EFolder folder, const Famil
else {
// File extension check failed, use QMimeDatabase to read contents...
QMimeDatabase db;
QMimeType mime = db.mimeTypeForFile((*it).path());
QMimeType mime = db.mimeTypeForFile(fontPath);
QStringList patterns = mime.globPatterns();
mt = mime.name();
if (patterns.size() > 0)
@ -664,29 +666,16 @@ bool CKioFonts::createUDSEntry(KIO::UDSEntry &entry, EFolder folder, const Famil
entry.fastInsert(KIO::UDSEntry::UDS_USER, getUserName(buff.st_uid));
entry.fastInsert(KIO::UDSEntry::UDS_GROUP, getGroupName(buff.st_gid));
entry.fastInsert(KIO::UDSEntry::UDS_MIME_TYPE, mt);
const QUrl entryUrl = QUrl::fromLocalFile(fontPath);
entry.fastInsert(KIO::UDSEntry::UDS_URL, entryUrl.toDisplayString());
entry.fastInsert(KIO::UDSEntry::UDS_NAME, entryUrl.fileName());
if (hidden) {
entry.fastInsert(KIO::UDSEntry::UDS_HIDDEN, 1);
entry.fastInsert(UDS_EXTRA_FILE_NAME, (*it).path());
entry.fastInsert(UDS_EXTRA_FILE_FACE, (*it).path());
entry.fastInsert(UDS_EXTRA_FILE_NAME, fontPath);
entry.fastInsert(UDS_EXTRA_FILE_FACE, fontPath);
}
QString path(QString::fromLatin1("/"));
if (!Misc::root()) {
path += FOLDER_SYS == folder ? i18n(KFI_KIO_FONTS_SYS) : i18n(KFI_KIO_FONTS_USER);
path += QString::fromLatin1("/");
}
path += name;
if (files.count() > 1 || haveExtraFiles)
path += QString::fromLatin1(KFI_FONTS_PACKAGE);
else
path += extension;
QUrl url(QUrl::fromLocalFile(path));
url.setScheme(KFI_KIO_FONTS_PROTOCOL);
entry.fastInsert(KIO::UDSEntry::UDS_URL, url.url());
return true;
}
}

Loading…
Cancel
Save