File kconfig-desktop-translations.patch of Package kconfig
Index: kconfig-5.62.0git.20210306T013509~d5ca63b/src/core/kconfig.cpp
===================================================================
--- kconfig-5.62.0git.20210306T013509~d5ca63b.orig/src/core/kconfig.cpp 2021-03-06 00:35:09.000000000 +0100
+++ kconfig-5.62.0git.20210306T013509~d5ca63b/src/core/kconfig.cpp 2021-03-08 00:03:57.177743371 +0100
@@ -976,6 +976,20 @@
}
}
+QByteArray KConfigPrivate::lookupExactData(const QByteArray &group, const char *key,
+ KEntryMap::SearchFlags flags) const
+{
+ if (bReadDefaults) {
+ flags |= KEntryMap::SearchDefaults;
+ }
+ const KEntryMapConstIterator it = entryMap.findExactEntry(group, key, flags);
+ if (it == entryMap.constEnd()) {
+ return QByteArray();
+ }
+ return it->mValue;
+}
+
+
QByteArray KConfigPrivate::lookupData(const QByteArray &group, const char *key, KEntryMap::SearchFlags flags) const
{
if (bReadDefaults) {
Index: kconfig-5.62.0git.20210306T013509~d5ca63b/src/core/kconfig_p.h
===================================================================
--- kconfig-5.62.0git.20210306T013509~d5ca63b.orig/src/core/kconfig_p.h 2021-03-06 00:35:09.000000000 +0100
+++ kconfig-5.62.0git.20210306T013509~d5ca63b/src/core/kconfig_p.h 2021-03-08 00:03:57.177743371 +0100
@@ -34,6 +34,7 @@
bool canWriteEntry(const QByteArray &group, const char *key, bool isDefault = false) const;
QString lookupData(const QByteArray &group, const char *key, KEntryMap::SearchFlags flags, bool *expand) const;
QByteArray lookupData(const QByteArray &group, const char *key, KEntryMap::SearchFlags flags) const;
+ QByteArray lookupExactData(const QByteArray &group, const char *key, KEntryMap::SearchFlags flags) const;
void putData(const QByteArray &group, const char *key, const QByteArray &value, KConfigBase::WriteConfigFlags flags, bool expand = false);
void revertEntry(const QByteArray &group, const char *key, KConfigBase::WriteConfigFlags flags);
Index: kconfig-5.62.0git.20210306T013509~d5ca63b/src/core/kconfigdata_p.h
===================================================================
--- kconfig-5.62.0git.20210306T013509~d5ca63b.orig/src/core/kconfigdata_p.h 2021-03-06 00:35:09.000000000 +0100
+++ kconfig-5.62.0git.20210306T013509~d5ca63b/src/core/kconfigdata_p.h 2021-03-08 00:03:57.177743371 +0100
@@ -192,6 +192,20 @@
Iterator findEntry(const QByteArray &group, const QByteArray &key = QByteArray(), SearchFlags flags = SearchFlags());
+ ConstIterator findExactEntry(const QByteArray &group, const QByteArray &key = QByteArray(),
+ SearchFlags flags = SearchFlags()) const
+ {
+ KEntryKey theKey(group, key, false, bool(flags & SearchDefaults));
+
+ // try the localized key first
+ if (flags & SearchLocalized) {
+ theKey.bLocal = true;
+ return find(theKey);
+ }
+ return find(theKey);
+ }
+
+
ConstIterator findEntry(const QByteArray &group, const QByteArray &key = QByteArray(), SearchFlags flags = SearchFlags()) const
{
return constFindEntry(group, key, flags);
Index: kconfig-5.62.0git.20210306T013509~d5ca63b/src/core/kconfiggroup.cpp
===================================================================
--- kconfig-5.62.0git.20210306T013509~d5ca63b.orig/src/core/kconfiggroup.cpp 2021-03-06 00:35:09.000000000 +0100
+++ kconfig-5.62.0git.20210306T013509~d5ca63b/src/core/kconfiggroup.cpp 2021-03-08 00:03:57.177743371 +0100
@@ -1162,6 +1162,18 @@
return !config()->d_func()->lookupData(d->fullName(), key, flags).isNull();
}
+bool KConfigGroup::hasTranslatedKey(const char *key) const
+{
+ Q_ASSERT_X(isValid(), "KConfigGroup::hasTranslatedKey", "accessing an invalid group");
+
+ KEntryMap::SearchFlags flags = KEntryMap::SearchLocalized;
+ if (config()->readDefaults()) {
+ flags |= KEntryMap::SearchDefaults;
+ }
+
+ return !config()->d_func()->lookupExactData(d->fullName(), key, flags).isNull();
+}
+
bool KConfigGroup::hasKey(const QString &key) const
{
return hasKey(key.toUtf8().constData());
Index: kconfig-5.62.0git.20210306T013509~d5ca63b/src/core/kconfiggroup.h
===================================================================
--- kconfig-5.62.0git.20210306T013509~d5ca63b.orig/src/core/kconfiggroup.h 2021-03-06 00:35:09.000000000 +0100
+++ kconfig-5.62.0git.20210306T013509~d5ca63b/src/core/kconfiggroup.h 2021-03-08 00:03:57.177743371 +0100
@@ -699,6 +699,11 @@
*/
QMap<QString, QString> entryMap() const;
+ /**
+ * @internal
+ */
+ bool hasTranslatedKey(const char *key) const;
+
protected:
bool hasGroupImpl(const QByteArray &group) const override;
KConfigGroup groupImpl(const QByteArray &b) override;
Index: kconfig-5.62.0git.20210306T013509~d5ca63b/src/core/kdesktopfile.cpp
===================================================================
--- kconfig-5.62.0git.20210306T013509~d5ca63b.orig/src/core/kdesktopfile.cpp 2021-03-06 00:35:09.000000000 +0100
+++ kconfig-5.62.0git.20210306T013509~d5ca63b/src/core/kdesktopfile.cpp 2021-03-08 00:03:57.177743371 +0100
@@ -18,6 +18,7 @@
#include <QFileInfo>
#include <QStandardPaths>
#include <QUrl>
+#include <libintl.h>
#ifndef Q_OS_WIN
#include <unistd.h>
@@ -166,6 +167,33 @@
return false;
}
+QString KDesktopFile::translatedEntry(const char *key) const
+{
+ Q_D(const KDesktopFile);
+ if (d->desktopGroup.hasTranslatedKey(key)) {
+ return d->desktopGroup.readEntry(key);
+ }
+
+ if (d->desktopGroup.hasKey(key)) {
+ QString value = d->desktopGroup.readEntryUntranslated(key);
+ QString fName = fileName();
+ fName = fName.mid(fName.lastIndexOf(QLatin1Char('/'))+1);
+ QString po_lookup_key = QString::fromLatin1(key) + QStringLiteral("(") + fName + QStringLiteral("): ") + value;
+ char *msgid = strdup(po_lookup_key.toUtf8().constData());
+ const char *po_value = dgettext("desktop_translations", msgid);
+
+ if (po_value == msgid) {
+ free(msgid);
+ return value;
+ }
+
+ free(msgid);
+ return QString::fromUtf8(po_value);
+ }
+
+ return QString();
+}
+
QString KDesktopFile::readType() const
{
Q_D(const KDesktopFile);
@@ -180,20 +208,17 @@
QString KDesktopFile::readName() const
{
- Q_D(const KDesktopFile);
- return d->desktopGroup.readEntry("Name", QString());
+ return translatedEntry("Name");
}
QString KDesktopFile::readComment() const
{
- Q_D(const KDesktopFile);
- return d->desktopGroup.readEntry("Comment", QString());
+ return translatedEntry("Comment");
}
QString KDesktopFile::readGenericName() const
{
- Q_D(const KDesktopFile);
- return d->desktopGroup.readEntry("GenericName", QString());
+ return translatedEntry("GenericName");
}
QString KDesktopFile::readPath() const
Index: kconfig-5.62.0git.20210306T013509~d5ca63b/src/core/kdesktopfile.h
===================================================================
--- kconfig-5.62.0git.20210306T013509~d5ca63b.orig/src/core/kdesktopfile.h 2021-03-06 00:35:09.000000000 +0100
+++ kconfig-5.62.0git.20210306T013509~d5ca63b/src/core/kdesktopfile.h 2021-03-08 00:03:57.177743371 +0100
@@ -243,6 +243,9 @@
*/
// virtual void virtual_hook( int id, void* data );
private:
+
+ QString translatedEntry(const char *) const;
+
Q_DISABLE_COPY(KDesktopFile)
Q_DECLARE_PRIVATE(KDesktopFile)