diff options
Diffstat (limited to 'src-qt5/core/libLumina')
-rw-r--r-- | src-qt5/core/libLumina/LIconCache.cpp | 37 | ||||
-rw-r--r-- | src-qt5/core/libLumina/LIconCache.h | 3 | ||||
-rw-r--r-- | src-qt5/core/libLumina/LuminaXDG.cpp | 21 |
3 files changed, 50 insertions, 11 deletions
diff --git a/src-qt5/core/libLumina/LIconCache.cpp b/src-qt5/core/libLumina/LIconCache.cpp index 38367cef..bb81bc47 100644 --- a/src-qt5/core/libLumina/LIconCache.cpp +++ b/src-qt5/core/libLumina/LIconCache.cpp @@ -55,9 +55,9 @@ QString LIconCache::findFile(QString icon){ if(icon.isEmpty()){ return ""; } //Get the currently-set theme QString cTheme = QIcon::themeName(); - if(cTheme.isEmpty()){ - QIcon::setThemeName("material-design-light"); - cTheme = "material-design-light"; + if(cTheme.isEmpty()){ + QIcon::setThemeName("material-design-light"); + cTheme = "material-design-light"; } //Make sure the current search paths correspond to this theme if( QDir::searchPaths("icontheme").filter("/"+cTheme+"/").isEmpty() ){ @@ -80,7 +80,7 @@ QString LIconCache::findFile(QString icon){ fall << getChildIconDirs(paths[i]+"hicolor"); //XDG fallback (apps add to this) } //Now load all the icon theme dependencies in order (Theme1 -> Theme2 -> Theme3 -> Fallback) - + //fall << LOS::AppPrefix()+"share/pixmaps"; //always use this as well as a final fallback QDir::setSearchPaths("icontheme", theme); QDir::setSearchPaths("default", oxy); @@ -121,6 +121,10 @@ QString LIconCache::findFile(QString icon){ void LIconCache::loadIcon(QAbstractButton *button, QString icon, bool noThumb){ if(icon.isEmpty()){ return; } + if(isThemeIcon(icon)){ + button->setIcon( iconFromTheme(icon)); + return ; + } //See if the icon has already been loaded into the HASH bool needload = !HASH.contains(icon); if(!needload){ @@ -138,6 +142,10 @@ void LIconCache::loadIcon(QAbstractButton *button, QString icon, bool noThumb){ void LIconCache::loadIcon(QAction *action, QString icon, bool noThumb){ if(icon.isEmpty()){ return; } + if(isThemeIcon(icon)){ + action->setIcon( iconFromTheme(icon)); + return ; + } //See if the icon has already been loaded into the HASH bool needload = !HASH.contains(icon); if(!needload){ @@ -155,6 +163,10 @@ void LIconCache::loadIcon(QAction *action, QString icon, bool noThumb){ void LIconCache::loadIcon(QLabel *label, QString icon, bool noThumb){ if(icon.isEmpty()){ return; } + if(isThemeIcon(icon)){ + label->setPixmap( iconFromTheme(icon).pixmap(label->sizeHint()) ); + return ; + } //See if the icon has already been loaded into the HASH bool needload = !HASH.contains(icon); if(!needload){ @@ -164,7 +176,7 @@ void LIconCache::loadIcon(QLabel *label, QString icon, bool noThumb){ //Need to load the icon icon_data idata; if(HASH.contains(icon)){ idata = HASH.value(icon); } - else { idata = createData(icon); + else { idata = createData(icon); if(idata.fullpath.isEmpty()){ return; } //nothing to do } idata.pendingLabels << QPointer<QLabel>(label); //save this QLabel for later @@ -183,6 +195,8 @@ void LIconCache::clearIconTheme(){ QIcon LIconCache::loadIcon(QString icon, bool noThumb){ if(icon.isEmpty()){ return QIcon(); } + if(isThemeIcon(icon)){ return iconFromTheme(icon); } + if(HASH.contains(icon)){ if(!HASH[icon].icon.isNull()){ return HASH[icon].icon; } else if(!HASH[icon].thumbnail.isNull() && !noThumb){ return HASH[icon].thumbnail; } @@ -290,6 +304,19 @@ void LIconCache::ReadFile(LIconCache *obj, QString id, QString path){ obj->emit InternalIconLoaded(id, cdt, BA); } +bool LIconCache::isThemeIcon(QString id){ + return (!id.contains("/") && !id.contains(".") ); +} + +QIcon LIconCache::iconFromTheme(QString id){ + QIcon ico = QIcon::fromTheme(id); + if(ico.isNull()){ + //icon missing in theme? run the old icon-finder system + ico = QIcon(findFile(id)); + } + return ico; +} + // === PRIVATE SLOTS === void LIconCache::IconLoaded(QString id, QDateTime sync, QByteArray *data){ //qDebug() << "Icon Loaded:" << id << HASH.contains(id); diff --git a/src-qt5/core/libLumina/LIconCache.h b/src-qt5/core/libLumina/LIconCache.h index f58a5510..428ffcab 100644 --- a/src-qt5/core/libLumina/LIconCache.h +++ b/src-qt5/core/libLumina/LIconCache.h @@ -67,6 +67,9 @@ private: void startReadFile(QString id, QString path); void ReadFile(LIconCache *obj, QString id, QString path); + bool isThemeIcon(QString id); + QIcon iconFromTheme(QString id); + private slots: void IconLoaded(QString id, QDateTime sync, QByteArray *data); diff --git a/src-qt5/core/libLumina/LuminaXDG.cpp b/src-qt5/core/libLumina/LuminaXDG.cpp index 8da39564..01b3305e 100644 --- a/src-qt5/core/libLumina/LuminaXDG.cpp +++ b/src-qt5/core/libLumina/LuminaXDG.cpp @@ -723,7 +723,7 @@ QList<XDGDesktop*> LXDG::sortDesktopNames(QList<XDGDesktop*> apps){ //Sort the list by name of the application QHash<QString, XDGDesktop*> sorter; for(int i=0; i<apps.length(); i++){ - sorter.insert(apps[i]->name.toLower(), apps[i]); + sorter.insert(apps[i]->name.toLower(), apps[i]); } QStringList keys = sorter.keys(); keys.sort(); @@ -746,16 +746,25 @@ void LXDG::setEnvironmentVars(){ } QIcon LXDG::findIcon(QString iconName, QString fallback){ + //With the addition of the Lumina theme engine (8/3/17), switch back to using the Qt icon from theme method for apps + QIcon tmp; + if(!iconName.contains("libreoffice")){ //libreoffice is stupid - their svg icons are un-renderable with Qt + tmp = QIcon::fromTheme(iconName); + if(tmp.isNull()){ tmp = QIcon::fromTheme(fallback); } + } + if(!tmp.isNull()){ return tmp; } //found one in the theme + + //NOTE: This was re-written on 11/10/15 to avoid using the QIcon::fromTheme() framework // -- Too many issues with SVG files and/or search paths with the built-in system - + //Check if the icon is an absolute path and exists bool DEBUG =false; if(DEBUG){ qDebug() << "[LXDG] Find icon for:" << iconName; } if(QFile::exists(iconName) && iconName.startsWith("/")){ return QIcon(iconName); } else if(iconName.startsWith("/")){ iconName.section("/",-1); } //Invalid absolute path, just look for the icon //Check if the icon is actually given - if(iconName.isEmpty()){ + if(iconName.isEmpty()){ if(fallback.isEmpty()){ return QIcon(); } else{ return LXDG::findIcon(fallback, ""); } } @@ -763,9 +772,9 @@ QIcon LXDG::findIcon(QString iconName, QString fallback){ if(DEBUG){ qDebug() << "[LXDG] Start search for icon"; } //Get the currently-set theme QString cTheme = QIcon::themeName(); - if(cTheme.isEmpty()){ - QIcon::setThemeName("material-design-light"); - cTheme = "material-design-light"; + if(cTheme.isEmpty()){ + QIcon::setThemeName("material-design-light"); + cTheme = "material-design-light"; } //Make sure the current search paths correspond to this theme if( QDir::searchPaths("icontheme").filter("/"+cTheme+"/").isEmpty() ){ |