forked from quickshell/quickshell
		
	core/desktopentry: paper over id casing issues
This commit is contained in:
		
							parent
							
								
									fdbb490537
								
							
						
					
					
						commit
						db23c0264a
					
				
					 2 changed files with 30 additions and 5 deletions
				
			
		| 
						 | 
				
			
			@ -319,6 +319,7 @@ void DesktopEntryManager::scanPath(const QDir& dir, const QString& prefix) {
 | 
			
		|||
			}
 | 
			
		||||
 | 
			
		||||
			auto id = prefix + entry.fileName().sliced(0, entry.fileName().length() - 8);
 | 
			
		||||
			auto lowerId = id.toLower();
 | 
			
		||||
 | 
			
		||||
			auto text = QString::fromUtf8(file->readAll());
 | 
			
		||||
			auto* dentry = new DesktopEntry(id, this);
 | 
			
		||||
| 
						 | 
				
			
			@ -332,13 +333,28 @@ void DesktopEntryManager::scanPath(const QDir& dir, const QString& prefix) {
 | 
			
		|||
 | 
			
		||||
			qCDebug(logDesktopEntry) << "Found desktop entry" << id << "at" << path;
 | 
			
		||||
 | 
			
		||||
			if (this->desktopEntries.contains(id)) {
 | 
			
		||||
			auto conflictingId = this->desktopEntries.contains(id);
 | 
			
		||||
 | 
			
		||||
			if (conflictingId) {
 | 
			
		||||
				qCDebug(logDesktopEntry) << "Replacing old entry for" << id;
 | 
			
		||||
				delete this->desktopEntries.value(id);
 | 
			
		||||
				this->desktopEntries.remove(id);
 | 
			
		||||
				this->lowercaseDesktopEntries.remove(lowerId);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			this->desktopEntries.insert(id, dentry);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
			if (this->lowercaseDesktopEntries.contains(lowerId)) {
 | 
			
		||||
				qCInfo(logDesktopEntry).nospace()
 | 
			
		||||
						<< "Multiple desktop entries have the same lowercased id " << lowerId
 | 
			
		||||
						<< ". This can cause ambiguity when byId requests are not made with the correct case "
 | 
			
		||||
							 "already.";
 | 
			
		||||
 | 
			
		||||
				this->lowercaseDesktopEntries.remove(lowerId);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			this->lowercaseDesktopEntries.insert(lowerId, dentry);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -349,7 +365,13 @@ DesktopEntryManager* DesktopEntryManager::instance() {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
DesktopEntry* DesktopEntryManager::byId(const QString& id) {
 | 
			
		||||
	return this->desktopEntries.value(id);
 | 
			
		||||
	if (auto* entry = this->desktopEntries.value(id)) {
 | 
			
		||||
		return entry;
 | 
			
		||||
	} else if (auto* entry = this->lowercaseDesktopEntries.value(id.toLower())) {
 | 
			
		||||
		return entry;
 | 
			
		||||
	} else {
 | 
			
		||||
		return nullptr;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ObjectModel<DesktopEntry>* DesktopEntryManager::applications() { return &this->mApplications; }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -55,10 +55,8 @@ public:
 | 
			
		|||
	static QVector<QString> parseExecString(const QString& execString);
 | 
			
		||||
	static void doExec(const QString& execString, const QString& workingDirectory);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	QHash<QString, QString> mEntries;
 | 
			
		||||
	QHash<QString, DesktopAction*> mActions;
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
	QString mId;
 | 
			
		||||
	QString mName;
 | 
			
		||||
	QString mGenericName;
 | 
			
		||||
| 
						 | 
				
			
			@ -71,6 +69,10 @@ private:
 | 
			
		|||
	QVector<QString> mCategories;
 | 
			
		||||
	QVector<QString> mKeywords;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	QHash<QString, QString> mEntries;
 | 
			
		||||
	QHash<QString, DesktopAction*> mActions;
 | 
			
		||||
 | 
			
		||||
	friend class DesktopAction;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -124,6 +126,7 @@ private:
 | 
			
		|||
	void scanPath(const QDir& dir, const QString& prefix = QString());
 | 
			
		||||
 | 
			
		||||
	QHash<QString, DesktopEntry*> desktopEntries;
 | 
			
		||||
	QHash<QString, DesktopEntry*> lowercaseDesktopEntries;
 | 
			
		||||
	ObjectModel<DesktopEntry> mApplications {this};
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue