aboutsummaryrefslogtreecommitdiff
path: root/src-qt5/core
diff options
context:
space:
mode:
authorKen Moore <ken@ixsystems.com>2017-05-26 15:41:55 -0400
committerKen Moore <ken@ixsystems.com>2017-05-26 15:41:55 -0400
commit85a9a67f94e967e7fce92df777b9b803ba676a73 (patch)
treedf8e32ad88742962e1073744d77c02a2ae02c407 /src-qt5/core
parentGet the new Icon Cache system implemented and turned on for the desktop "appl... (diff)
downloadlumina-85a9a67f94e967e7fce92df777b9b803ba676a73.tar.gz
lumina-85a9a67f94e967e7fce92df777b9b803ba676a73.tar.bz2
lumina-85a9a67f94e967e7fce92df777b9b803ba676a73.zip
Get the icon cache system all setup for the bulk of the desktop icons (application menus, etc). Now we are starting to see the better performance from this system... :-)
Diffstat (limited to 'src-qt5/core')
-rw-r--r--src-qt5/core/libLumina/LIconCache.cpp60
-rw-r--r--src-qt5/core/libLumina/LIconCache.h8
-rw-r--r--src-qt5/core/lumina-desktop/AppMenu.cpp18
-rw-r--r--src-qt5/core/lumina-desktop/panel-plugins/systemstart/ItemWidget.cpp86
4 files changed, 120 insertions, 52 deletions
diff --git a/src-qt5/core/libLumina/LIconCache.cpp b/src-qt5/core/libLumina/LIconCache.cpp
index cf2204a1..947429f9 100644
--- a/src-qt5/core/libLumina/LIconCache.cpp
+++ b/src-qt5/core/libLumina/LIconCache.cpp
@@ -25,6 +25,7 @@ LIconCache::~LIconCache(){
// === PUBLIC ===
//Icon Checks
bool LIconCache::exists(QString icon){
+ if(icon.isEmpty()){ return false; }
if(HASH.contains(icon)){ return true; } //already
else if(!icon.startsWith("/")){
//relative path to file (from icon theme?)
@@ -38,6 +39,7 @@ bool LIconCache::exists(QString icon){
}
bool LIconCache::isLoaded(QString icon){
+ if(icon.isEmpty()){ return false; }
if(HASH.contains(icon)){
return !HASH[icon].icon.isNull();
}
@@ -113,6 +115,7 @@ QString LIconCache::findFile(QString icon){
void LIconCache::loadIcon(QAbstractButton *button, QString icon, bool noThumb){
+ if(icon.isEmpty()){ return; }
//See if the icon has already been loaded into the HASH
bool needload = !HASH.contains(icon);
if(!needload){
@@ -123,12 +126,13 @@ void LIconCache::loadIcon(QAbstractButton *button, QString icon, bool noThumb){
icon_data idata;
if(HASH.contains(icon)){ idata = HASH.value(icon); }
else { idata = createData(icon); }
- idata.pendingButtons << button; //save this button for later
+ idata.pendingButtons << QPointer<QAbstractButton>(button); //save this button for later
HASH.insert(icon, idata);
- if(needload){ QtConcurrent::run(this, &LIconCache::ReadFile, this, icon, idata.fullpath); }
+ if(needload){ startReadFile(icon, idata.fullpath); }
}
void LIconCache::loadIcon(QAction *action, QString icon, bool noThumb){
+ if(icon.isEmpty()){ return; }
//See if the icon has already been loaded into the HASH
bool needload = !HASH.contains(icon);
if(!needload){
@@ -139,12 +143,13 @@ void LIconCache::loadIcon(QAction *action, QString icon, bool noThumb){
icon_data idata;
if(HASH.contains(icon)){ idata = HASH.value(icon); }
else { idata = createData(icon); }
- idata.pendingActions << action; //save this button for later
+ idata.pendingActions << QPointer<QAction>(action); //save this button for later
HASH.insert(icon, idata);
- if(needload){ QtConcurrent::run(this, &LIconCache::ReadFile, this, icon, idata.fullpath); }
+ if(needload){ startReadFile(icon, idata.fullpath); }
}
void LIconCache::loadIcon(QLabel *label, QString icon, bool noThumb){
+ if(icon.isEmpty()){ return; }
//See if the icon has already been loaded into the HASH
bool needload = !HASH.contains(icon);
if(!needload){
@@ -154,10 +159,12 @@ 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); }
- idata.pendingLabels << label; //save this QLabel for later
+ else { idata = createData(icon);
+ if(idata.fullpath.isEmpty()){ return; } //nothing to do
+ }
+ idata.pendingLabels << QPointer<QLabel>(label); //save this QLabel for later
HASH.insert(icon, idata);
- if(needload){ QtConcurrent::run(this, &LIconCache::ReadFile, this, icon, idata.fullpath); }
+ if(needload){ startReadFile(icon, idata.fullpath); }
}
void LIconCache::clearIconTheme(){
@@ -170,6 +177,7 @@ void LIconCache::clearIconTheme(){
}
QIcon LIconCache::loadIcon(QString icon, bool noThumb){
+ if(icon.isEmpty()){ return QIcon(); }
if(HASH.contains(icon)){
if(!HASH[icon].icon.isNull()){ return HASH[icon].icon; }
else if(!HASH[icon].thumbnail.isNull() && !noThumb){ return HASH[icon].thumbnail; }
@@ -178,6 +186,7 @@ QIcon LIconCache::loadIcon(QString icon, bool noThumb){
icon_data idat;
if(HASH.contains(icon)){ idat = HASH[icon]; }
else{ idat = createData(icon); }
+ if(idat.fullpath.isEmpty()){ return QIcon(); } //non-existant file
idat.icon = QIcon(idat.fullpath);
//Now save into the hash and return
HASH.insert(icon, idat);
@@ -242,14 +251,36 @@ QStringList LIconCache::getIconThemeDepChain(QString theme, QStringList paths){
return results;
}
+void LIconCache::startReadFile(QString id, QString path){
+ if(path.endsWith(".svg")){
+ //Special handling - need to read QIcon directly to have the SVG icon scale up appropriately
+ icon_data idat = HASH[id];
+ idat.lastread = QDateTime::currentDateTime();
+ idat.icon = QIcon(path);
+ for(int i=0; i<idat.pendingButtons.length(); i++){ if(!idat.pendingButtons[i].isNull()){ idat.pendingButtons[i]->setIcon(idat.icon); } }
+ idat.pendingButtons.clear();
+ for(int i=0; i<idat.pendingLabels.length(); i++){ if(!idat.pendingLabels[i].isNull()){ idat.pendingLabels[i]->setPixmap(idat.icon.pixmap(idat.pendingLabels[i]->sizeHint())); } }
+ idat.pendingLabels.clear();
+ for(int i=0; i<idat.pendingActions.length(); i++){ if(!idat.pendingActions[i].isNull()){ idat.pendingActions[i]->setIcon(idat.icon); } }
+ idat.pendingActions.clear();
+ //Now update the hash and let the world know it is available now
+ HASH.insert(id, idat);
+ this->emit IconAvailable(id);
+ }else{
+ QtConcurrent::run(this, &LIconCache::ReadFile, this, id, path);
+ }
+}
+
void LIconCache::ReadFile(LIconCache *obj, QString id, QString path){
qDebug() << "Start Reading File:" << id << path;
QByteArray *BA = new QByteArray();
QDateTime cdt = QDateTime::currentDateTime();
- QFile file(path);
- if(file.open(QIODevice::ReadOnly)){
- BA->append(file.readAll());
- file.close();
+ if(!path.isEmpty()){
+ QFile file(path);
+ if(file.open(QIODevice::ReadOnly)){
+ BA->append(file.readAll());
+ file.close();
+ }
}
obj->emit InternalIconLoaded(id, cdt, BA);
}
@@ -266,11 +297,14 @@ void LIconCache::IconLoaded(QString id, QDateTime sync, QByteArray *data){
icon_data idat = HASH[id];
idat.lastread = sync;
idat.icon.addPixmap(pix);
+ if(pix.width() < 64){ idat.icon.addPixmap( pix.scaled( QSize(64,64), Qt::KeepAspectRatio, Qt::SmoothTransformation) ); } //also add a version which has been scaled up a bit
//Now throw this icon into any pending objects
- for(int i=0; i<idat.pendingButtons.length(); i++){ idat.pendingButtons[i]->setIcon(idat.icon); }
+ for(int i=0; i<idat.pendingButtons.length(); i++){ if(!idat.pendingButtons[i].isNull()){ idat.pendingButtons[i]->setIcon(idat.icon); } }
idat.pendingButtons.clear();
- for(int i=0; i<idat.pendingLabels.length(); i++){ idat.pendingLabels[i]->setPixmap(pix.scaled(idat.pendingLabels[i]->sizeHint(), Qt::KeepAspectRatio, Qt::SmoothTransformation)); }
+ for(int i=0; i<idat.pendingLabels.length(); i++){ if(!idat.pendingLabels[i].isNull()){ idat.pendingLabels[i]->setPixmap(pix.scaled(idat.pendingLabels[i]->sizeHint(), Qt::KeepAspectRatio, Qt::SmoothTransformation)); } }
idat.pendingLabels.clear();
+ for(int i=0; i<idat.pendingActions.length(); i++){ if(!idat.pendingActions[i].isNull()){ idat.pendingActions[i]->setIcon(idat.icon); } }
+ idat.pendingActions.clear();
//Now update the hash and let the world know it is available now
HASH.insert(id, idat);
this->emit IconAvailable(id);
diff --git a/src-qt5/core/libLumina/LIconCache.h b/src-qt5/core/libLumina/LIconCache.h
index 4a8f3442..cf585675 100644
--- a/src-qt5/core/libLumina/LIconCache.h
+++ b/src-qt5/core/libLumina/LIconCache.h
@@ -17,14 +17,15 @@
#include <QAbstractButton>
#include <QLabel>
#include <QAction>
+#include <QPointer>
//Data structure for saving the icon/information internally
struct icon_data{
QString fullpath;
QDateTime lastread;
- QList<QLabel*> pendingLabels;
- QList<QAbstractButton*> pendingButtons;
- QList<QAction*> pendingActions;
+ QList<QPointer<QLabel> > pendingLabels;
+ QList<QPointer<QAbstractButton> > pendingButtons;
+ QList<QPointer<QAction> > pendingActions;
QIcon icon;
QIcon thumbnail;
};
@@ -57,6 +58,7 @@ private:
QStringList getChildIconDirs(QString path); //recursive function to find directories with icons in them
QStringList getIconThemeDepChain(QString theme, QStringList paths);
+ void startReadFile(QString id, QString path);
void ReadFile(LIconCache *obj, QString id, QString path);
private slots:
diff --git a/src-qt5/core/lumina-desktop/AppMenu.cpp b/src-qt5/core/lumina-desktop/AppMenu.cpp
index 798d8b6d..c3c52375 100644
--- a/src-qt5/core/lumina-desktop/AppMenu.cpp
+++ b/src-qt5/core/lumina-desktop/AppMenu.cpp
@@ -7,6 +7,9 @@
#include "AppMenu.h"
#include "LSession.h"
#include <LuminaOS.h>
+#include <LIconCache.h>
+
+extern LIconCache *ICONS;
AppMenu::AppMenu(QWidget* parent) : QMenu(parent){
appstorelink = LOS::AppStoreShortcut(); //Default application "store" to display (AppCafe in TrueOS)
@@ -109,13 +112,15 @@ void AppMenu::updateAppList(){
else{ name = tr("Unsorted"); icon = "applications-other"; }
QMenu *menu = new QMenu(name, this);
- menu->setIcon(LXDG::findIcon(icon,""));
+ menu->setIcon( ICONS->loadIcon(icon) );
+ //menu->setIcon(LXDG::findIcon(icon,""));
connect(menu, SIGNAL(triggered(QAction*)), this, SLOT(launchApp(QAction*)) );
QList<XDGDesktop*> appL = APPS.value(cats[i]);
for( int a=0; a<appL.length(); a++){
if(appL[a]->actions.isEmpty()){
//Just a single entry point - no extra actions
- QAction *act = new QAction(LXDG::findIcon(appL[a]->icon, ""), appL[a]->name, this);
+ QAction *act = new QAction(appL[a]->name, this);
+ ICONS->loadIcon(act, appL[a]->icon);
act->setToolTip(appL[a]->comment);
act->setWhatsThis(appL[a]->filePath);
menu->addAction(act);
@@ -123,15 +128,18 @@ void AppMenu::updateAppList(){
//This app has additional actions - make this a sub menu
// - first the main menu/action
QMenu *submenu = new QMenu(appL[a]->name, this);
- submenu->setIcon( LXDG::findIcon(appL[a]->icon,"") );
+ submenu->setIcon( ICONS->loadIcon(appL[a]->icon ));
//This is the normal behavior - not a special sub-action (although it needs to be at the top of the new menu)
- QAction *act = new QAction(LXDG::findIcon(appL[a]->icon, ""), appL[a]->name, this);
+ QAction *act = new QAction(appL[a]->name, this);
+ ICONS->loadIcon(act, appL[a]->icon);
act->setToolTip(appL[a]->comment);
act->setWhatsThis(appL[a]->filePath);
submenu->addAction(act);
//Now add entries for every sub-action listed
for(int sa=0; sa<appL[a]->actions.length(); sa++){
- QAction *sact = new QAction(LXDG::findIcon(appL[a]->actions[sa].icon, appL[a]->icon), appL[a]->actions[sa].name, this);
+ QAction *sact = new QAction( appL[a]->actions[sa].name, this);
+ if(ICONS->exists(appL[a]->actions[sa].icon)){ ICONS->loadIcon(sact, appL[a]->actions[sa].icon); }
+ else{ ICONS->loadIcon(sact, appL[a]->icon); }
sact->setToolTip(appL[a]->comment);
sact->setWhatsThis("-action \""+appL[a]->actions[sa].ID+"\" \""+appL[a]->filePath+"\"");
submenu->addAction(sact);
diff --git a/src-qt5/core/lumina-desktop/panel-plugins/systemstart/ItemWidget.cpp b/src-qt5/core/lumina-desktop/panel-plugins/systemstart/ItemWidget.cpp
index ea074a59..bdc54212 100644
--- a/src-qt5/core/lumina-desktop/panel-plugins/systemstart/ItemWidget.cpp
+++ b/src-qt5/core/lumina-desktop/panel-plugins/systemstart/ItemWidget.cpp
@@ -9,6 +9,9 @@
#include <QMenu>
#include "../../LSession.h"
+#include <LIconCache.h>
+
+extern LIconCache *ICONS;
ItemWidget::ItemWidget(QWidget *parent, QString itemPath, QString type, bool goback) : QFrame(parent){
createWidget();
@@ -20,7 +23,9 @@ ItemWidget::ItemWidget(QWidget *parent, QString itemPath, QString type, bool gob
gooditem = item.isValid();
//qDebug() << "Good Item:" << gooditem << itemPath;
if(gooditem){
- icon->setPixmap( LXDG::findIcon(item.icon, "preferences-system-windows-actions").pixmap(32,32) );
+ //if(ICONS->exists(item.icon)){ ICONS->loadIcon(icon, item.icon); }
+ //else{ ICONS->loadIcon(icon, "preferences-system-windows-actions"); }
+ //icon->setPixmap( LXDG::findIcon(item.icon, "preferences-system-windows-actions").pixmap(32,32) );
iconPath = item.icon;
text = item.name;
if(!item.genericName.isEmpty() && item.name!=item.genericName){ text.append("<br><i> -- "+item.genericName+"</i>"); }
@@ -34,12 +39,12 @@ ItemWidget::ItemWidget(QWidget *parent, QString itemPath, QString type, bool gob
actButton->setVisible(false);
if(itemPath.endsWith("/")){ itemPath.chop(1); }
if(goback){
- icon->setPixmap( LXDG::findIcon("go-previous","").pixmap(64,64) );
+ //ICONS->loadIcon(icon, "go-previous"); //icon->setPixmap( LXDG::findIcon("go-previous","").pixmap(64,64) );
iconPath = "go-previous";
text = tr("Go Back");
name->setText( text );
}else{
- icon->setPixmap( LXDG::findIcon("folder","").pixmap(64,64) );
+ //icon->setPixmap( LXDG::findIcon("folder","").pixmap(64,64) );
iconPath = "folder";
name->setText( itemPath.section("/",-1));
text = itemPath.section("/",-1);
@@ -49,7 +54,7 @@ ItemWidget::ItemWidget(QWidget *parent, QString itemPath, QString type, bool gob
actButton->setVisible(false);
iconPath = LXDG::DesktopCatToIcon(type.section("::::",1,50));
if(goback){ iconPath = "go-previous"; type = "chcat::::"; itemPath = "<B>("+itemPath+")</B>"; }
- icon->setPixmap( LXDG::findIcon(iconPath,"applications-other").pixmap(64,64) );
+ //icon->setPixmap( LXDG::findIcon(iconPath,"applications-other").pixmap(64,64) );
name->setText(itemPath);
text = itemPath;
icon->setWhatsThis(type);
@@ -59,17 +64,21 @@ ItemWidget::ItemWidget(QWidget *parent, QString itemPath, QString type, bool gob
if(itemPath.endsWith("/")){ itemPath.chop(1); }
if(QFileInfo(itemPath).isDir()){
type = "dir";
- icon->setPixmap( LXDG::findIcon("folder","").pixmap(64,64) );
+ //icon->setPixmap( LXDG::findIcon("folder","").pixmap(64,64) );
iconPath = "folder";
}else if(LUtils::imageExtensions().contains(itemPath.section("/",-1).section(".",-1).toLower()) ){
- icon->setPixmap( QIcon(itemPath).pixmap(64,64) );
+ iconPath = itemPath;
+ //icon->setPixmap( QIcon(itemPath).pixmap(64,64) );
}else{
- if( LUtils::isValidBinary(itemPath) ){ icon->setPixmap( LXDG::findIcon(type, "application-x-executable").pixmap(64,64) ); }
- else{ icon->setPixmap( LXDG::findMimeIcon(itemPath.section("/",-1)).pixmap(64,64) ); }
+ if( LUtils::isValidBinary(itemPath) ){
+ if(ICONS->exists(type)){ iconPath = type; }
+ else{ iconPath = "application-x-executable"; }
+ }else{ iconPath = LXDG::findAppMimeForFile(itemPath.section("/",-1)).replace("/","-"); }
}
name->setText( itemPath.section("/",-1) ); //this->fontMetrics().elidedText(itemPath.section("/",-1), Qt::ElideRight, TEXTCUTOFF) );
text = itemPath.section("/",-1) ;
}
+ ICONS->loadIcon(icon, iconPath);
icon->setWhatsThis(itemPath);
if(!goback){ this->setWhatsThis(name->text()); }
isDirectory = (type=="dir"); //save this for later
@@ -105,7 +114,7 @@ ItemWidget::ItemWidget(QWidget *parent, XDGDesktop *item) : QFrame(parent){
name->setToolTip(icon->whatsThis()); //also allow the user to see the full shortcut path
}
//Now fill it appropriately
- icon->setPixmap( LXDG::findIcon(item->icon,"preferences-system-windows-actions").pixmap(64,64) );
+ //icon->setPixmap( LXDG::findIcon(item->icon,"preferences-system-windows-actions").pixmap(64,64) );
text = item->name;
if(!item->genericName.isEmpty() && item->name!=item->genericName){ text.append("<br><i> -- "+item->genericName+"</i>"); }
name->setText(text);
@@ -113,26 +122,27 @@ ItemWidget::ItemWidget(QWidget *parent, XDGDesktop *item) : QFrame(parent){
this->setWhatsThis(item->name);
icon->setWhatsThis(item->filePath);
iconPath = item->icon;
+ ICONS->loadIcon(icon, iconPath);
//Now setup the buttons appropriately
setupContextMenu();
setupActions(item);
}
ItemWidget::~ItemWidget(){
- icon->setPixmap(QPixmap()); //make sure the pixmap is cleared from memory too
- actButton->deleteLater();
+ //icon->setPixmap(QPixmap()); //make sure the pixmap is cleared from memory too
+ //actButton->deleteLater();
contextMenu->clear();
- contextMenu->deleteLater();
+ //contextMenu->deleteLater();
if(actButton->menu()!=0){
for(int i=0; i<actButton->menu()->actions().length(); i++){
actButton->menu()->actions().at(i)->deleteLater();
}
actButton->menu()->deleteLater();
}
- actButton->deleteLater();
- icon->deleteLater();
- name->deleteLater();
- menureset->deleteLater();
+ //actButton->deleteLater();
+ //icon->deleteLater();
+ //name->deleteLater();
+ //menureset->deleteLater();
linkPath.clear(); iconPath.clear(); text.clear();
}
@@ -155,6 +165,8 @@ void ItemWidget::createWidget(){
actButton->setPopupMode(QToolButton::InstantPopup);
actButton->setArrowType(Qt::DownArrow);
icon = new QLabel(this);
+ int H = 64; //(2.3*this->fontMetrics().height() ) -4; //make sure the height is large enough for two lines
+ icon->setFixedSize( QSize(H,H) );
name = new QLabel(this);
name->setWordWrap(true);
name->setTextFormat(Qt::RichText);
@@ -172,23 +184,29 @@ void ItemWidget::createWidget(){
void ItemWidget::setupContextMenu(){
//Now refresh the context menu
contextMenu->clear();
+ QAction *tmp = 0;
if(!QFile::exists(QDir::homePath()+"/Desktop/"+icon->whatsThis().section("/",-1)) ){
//Does not have a desktop link
- contextMenu->addAction( LXDG::findIcon("preferences-desktop-icons",""), tr("Pin to Desktop"), this, SLOT(PinToDesktop()) );
+ tmp = contextMenu->addAction( tr("Pin to Desktop"), this, SLOT(PinToDesktop()) );
+ ICONS->loadIcon(tmp, "preferences-desktop-icons");
}
//Favorite Item
if( LDesktopUtils::isFavorite(icon->whatsThis()) ){ //Favorite Item - can always remove this
- contextMenu->addAction( LXDG::findIcon("edit-delete",""), tr("Remove from Favorites"), this, SLOT(RemoveFavorite()) );
+ tmp = contextMenu->addAction(tr("Remove from Favorites"), this, SLOT(RemoveFavorite()) );
+ ICONS->loadIcon(tmp, "edit-delete");
}else{
//This file does not have a shortcut yet -- allow the user to add it
- contextMenu->addAction( LXDG::findIcon("bookmark-toolbar",""), tr("Add to Favorites"), this, SLOT(AddFavorite()) );
+ tmp = contextMenu->addAction( tr("Add to Favorites"), this, SLOT(AddFavorite()) );
+ ICONS->loadIcon(tmp, "bookmark-toolbar");
}
//QuickLaunch Item
if(LSession::handle()->sessionSettings()->value("QuicklaunchApps",QStringList()).toStringList().contains(icon->whatsThis()) ){ //Favorite Item - can always remove this
- contextMenu->addAction( LXDG::findIcon("edit-delete",""), tr("Remove from Quicklaunch"), this, SLOT(RemoveQL()) );
+ tmp = contextMenu->addAction( tr("Remove from Quicklaunch"), this, SLOT(RemoveQL()) );
+ ICONS->loadIcon(tmp, "edit-delete");
}else{
//This file does not have a shortcut yet -- allow the user to add it
- contextMenu->addAction( LXDG::findIcon("quickopen",""), tr("Add to Quicklaunch"), this, SLOT(AddQL()) );
+ tmp = contextMenu->addAction( tr("Add to Quicklaunch"), this, SLOT(AddQL()) );
+ ICONS->loadIcon(tmp, "quickopen");
}
}
@@ -197,10 +215,12 @@ void ItemWidget::setupActions(XDGDesktop *app){
//Actions Available - go ahead and list them all
actButton->setMenu( new QMenu(this) );
for(int i=0; i<app->actions.length(); i++){
- QAction *act = new QAction(LXDG::findIcon(app->actions[i].icon, app->icon), app->actions[i].name, this);
- act->setToolTip(app->actions[i].ID);
- act->setWhatsThis(app->actions[i].ID);
- actButton->menu()->addAction(act);
+ QAction *act = new QAction(app->actions[i].name, this);
+ if(ICONS->exists(app->actions[i].icon)){ ICONS->loadIcon(act, app->actions[i].icon); }
+ else{ ICONS->loadIcon(act, app->icon); }
+ act->setToolTip(app->actions[i].ID);
+ act->setWhatsThis(app->actions[i].ID);
+ actButton->menu()->addAction(act);
}
connect(actButton->menu(), SIGNAL(triggered(QAction*)), this, SLOT(actionClicked(QAction*)) );
connect(actButton->menu(), SIGNAL(aboutToShow()), this, SLOT(actionMenuOpen()) );
@@ -210,9 +230,9 @@ void ItemWidget::setupActions(XDGDesktop *app){
void ItemWidget::updateItems(){
//update the text/icon to match sizes
- int H = 2.3*name->fontMetrics().height(); //make sure the height is large enough for two lines
- icon->setFixedSize(QSize(H-4, H-4));
- actButton->setFixedSize( QSize( (H-4)/2, H-4) );
+ int H = 64; //(2.3*name->fontMetrics().height() ) -4; //make sure the height is large enough for two lines
+ icon->setFixedSize(QSize(H, H));
+ actButton->setFixedSize( QSize( H/2, H) );
QStringList newname = text.split("<br>");
for(int i=0; i<newname.length(); i++){ newname[i] = name->fontMetrics().elidedText(newname[i], Qt::ElideRight, name->width()); }
name->setText( newname.join("<br>") );
@@ -222,12 +242,16 @@ void ItemWidget::updateItems(){
if(iconPath.isEmpty()){
//Use item path (thumbnail or mimetype)
if(LUtils::imageExtensions().contains(icon->whatsThis().section("/",-1).section(".",-1).toLower()) ){
- icon->setPixmap( QIcon(icon->whatsThis()).pixmap(H-4,H-4).scaledToHeight(H-4,Qt::SmoothTransformation) );
+ ICONS->loadIcon(icon, icon->whatsThis());
+ //icon->setPixmap( QIcon(icon->whatsThis()).pixmap(H-4,H-4).scaledToHeight(H-4,Qt::SmoothTransformation) );
}else{
- icon->setPixmap( LXDG::findMimeIcon(icon->whatsThis().section("/",-1)).pixmap(H-4,H-4).scaledToHeight(H-4,Qt::SmoothTransformation) );
+ ICONS->loadIcon(icon, LXDG::findAppMimeForFile(icon->whatsThis()).replace("/","-") );
+ //icon->setPixmap( LXDG::findMimeIcon(icon->whatsThis().section("/",-1)).pixmap(H-4,H-4).scaledToHeight(H-4,Qt::SmoothTransformation) );
}
}else{
- icon->setPixmap( LXDG::findIcon(iconPath,"preferences-system-windows-actions").pixmap(H-4,H-4).scaledToHeight(H-4,Qt::SmoothTransformation) );
+ if(ICONS->exists(iconPath)){ ICONS->loadIcon(icon, iconPath); }
+ else{ ICONS->loadIcon(icon, "preferences-system-windows-actions"); }
+ //icon->setPixmap( LXDG::findIcon(iconPath,"preferences-system-windows-actions").pixmap(H-4,H-4).scaledToHeight(H-4,Qt::SmoothTransformation) );
}
}else if(icon->pixmap()->size().height() > (H-4) ){
icon->setPixmap( icon->pixmap()->scaled(H-4, H-4, Qt::IgnoreAspectRatio, Qt::SmoothTransformation) );
bgstack15