Skip to content

Commit 7988f0f

Browse files
committed
core/desktopentry: pass id prefix to scanDirectory
1 parent f111d1d commit 7988f0f

File tree

2 files changed

+21
-12
lines changed

2 files changed

+21
-12
lines changed

src/core/desktopentry.cpp

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -247,8 +247,8 @@ bool DesktopEntry::isValid() const { return !this->bName.value().isEmpty(); }
247247
QVector<DesktopAction*> DesktopEntry::actions() const { return this->mActions.values(); }
248248

249249
QVector<QString> DesktopEntry::parseExecString(const QString& execString) {
250-
auto arguments = QVector<QString>();
251-
auto currentArgument = QString();
250+
QVector<QString> arguments;
251+
QString currentArgument;
252252
auto parsingString = false;
253253
auto escape = 0;
254254
auto percent = false;
@@ -334,22 +334,28 @@ void DesktopEntryScanner::run() {
334334
auto file = QFileInfo(path);
335335
if (!file.isDir()) continue;
336336

337-
this->scanDirectory(QDir(path), scanResults);
337+
this->scanDirectory(QDir(path), QString(), scanResults);
338338
}
339339

340340
QMetaObject::invokeMethod(
341341
this->manager,
342-
[mgr = this->manager, results = std::move(scanResults)]() { mgr->onScanCompleted(results); },
343-
Qt::QueuedConnection
342+
&DesktopEntryManager::onScanCompleted,
343+
Qt::QueuedConnection,
344+
scanResults
344345
);
345346
}
346347

347-
void DesktopEntryScanner::scanDirectory(const QDir& dir, QList<ParsedDesktopEntryData>& entries) {
348+
void DesktopEntryScanner::scanDirectory(
349+
const QDir& dir,
350+
const QString& idPrefix,
351+
QList<ParsedDesktopEntryData>& entries
352+
) {
348353
auto dirEntries = dir.entryInfoList(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot);
349354

350355
for (auto& entry: dirEntries) {
351356
if (entry.isDir()) {
352-
this->scanDirectory(QDir(entry.absoluteFilePath()), entries);
357+
auto subdirPrefix = idPrefix.isEmpty() ? entry.fileName() : idPrefix + '-' + entry.fileName();
358+
this->scanDirectory(QDir(entry.absoluteFilePath()), subdirPrefix, entries);
353359
} else if (entry.isFile()) {
354360
auto path = entry.filePath();
355361
if (!path.endsWith(".desktop")) {
@@ -363,7 +369,8 @@ void DesktopEntryScanner::scanDirectory(const QDir& dir, QList<ParsedDesktopEntr
363369
continue;
364370
}
365371

366-
auto id = DesktopEntryManager::extractIdFromPath(entry.absoluteFilePath());
372+
auto basename = QFileInfo(entry.fileName()).completeBaseName();
373+
auto id = idPrefix.isEmpty() ? basename : idPrefix + '-' + basename;
367374
auto content = QString::fromUtf8(file.readAll());
368375

369376
auto data = DesktopEntry::parseText(id, content);
@@ -481,8 +488,9 @@ const QStringList& DesktopEntryManager::desktopPaths() {
481488
auto dataDirs = qEnvironmentVariable("XDG_DATA_DIRS");
482489
if (dataDirs.isEmpty()) dataDirs = "/usr/local/share:/usr/share";
483490

484-
for (const auto& dir: dataDirs.split(':', Qt::SkipEmptyParts))
491+
for (const auto& dir: dataDirs.split(':', Qt::SkipEmptyParts)) {
485492
dataPaths.append(dir + "/applications");
493+
}
486494

487495
return dataPaths;
488496
}();
@@ -557,9 +565,8 @@ void DesktopEntryManager::onScanCompleted(const QList<ParsedDesktopEntryData>& s
557565
}
558566

559567
DesktopEntries::DesktopEntries() {
560-
auto* mgr = DesktopEntryManager::instance();
561568
QObject::connect(
562-
mgr,
569+
DesktopEntryManager::instance(),
563570
&DesktopEntryManager::applicationsChanged,
564571
this,
565572
&DesktopEntries::applicationsChanged

src/core/desktopentry.hpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,9 @@ class DesktopEntryScanner: public QRunnable {
240240
explicit DesktopEntryScanner(DesktopEntryManager* manager);
241241

242242
void run() override;
243-
void scanDirectory(const QDir& dir, QList<ParsedDesktopEntryData>& entries);
243+
// clang-format off
244+
void scanDirectory(const QDir& dir, const QString& idPrefix, QList<ParsedDesktopEntryData>& entries);
245+
// clang-format on
244246

245247
private:
246248
DesktopEntryManager* manager;

0 commit comments

Comments
 (0)