Simpler iconloader::Load() logic (#5706)
This fixes a bug when clementine uses an icon from the system, even though it exists in it the *data* folder. For example: the icons at the top of *playlistlistview.ui*, and at the top of *fileview.ui*
This commit is contained in:
parent
61e6fc7815
commit
f854bc5deb
|
@ -36,7 +36,7 @@ void IconLoader::Init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
QIcon IconLoader::Load(const QString& name, const IconType& icontype) {
|
QIcon IconLoader::Load(const QString& name, const IconType& icontype) {
|
||||||
|
|
||||||
QIcon ret;
|
QIcon ret;
|
||||||
// If the icon name is empty
|
// If the icon name is empty
|
||||||
if (name.isEmpty()) {
|
if (name.isEmpty()) {
|
||||||
|
@ -46,8 +46,29 @@ QIcon IconLoader::Load(const QString& name, const IconType& icontype) {
|
||||||
|
|
||||||
// Set the icon load location based on IConType
|
// Set the icon load location based on IConType
|
||||||
switch (icontype) {
|
switch (icontype) {
|
||||||
case Base: case Provider:
|
case Base: case Provider: {
|
||||||
break;
|
const QString custom_icon_location = custom_icon_path_
|
||||||
|
+ icon_sub_path_.at(icontype);
|
||||||
|
if (QDir(custom_icon_location).exists()) {
|
||||||
|
// Try to load icons from the custom icon location initially
|
||||||
|
const QString locate(custom_icon_location + "/%1x%2/%3.png");
|
||||||
|
for (int size : sizes_) {
|
||||||
|
QString filename_custom(locate.arg(size).arg(size).arg(name));
|
||||||
|
|
||||||
|
if (QFile::exists(filename_custom)) ret.addFile(filename_custom,
|
||||||
|
QSize(size, size));
|
||||||
|
}
|
||||||
|
if (!ret.isNull()) return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise use our fallback theme
|
||||||
|
const QString path(":" + icon_sub_path_.at(icontype) + "/%1x%2/%3.png");
|
||||||
|
for (int size : sizes_) {
|
||||||
|
QString filename(path.arg(size).arg(size).arg(name));
|
||||||
|
|
||||||
|
if (QFile::exists(filename)) ret.addFile(filename, QSize(size, size));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
case Lastfm: case Other: {
|
case Lastfm: case Other: {
|
||||||
// lastfm icons location
|
// lastfm icons location
|
||||||
|
@ -62,55 +83,27 @@ QIcon IconLoader::Load(const QString& name, const IconType& icontype) {
|
||||||
if (!ret.isNull()) return ret;
|
if (!ret.isNull()) return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if QT_VERSION >= 0x040600
|
|
||||||
// Then try to load it from the system theme
|
|
||||||
ret = QIcon::fromTheme(name);
|
|
||||||
if (!ret.isNull()) return ret;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Otherwise use our fallback theme
|
// Otherwise use our fallback theme
|
||||||
const QString path_file(":" + icon_sub_path_.at(icontype)
|
const QString path_file(":" + icon_sub_path_.at(icontype)
|
||||||
+ "/" + name + ".png");
|
+ "/" + name + ".png");
|
||||||
|
|
||||||
if (QFile::exists(path_file)) ret.addFile(path_file);
|
if (QFile::exists(path_file)) ret.addFile(path_file);
|
||||||
if (ret.isNull()) qLog(Warning) << "Couldn't load icon" << name;
|
if (ret.isNull()) qLog(Warning) << "Couldn't load icon" << name;
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
// Should never be reached
|
// Should never be reached
|
||||||
qLog(Warning) << "Couldn't recognize IconType" << name;
|
qLog(Warning) << "Couldn't recognize IconType" << name;
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
const QString custom_icon_location = custom_icon_path_
|
|
||||||
+ icon_sub_path_.at(icontype);
|
|
||||||
if (QDir(custom_icon_location).exists()) {
|
|
||||||
// Try to load icons from the custom icon location initially
|
|
||||||
const QString locate(custom_icon_location + "/%1x%2/%3.png");
|
|
||||||
for (int size : sizes_) {
|
|
||||||
QString filename_custom(locate.arg(size).arg(size).arg(name));
|
|
||||||
|
|
||||||
if (QFile::exists(filename_custom)) ret.addFile(filename_custom,
|
|
||||||
QSize(size, size));
|
|
||||||
}
|
|
||||||
if (!ret.isNull()) return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Load icon from system theme only if it hasn't been found
|
||||||
|
if (ret.isNull()) {
|
||||||
#if QT_VERSION >= 0x040600
|
#if QT_VERSION >= 0x040600
|
||||||
// Then try to load it from the system theme
|
ret = QIcon::fromTheme(name);
|
||||||
ret = QIcon::fromTheme(name);
|
if (!ret.isNull()) return ret;
|
||||||
if (!ret.isNull()) return ret;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Otherwise use our fallback theme
|
|
||||||
const QString path(":" + icon_sub_path_.at(icontype) + "/%1x%2/%3.png");
|
|
||||||
for (int size : sizes_) {
|
|
||||||
QString filename(path.arg(size).arg(size).arg(name));
|
|
||||||
|
|
||||||
if (QFile::exists(filename)) ret.addFile(filename, QSize(size, size));
|
|
||||||
}
|
}
|
||||||
|
else qLog(Warning) << "Couldn't load icon" << name;
|
||||||
|
|
||||||
if (ret.isNull()) qLog(Warning) << "Couldn't load icon" << name;
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue