Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:42.1:Ports
kconfig
kconfig-desktop-translations.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File kconfig-desktop-translations.patch of Package kconfig
diff --git a/src/core/kconfig.cpp b/src/core/kconfig.cpp index 3819716..17f9fa4 100644 --- a/src/core/kconfig.cpp +++ b/src/core/kconfig.cpp @@ -956,6 +956,19 @@ QByteArray KConfigPrivate::lookupData(const QByteArray &group, const char *key, return it->mValue; } +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; +} + QString KConfigPrivate::lookupData(const QByteArray &group, const char *key, KEntryMap::SearchFlags flags, bool *expand) const { diff --git a/src/core/kconfig_p.h b/src/core/kconfig_p.h index b93c816..27c28f4 100644 --- a/src/core/kconfig_p.h +++ b/src/core/kconfig_p.h @@ -47,6 +47,7 @@ public: 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); diff --git a/src/core/kconfigdata.h b/src/core/kconfigdata.h index 3b70c24..2d5031a 100644 --- a/src/core/kconfigdata.h +++ b/src/core/kconfigdata.h @@ -180,6 +180,19 @@ public: Iterator findExactEntry(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); + } + Iterator findEntry(const QByteArray &group, const QByteArray &key = QByteArray(), SearchFlags flags = SearchFlags()); diff --git a/src/core/kconfiggroup.cpp b/src/core/kconfiggroup.cpp index e09d602..b214519 100644 --- a/src/core/kconfiggroup.cpp +++ b/src/core/kconfiggroup.cpp @@ -1185,6 +1185,18 @@ bool KConfigGroup::hasKey(const char *key) const 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()); diff --git a/src/core/kconfiggroup.h b/src/core/kconfiggroup.h index 9ddf886..fb7ea3b 100644 --- a/src/core/kconfiggroup.h +++ b/src/core/kconfiggroup.h @@ -623,6 +623,11 @@ public: */ QMap<QString, QString> entryMap() const; + /** + * @internal + */ + bool hasTranslatedKey(const char *key) const; + protected: bool hasGroupImpl(const QByteArray &group) const Q_DECL_OVERRIDE; KConfigGroup groupImpl(const QByteArray &b) Q_DECL_OVERRIDE; diff --git a/src/core/kdesktopfile.cpp b/src/core/kdesktopfile.cpp index 254b59a..f96d158 100644 --- a/src/core/kdesktopfile.cpp +++ b/src/core/kdesktopfile.cpp @@ -29,6 +29,7 @@ #include <QtCore/QFileInfo> #include <QUrl> #include <qstandardpaths.h> +#include <libintl.h> #include "kauthorized.h" #include "kconfig_p.h" @@ -169,6 +169,33 @@ bool KDesktopFile::isAuthorizedDesktopFile(const QString &path) 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); @@ -183,20 +209,17 @@ QString KDesktopFile::readIcon() const 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 diff --git a/src/core/kdesktopfile.h b/src/core/kdesktopfile.h index 2190051..1a11b93 100644 --- a/src/core/kdesktopfile.h +++ b/src/core/kdesktopfile.h @@ -243,6 +243,8 @@ protected: // virtual void virtual_hook( int id, void* data ); private: + QString translatedEntry(const char *) const; + Q_DISABLE_COPY(KDesktopFile) Q_DECLARE_PRIVATE(KDesktopFile)
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor