diff --git a/krusader/ActionMan/actionproperty.cpp b/krusader/ActionMan/actionproperty.cpp --- a/krusader/ActionMan/actionproperty.cpp +++ b/krusader/ActionMan/actionproperty.cpp @@ -25,19 +25,17 @@ #include "../UserAction/kraction.h" #include "../krusader.h" #include "../krglobal.h" +#include "../icon.h" // QtWidgets #include #include #include -#include #include #include -#define ICON(N) KIconLoader::global()->loadIcon(N, KIconLoader::Small) - ActionProperty::ActionProperty(QWidget *parent, KrAction *action) : QWidget(parent), _modified(false) { @@ -49,8 +47,8 @@ updateGUI(_action); } - ButtonAddPlaceholder->setIcon(ICON("list-add")); - ButtonAddStartpath->setIcon(ICON("document-open")); + ButtonAddPlaceholder->setIcon(Icon("list-add")); + ButtonAddStartpath->setIcon(Icon("document-open")); // fill with all existing categories cbCategory->addItems(krUserAction->allCategories()); @@ -292,7 +290,7 @@ _action->setConfirmExecution(chkConfirmExecution->isChecked()); - _action->setIcon(QIcon::fromTheme(ButtonIcon->icon())); + _action->setIcon(Icon(ButtonIcon->icon())); _action->setIconName(ButtonIcon->icon()); _action->setUser(leDifferentUser->text()); diff --git a/krusader/ActionMan/addplaceholderpopup.cpp b/krusader/ActionMan/addplaceholderpopup.cpp --- a/krusader/ActionMan/addplaceholderpopup.cpp +++ b/krusader/ActionMan/addplaceholderpopup.cpp @@ -24,6 +24,7 @@ // for ParameterDialog #include "../krglobal.h" // for konfig-access +#include "../icon.h" #include "../BookMan/krbookmarkbutton.h" #include "../GUI/profilemanager.h" @@ -306,7 +307,7 @@ _lineEdit = new KLineEdit(hboxWidget); hbox->addWidget(_lineEdit); _button = new QToolButton(hboxWidget); - _button->setIcon(QIcon::fromTheme("list-add")); + _button->setIcon(Icon("list-add")); hbox->addWidget(_button); connect(_button, SIGNAL(clicked()), this, SLOT(addPlaceholder())); } @@ -419,7 +420,7 @@ hbox->addWidget(_lineEdit); _button = new QToolButton(hboxWidget); hbox->addWidget(_button); - _button->setIcon(QIcon::fromTheme("document-open")); + _button->setIcon(Icon("document-open")); connect(_button, SIGNAL(clicked()), this, SLOT(addFile())); } @@ -532,10 +533,10 @@ hbox->addWidget(_lineEdit); _dirButton = new QToolButton(hboxWidget); hbox->addWidget(_dirButton); - _dirButton->setIcon(QIcon::fromTheme("document-open")); + _dirButton->setIcon(Icon("document-open")); connect(_dirButton, SIGNAL(clicked()), this, SLOT(setDir())); _placeholderButton = new QToolButton(hboxWidget); - _placeholderButton->setIcon(QIcon::fromTheme("list-add")); + _placeholderButton->setIcon(Icon("list-add")); hbox->addWidget(_placeholderButton); connect(_placeholderButton, SIGNAL(clicked()), this, SLOT(addPlaceholder())); diff --git a/krusader/ActionMan/useractionlistview.cpp b/krusader/ActionMan/useractionlistview.cpp --- a/krusader/ActionMan/useractionlistview.cpp +++ b/krusader/ActionMan/useractionlistview.cpp @@ -26,9 +26,9 @@ #include #include -#include #include "../krglobal.h" +#include "../icon.h" #include "../UserAction/kraction.h" #include "../UserAction/useraction.h" @@ -239,7 +239,7 @@ return; if (! _action->icon().isNull()) - setIcon(COL_TITLE, KIconLoader::global()->loadIcon(_action->iconName(), KIconLoader::Small)); + setIcon(COL_TITLE, Icon(_action->iconName())); setText(COL_TITLE, _action->text()); } diff --git a/krusader/ActionMan/useractionpage.cpp b/krusader/ActionMan/useractionpage.cpp --- a/krusader/ActionMan/useractionpage.cpp +++ b/krusader/ActionMan/useractionpage.cpp @@ -37,16 +37,16 @@ #include #include #include -#include #include "actionproperty.h" #include "useractionlistview.h" #include "../UserAction/useraction.h" #include "../UserAction/kraction.h" #include "../krusader.h" #include "../krglobal.h" +#include "../icon.h" + -#define ICON(N) KIconLoader::global()->loadIcon(N, KIconLoader::Toolbar) //This is the filter in the QFileDialog of Import/Export: static const char* FILE_FILTER = I18N_NOOP("*.xml|XML files\n*|All files"); @@ -64,32 +64,32 @@ toolbarLayout->setContentsMargins(0, 0, 0, 0); newButton = new QToolButton(this); - newButton->setIcon(ICON("document-new")); + newButton->setIcon(Icon("document-new")); newButton->setAutoRaise(true); newButton->setToolTip(i18n("Create new useraction")); importButton = new QToolButton(this); - importButton->setIcon(ICON("document-import")); + importButton->setIcon(Icon("document-import")); importButton->setAutoRaise(true); importButton->setToolTip(i18n("Import useractions")); exportButton = new QToolButton(this); - exportButton->setIcon(ICON("document-export")); + exportButton->setIcon(Icon("document-export")); exportButton->setAutoRaise(true); exportButton->setToolTip(i18n("Export useractions")); copyButton = new QToolButton(this); - copyButton->setIcon(ICON("edit-copy")); + copyButton->setIcon(Icon("edit-copy")); copyButton->setAutoRaise(true); copyButton->setToolTip(i18n("Copy useractions to clipboard")); pasteButton = new QToolButton(this); - pasteButton->setIcon(ICON("edit-paste")); + pasteButton->setIcon(Icon("edit-paste")); pasteButton->setAutoRaise(true); pasteButton->setToolTip(i18n("Paste useractions from clipboard")); removeButton = new QToolButton(this); - removeButton->setIcon(ICON("edit-delete")); + removeButton->setIcon(Icon("edit-delete")); removeButton->setAutoRaise(true); removeButton->setToolTip(i18n("Delete selected useractions")); diff --git a/krusader/BookMan/kraddbookmarkdlg.cpp b/krusader/BookMan/kraddbookmarkdlg.cpp --- a/krusader/BookMan/kraddbookmarkdlg.cpp +++ b/krusader/BookMan/kraddbookmarkdlg.cpp @@ -21,6 +21,7 @@ #include "kraddbookmarkdlg.h" #include "../krglobal.h" +#include "../icon.h" #include "krbookmarkhandler.h" // QtWidgets @@ -32,7 +33,7 @@ #include #include -#include + KrAddBookmarkDlg::KrAddBookmarkDlg(QWidget *parent, QUrl url): QDialog(parent) @@ -66,7 +67,7 @@ _folder->setReadOnly(true); _createInBtn = new QToolButton(this); - _createInBtn->setIcon(krLoader->loadIcon("go-down", KIconLoader::Small)); + _createInBtn->setIcon(Icon("go-down")); _createInBtn->setCheckable(true); connect(_createInBtn, SIGNAL(toggled(bool)), this, SLOT(toggleCreateIn(bool))); layout->addWidget(_createInBtn, 2, 2); @@ -97,7 +98,7 @@ void KrAddBookmarkDlg::toggleCreateIn(bool show) { - _createInBtn->setIcon(krLoader->loadIcon(show ? "go-up" : "go-down", KIconLoader::Small)); + _createInBtn->setIcon(Icon(show ? "go-up" : "go-down")); newFolderButton->setVisible(show); detailsWidget->setVisible(show); } diff --git a/krusader/BookMan/krbookmark.cpp b/krusader/BookMan/krbookmark.cpp --- a/krusader/BookMan/krbookmark.cpp +++ b/krusader/BookMan/krbookmark.cpp @@ -21,12 +21,12 @@ #include "krbookmark.h" #include "../krglobal.h" +#include "../icon.h" #include "../Archive/krarchandler.h" #include "../FileSystem/krtrashhandler.h" #include "../Panel/listpanelactions.h" #include -#include #include #define BM_NAME(X) (QString("Bookmark:")+X) @@ -45,23 +45,23 @@ // do we have an icon? if (!icon.isEmpty()) - setIcon(QIcon::fromTheme(icon)); + setIcon(Icon(icon)); else { // what kind of a url is it? if (_url.isLocalFile()) { - setIcon(QIcon::fromTheme("folder")); + setIcon(Icon("folder")); } else { // is it an archive? if (KRarcHandler::isArchive(_url)) - setIcon(QIcon::fromTheme("application-x-tar")); - else setIcon(QIcon::fromTheme("folder-html")); + setIcon(Icon("application-x-tar")); + else setIcon(Icon("folder-html")); } } } KrBookmark::KrBookmark(QString name, QString icon) : - QAction(QIcon::fromTheme(icon), name, 0), _icon(icon), _folder(true), _separator(false), _autoDelete(false) + QAction(Icon(icon), name, 0), _icon(icon), _folder(true), _separator(false), _autoDelete(false) { - setIcon(QIcon::fromTheme(icon == "" ? "folder" : icon)); + setIcon(Icon(icon == "" ? "folder" : icon)); } KrBookmark::~KrBookmark() @@ -85,16 +85,16 @@ if (!bm) bm = new KrBookmark(i18n(NAME_TRASH), QUrl("trash:/"), collection); - bm->setIcon(krLoader->loadIcon(KrTrashHandler::trashIcon(), KIconLoader::Small)); + bm->setIcon(Icon(KrTrashHandler::trashIcon())); return bm; } KrBookmark * KrBookmark::virt(KActionCollection *collection) { KrBookmark *bm = getExistingBookmark(i18n(NAME_VIRTUAL), collection); if (!bm) { bm = new KrBookmark(i18n(NAME_VIRTUAL), QUrl("virt:/"), collection); - bm->setIcon(krLoader->loadIcon("document-open-remote", KIconLoader::Small)); + bm->setIcon(Icon("document-open-remote")); } return bm; } @@ -104,7 +104,7 @@ KrBookmark *bm = getExistingBookmark(i18n(NAME_LAN), collection); if (!bm) { bm = new KrBookmark(i18n(NAME_LAN), QUrl("remote:/"), collection); - bm->setIcon(krLoader->loadIcon("network-workgroup", KIconLoader::Small)); + bm->setIcon(Icon("network-workgroup")); } return bm; } diff --git a/krusader/BookMan/krbookmarkbutton.cpp b/krusader/BookMan/krbookmarkbutton.cpp --- a/krusader/BookMan/krbookmarkbutton.cpp +++ b/krusader/BookMan/krbookmarkbutton.cpp @@ -22,26 +22,27 @@ #include "krbookmarkbutton.h" #include "krbookmarkhandler.h" #include "../krglobal.h" +#include "../icon.h" // QtGui #include // QtWidgets #include #include #include -#include + KrBookmarkButton::KrBookmarkButton(QWidget *parent): QToolButton(parent) { setAutoRaise(true); - setIcon(QIcon::fromTheme("bookmarks")); + setIcon(Icon("bookmarks")); setText(i18n("BookMan II")); setToolTip(i18n("BookMan II")); setPopupMode(QToolButton::InstantPopup); setAcceptDrops(false); - acmBookmarks = new KActionMenu(QIcon::fromTheme("bookmarks"), i18n("Bookmarks"), this); + acmBookmarks = new KActionMenu(Icon("bookmarks"), i18n("Bookmarks"), this); acmBookmarks->setDelayed(false); setMenu(acmBookmarks->menu()); diff --git a/krusader/BookMan/krbookmarkhandler.cpp b/krusader/BookMan/krbookmarkhandler.cpp --- a/krusader/BookMan/krbookmarkhandler.cpp +++ b/krusader/BookMan/krbookmarkhandler.cpp @@ -23,6 +23,7 @@ #include "kraddbookmarkdlg.h" #include "../krglobal.h" +#include "../icon.h" #include "../krslots.h" #include "../kractions.h" #include "../krmainwindow.h" @@ -44,7 +45,6 @@ #include #include -#include #include #include #include @@ -390,7 +390,7 @@ if (!bm->isFolder()) continue; QMenu *newMenu = new QMenu(menu); - newMenu->setIcon(QIcon(krLoader->loadIcon(bm->iconName(), KIconLoader::Small))); + newMenu->setIcon(Icon(bm->iconName())); newMenu->setTitle(bm->text()); QAction *menuAction = menu->addMenu(newMenu); QVariant v; @@ -426,7 +426,7 @@ // add the popular links submenu QMenu *newMenu = new QMenu(menu); newMenu->setTitle(i18n("Popular URLs")); - newMenu->setIcon(QIcon(krLoader->loadIcon("folder-bookmark", KIconLoader::Small))); + newMenu->setIcon(Icon("folder-bookmark")); QAction *bmfAct = menu->addMenu(newMenu); _specialBookmarks.append(bmfAct); // add the top 15 urls @@ -511,7 +511,7 @@ menu->addSeparator(); menu->addAction(KrActions::actAddBookmark); _specialBookmarks.append(KrActions::actAddBookmark); - QAction *bmAct = menu->addAction(krLoader->loadIcon("bookmarks", KIconLoader::Small), + QAction *bmAct = menu->addAction(Icon("bookmarks"), i18n("Manage Bookmarks"), manager, SLOT(slotEditBookmarks())); _specialBookmarks.append(bmAct); @@ -827,13 +827,13 @@ QAction * act; if (!bm->isFolder()) { - act = popup.addAction(krLoader->loadIcon("document-open", KIconLoader::Panel), i18n("Open")); + act = popup.addAction(Icon("document-open"), i18n("Open")); act->setData(QVariant(OPEN_ID)); - act = popup.addAction(krLoader->loadIcon("tab-new", KIconLoader::Panel), i18n("Open in a new tab")); + act = popup.addAction(Icon("tab-new"), i18n("Open in a new tab")); act->setData(QVariant(OPEN_NEW_TAB_ID)); popup.addSeparator(); } - act = popup.addAction(krLoader->loadIcon("edit-delete", KIconLoader::Panel), i18n("Delete")); + act = popup.addAction(Icon("edit-delete"), i18n("Delete")); act->setData(QVariant(DELETE_ID)); connect(menu, SIGNAL(highlighted(int)), &popup, SLOT(close())); diff --git a/krusader/CMakeLists.txt b/krusader/CMakeLists.txt --- a/krusader/CMakeLists.txt +++ b/krusader/CMakeLists.txt @@ -28,6 +28,8 @@ set(krusader_SRCS krglobal.cpp + icon.cpp + filelisticon.cpp actionsbase.cpp tabactions.cpp kractions.cpp @@ -38,7 +40,6 @@ krusaderview.cpp krusader.cpp krslots.cpp - kicons.cpp krdebuglogger.cpp ) diff --git a/krusader/Dialogs/checksumdlg.cpp b/krusader/Dialogs/checksumdlg.cpp --- a/krusader/Dialogs/checksumdlg.cpp +++ b/krusader/Dialogs/checksumdlg.cpp @@ -23,6 +23,7 @@ #include "checksumdlg.h" #include "../krglobal.h" +#include "../icon.h" #include "../krservices.h" #include "../krusader.h" #include "../GUI/krlistwidget.h" @@ -46,7 +47,6 @@ #include #include -#include #include void Checksum::startCreationWizard(const QString &path, const QStringList &files) @@ -194,7 +194,7 @@ page->setTitle(title); page->setPixmap(QWizard::LogoPixmap, - krLoader->loadIcon("process-working", KIconLoader::Desktop, 32)); + Icon("process-working").pixmap(32)); page->setSubTitle(i18n("Please wait...")); QVBoxLayout *mainLayout = new QVBoxLayout; @@ -267,7 +267,7 @@ page->setTitle(i18n("Create Checksums")); page->setPixmap(QWizard::LogoPixmap, - krLoader->loadIcon("document-edit-sign", KIconLoader::Desktop, 32)); + Icon("document-edit-sign").pixmap(32)); page->setSubTitle(i18n("About to calculate checksum for the following files or directories:")); QVBoxLayout *mainLayout = new QVBoxLayout; @@ -365,8 +365,7 @@ QWizardPage *page = currentPage(); page->setPixmap(QWizard::LogoPixmap, - krLoader->loadIcon(errors || !successes ? "dialog-error" : "dialog-information", - KIconLoader::Desktop, 32)); + Icon(errors || !successes ? "dialog-error" : "dialog-information").pixmap(32)); page->setSubTitle(errors || !successes ? i18n("Errors were detected while creating the checksums") : i18n("Checksums were created successfully")); @@ -481,7 +480,7 @@ page->setTitle(i18n("Verify Checksum File")); page->setPixmap(QWizard::LogoPixmap, - krLoader->loadIcon("document-edit-verify", KIconLoader::Desktop, 32)); + Icon("document-edit-verify").pixmap(32)); page->setSubTitle(i18n("About to verify the following checksum file")); QVBoxLayout *mainLayout = new QVBoxLayout; @@ -557,8 +556,7 @@ QWizardPage *page = currentPage(); page->setPixmap(QWizard::LogoPixmap, - krLoader->loadIcon(errors ? "dialog-error" : "dialog-information", - KIconLoader::Desktop, 32)); + Icon(errors ? "dialog-error" : "dialog-information").pixmap(32)); page->setSubTitle(errors ? i18n("Errors were detected while verifying the checksums") : i18n("Checksums were verified successfully")); diff --git a/krusader/Dialogs/krspwidgets.cpp b/krusader/Dialogs/krspwidgets.cpp --- a/krusader/Dialogs/krspwidgets.cpp +++ b/krusader/Dialogs/krspwidgets.cpp @@ -21,7 +21,7 @@ #include "krspwidgets.h" #include "../krglobal.h" -#include "../kicons.h" +#include "../icon.h" #include "../Filter/filtertabs.h" #include "../GUI/krlistwidget.h" @@ -41,7 +41,6 @@ #include #include #include -#include #include ///////////////////// initiation of the static members //////////////////////// @@ -168,7 +167,7 @@ /////////////////////////// KRMaskChoiceSub /////////////////////////////// KRMaskChoiceSub::KRMaskChoiceSub(QWidget * parent) : KRMaskChoice(parent) { - PixmapLabel1->setPixmap(krLoader->loadIcon("edit-select", KIconLoader::Desktop, 32)); + PixmapLabel1->setPixmap(Icon("edit-select").pixmap(32)); label->setText(i18n("Enter a selection:")); // the predefined selections list KConfigGroup group(krConfig, "Private"); diff --git a/krusader/Dialogs/kurllistrequester.cpp b/krusader/Dialogs/kurllistrequester.cpp --- a/krusader/Dialogs/kurllistrequester.cpp +++ b/krusader/Dialogs/kurllistrequester.cpp @@ -20,6 +20,7 @@ #include "kurllistrequester.h" #include "../FileSystem/filesystem.h" +#include "../icon.h" // QtGui #include @@ -32,7 +33,6 @@ #include #include -#include #include #define DELETE_ITEM_ID 100 @@ -55,12 +55,12 @@ urlAddBtn = new QToolButton(this); urlAddBtn->setText(""); - urlAddBtn->setIcon(QIcon::fromTheme("arrow-down")); + urlAddBtn->setIcon(Icon("arrow-down")); urlListRequesterGrid->addWidget(urlAddBtn, 0, 1); urlBrowseBtn = new QToolButton(this); urlBrowseBtn->setText(""); - urlBrowseBtn->setIcon(QIcon::fromTheme("folder")); + urlBrowseBtn->setIcon(Icon("folder")); urlListRequesterGrid->addWidget(urlBrowseBtn, 0, 2); // add shell completion diff --git a/krusader/Dialogs/newftpgui.cpp b/krusader/Dialogs/newftpgui.cpp --- a/krusader/Dialogs/newftpgui.cpp +++ b/krusader/Dialogs/newftpgui.cpp @@ -37,10 +37,10 @@ #include #include #include -#include #include #include "../krglobal.h" +#include "../icon.h" #define SIZE_MINIMUM QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed) @@ -71,7 +71,7 @@ setSizePolicy(policy); iconLabel = new QLabel(this); - iconLabel->setPixmap(krLoader->loadIcon("network-wired", KIconLoader::Desktop, 32)); + iconLabel->setPixmap(Icon("network-wired").pixmap(32)); iconLabel->setSizePolicy(SIZE_MINIMUM); aboutLabel = new QLabel(i18n("About to connect to..."), this); diff --git a/krusader/Dialogs/packguibase.cpp b/krusader/Dialogs/packguibase.cpp --- a/krusader/Dialogs/packguibase.cpp +++ b/krusader/Dialogs/packguibase.cpp @@ -45,15 +45,15 @@ #include #include -#include #include #include #include #include #include #include "../defaults.h" #include "../krglobal.h" +#include "../icon.h" /* * Constructs a PackGUIBase which is a child of 'parent', with the @@ -105,7 +105,7 @@ hbox_2->addWidget(dirData); browseButton = new QToolButton(this); - browseButton->setIcon(SmallIcon("document-open")); + browseButton->setIcon(Icon("document-open")); hbox_2->addWidget(browseButton); QSpacerItem* spacer = new QSpacerItem(48, 20, QSizePolicy::Fixed, QSizePolicy::Fixed); hbox_2->addItem(spacer); @@ -117,7 +117,7 @@ hbox_3->setContentsMargins(0, 0, 0, 0); PixmapLabel1 = new QLabel(this); - PixmapLabel1->setPixmap(krLoader->loadIcon("package-x-generic", KIconLoader::Desktop, 32)); + PixmapLabel1->setPixmap(Icon("package-x-generic").pixmap(32)); PixmapLabel1->setScaledContents(true); PixmapLabel1->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); hbox_3->addWidget(PixmapLabel1); diff --git a/krusader/Dialogs/popularurls.cpp b/krusader/Dialogs/popularurls.cpp --- a/krusader/Dialogs/popularurls.cpp +++ b/krusader/Dialogs/popularurls.cpp @@ -37,10 +37,10 @@ #include #include #include -#include #include #include "../krglobal.h" +#include "../icon.h" #include "../krslots.h" #include "../GUI/krtreewidget.h" @@ -361,7 +361,7 @@ QTreeWidgetItem *item = new QTreeWidgetItem(urls, lastItem); lastItem = item; item->setText(0, (*it).isLocalFile() ? (*it).path() : (*it).toDisplayString()); - item->setIcon(0, (*it).isLocalFile() ? SmallIcon("folder") : SmallIcon("folder-html")); + item->setIcon(0, (*it).isLocalFile() ? Icon("folder") : Icon("folder-html")); } setMinimumSize(urls->sizeHint().width() + 45, 400); diff --git a/krusader/DiskUsage/diskusage.cpp b/krusader/DiskUsage/diskusage.cpp --- a/krusader/DiskUsage/diskusage.cpp +++ b/krusader/DiskUsage/diskusage.cpp @@ -60,8 +60,8 @@ #include "../Panel/krpanel.h" #include "../Panel/panelfunc.h" #include "../defaults.h" -#include "../kicons.h" #include "../krglobal.h" +#include "../filelisticon.h" // these are the values that will exist in the menu #define DELETE_ID 90 @@ -956,14 +956,14 @@ if (!QPixmapCache::find(mime, icon)) { // get the icon. if (mime == "Broken Link !") // FIXME: this doesn't work anymore - the reported mimetype for a broken link is now "unknown" - icon = FL_LOADICON("file-broken"); + icon = FileListIcon("file-broken").pixmap(); else { QMimeDatabase db; QMimeType mt = db.mimeTypeForName(mime); if (mt.isValid()) - icon = FL_LOADICON(mt.iconName()); + icon = FileListIcon(mt.iconName()).pixmap(); else - icon = FL_LOADICON("file-broken"); + icon = FileListIcon("file-broken").pixmap(); } // insert it into the cache diff --git a/krusader/DiskUsage/diskusagegui.cpp b/krusader/DiskUsage/diskusagegui.cpp --- a/krusader/DiskUsage/diskusagegui.cpp +++ b/krusader/DiskUsage/diskusagegui.cpp @@ -32,10 +32,9 @@ #include #include -#include -#include "../kicons.h" #include "../krglobal.h" +#include "../icon.h" #include "../FileSystem/filesystem.h" #include "../Dialogs/krdialogs.h" @@ -60,38 +59,38 @@ duTools->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); btnNewSearch = new QToolButton(duTools); - btnNewSearch->setIcon(QIcon(krLoader->loadIcon("document-open", KIconLoader::Desktop))); + btnNewSearch->setIcon(Icon("document-open")); duHBox->addWidget(btnNewSearch); btnNewSearch->setToolTip(i18n("Start new disk usage search")); btnRefresh = new QToolButton(duTools); - btnRefresh->setIcon(QIcon(krLoader->loadIcon("view-refresh", KIconLoader::Desktop))); + btnRefresh->setIcon(Icon("view-refresh")); duHBox->addWidget(btnRefresh); btnRefresh->setToolTip(i18n("Refresh")); btnDirUp = new QToolButton(duTools); - btnDirUp->setIcon(QIcon(krLoader->loadIcon("go-up", KIconLoader::Desktop))); + btnDirUp->setIcon(Icon("go-up")); duHBox->addWidget(btnDirUp); btnDirUp->setToolTip(i18n("Parent folder")); QWidget *separatorWidget = new QWidget(duTools); separatorWidget->setMinimumWidth(10); duHBox->addWidget(separatorWidget); btnLines = new QToolButton(duTools); - btnLines->setIcon(QIcon(krLoader->loadIcon("view-list-details", KIconLoader::Desktop))); + btnLines->setIcon(Icon("view-list-details")); btnLines->setCheckable(true); duHBox->addWidget(btnLines); btnLines->setToolTip(i18n("Line view")); btnDetailed = new QToolButton(duTools); - btnDetailed->setIcon(QIcon(krLoader->loadIcon("view-list-tree", KIconLoader::Desktop))); + btnDetailed->setIcon(Icon("view-list-tree")); btnDetailed->setCheckable(true); duHBox->addWidget(btnDetailed); btnDetailed->setToolTip(i18n("Detailed view")); btnFilelight = new QToolButton(duTools); - btnFilelight->setIcon(QIcon(krLoader->loadIcon("kr_diskusage", KIconLoader::Desktop))); + btnFilelight->setIcon(Icon("kr_diskusage")); btnFilelight->setCheckable(true); duHBox->addWidget(btnFilelight); btnFilelight->setToolTip(i18n("Filelight view")); diff --git a/krusader/DiskUsage/dulines.cpp b/krusader/DiskUsage/dulines.cpp --- a/krusader/DiskUsage/dulines.cpp +++ b/krusader/DiskUsage/dulines.cpp @@ -19,7 +19,8 @@ *****************************************************************************/ #include "dulines.h" -#include "../kicons.h" + +#include "../icon.h" #include "../krglobal.h" #include "../FileSystem/krpermhandler.h" @@ -266,7 +267,7 @@ if (!(dirEntry->parent() == 0)) { lastItem = new QTreeWidgetItem(this); lastItem->setText(0, ".."); - lastItem->setIcon(0, FL_LOADICON("go-up")); + lastItem->setIcon(0, Icon("go-up")); lastItem->setFlags(lastItem->flags() & (~Qt::ItemIsSelectable)); } diff --git a/krusader/DiskUsage/dulistview.cpp b/krusader/DiskUsage/dulistview.cpp --- a/krusader/DiskUsage/dulistview.cpp +++ b/krusader/DiskUsage/dulistview.cpp @@ -20,7 +20,7 @@ #include "dulistview.h" #include "../krglobal.h" -#include "../kicons.h" +#include "../icon.h" #include "../FileSystem/krpermhandler.h" // QtCore @@ -105,7 +105,7 @@ if (parent == 0 && !(dirEntry->parent() == 0)) { lastItem = new QTreeWidgetItem(this); lastItem->setText(0, ".."); - lastItem->setIcon(0, FL_LOADICON("go-up")); + lastItem->setIcon(0, Icon("go-up")); lastItem->setFlags(Qt::ItemIsEnabled); } diff --git a/krusader/DiskUsage/radialMap/widgetEvents.cpp b/krusader/DiskUsage/radialMap/widgetEvents.cpp --- a/krusader/DiskUsage/radialMap/widgetEvents.cpp +++ b/krusader/DiskUsage/radialMap/widgetEvents.cpp @@ -21,6 +21,7 @@ #include "fileTree.h" #include "radialMap.h" //class Segment #include "widget.h" +#include "../../icon.h" #include @@ -36,7 +37,6 @@ #include #include -#include #include #include #include @@ -173,19 +173,19 @@ QAction * actKonq = 0, * actKonsole = 0, *actViewMag = 0, * actFileOpen = 0, * actEditDel = 0; if (isDir) { - actKonq = popup.addAction(QIcon::fromTheme("system-file-manager"), i18n("Open File Manager Here")); + actKonq = popup.addAction(Icon("system-file-manager"), i18n("Open File Manager Here")); if (url.scheme() == "file") - actKonsole = popup.addAction(QIcon::fromTheme("utilities-terminal"), i18n("Open Terminal Here")); + actKonsole = popup.addAction(Icon("utilities-terminal"), i18n("Open Terminal Here")); if (m_focus->file() != m_tree) { popup.addSeparator(); - actViewMag = popup.addAction(QIcon::fromTheme("zoom-original"), i18n("&Center Map Here")); + actViewMag = popup.addAction(Icon("zoom-original"), i18n("&Center Map Here")); } } else - actFileOpen = popup.addAction(QIcon::fromTheme("document-open"), i18n("&Open")); + actFileOpen = popup.addAction(Icon("document-open"), i18n("&Open")); popup.addSeparator(); - actEditDel = popup.addAction(QIcon::fromTheme("edit-delete"), i18n("&Delete")); + actEditDel = popup.addAction(Icon("edit-delete"), i18n("&Delete")); QAction * result = popup.exec(e->globalPos()); if (result == 0) diff --git a/krusader/FileSystem/krtrashhandler.cpp b/krusader/FileSystem/krtrashhandler.cpp --- a/krusader/FileSystem/krtrashhandler.cpp +++ b/krusader/FileSystem/krtrashhandler.cpp @@ -35,6 +35,7 @@ #include "filesystemprovider.h" #include "../kractions.h" #include "../krglobal.h" +#include "../icon.h" KrTrashWatcher * KrTrashHandler::_trashWatcher = 0; @@ -112,5 +113,5 @@ void KrTrashWatcher::slotTrashChanged() { - KrActions::actTrashBin->setIcon(QIcon::fromTheme(KrTrashHandler::trashIcon())); + KrActions::actTrashBin->setIcon(Icon(KrTrashHandler::trashIcon())); } diff --git a/krusader/Filter/advancedfilter.cpp b/krusader/Filter/advancedfilter.cpp --- a/krusader/Filter/advancedfilter.cpp +++ b/krusader/Filter/advancedfilter.cpp @@ -38,10 +38,10 @@ #include #include -#include #include #include "../krglobal.h" +#include "../icon.h" #include "../Dialogs/krdialogs.h" #define USERSFILE QString("/etc/passwd") @@ -113,7 +113,7 @@ // Options for date - QPixmap iconDate = krLoader->loadIcon("view-calendar", KIconLoader::Toolbar, 16); + Icon iconDate("view-calendar"); QGroupBox *dateGroup = new QGroupBox(this); QButtonGroup *btnGroup = new QButtonGroup(dateGroup); @@ -140,7 +140,7 @@ modifiedBetweenBtn1 = new QToolButton(dateGroup); modifiedBetweenBtn1->setEnabled(false); modifiedBetweenBtn1->setText(""); - modifiedBetweenBtn1->setIcon(QIcon(iconDate)); + modifiedBetweenBtn1->setIcon(iconDate); QLabel *andLabel = new QLabel(dateGroup); andLabel->setText(i18n("an&d")); @@ -153,7 +153,7 @@ modifiedBetweenBtn2 = new QToolButton(dateGroup); modifiedBetweenBtn2->setEnabled(false); modifiedBetweenBtn2->setText(""); - modifiedBetweenBtn2->setIcon(QIcon(iconDate)); + modifiedBetweenBtn2->setIcon(iconDate); notModifiedAfterEnabled = new QRadioButton(dateGroup); notModifiedAfterEnabled->setText(i18n("&Not modified after")); @@ -166,7 +166,7 @@ notModifiedAfterBtn = new QToolButton(dateGroup); notModifiedAfterBtn->setEnabled(false); notModifiedAfterBtn->setText(""); - notModifiedAfterBtn->setIcon(QIcon(iconDate)); + notModifiedAfterBtn->setIcon(iconDate); modifiedInTheLastEnabled = new QRadioButton(dateGroup); modifiedInTheLastEnabled->setText(i18n("Mod&ified in the last")); diff --git a/krusader/Filter/generalfilter.cpp b/krusader/Filter/generalfilter.cpp --- a/krusader/Filter/generalfilter.cpp +++ b/krusader/Filter/generalfilter.cpp @@ -37,7 +37,6 @@ #include #include #include -#include #include typedef struct { diff --git a/krusader/GUI/dirhistorybutton.cpp b/krusader/GUI/dirhistorybutton.cpp --- a/krusader/GUI/dirhistorybutton.cpp +++ b/krusader/GUI/dirhistorybutton.cpp @@ -20,6 +20,7 @@ *****************************************************************************/ #include "dirhistorybutton.h" +#include "../icon.h" #include "../Panel/dirhistoryqueue.h" #include "../FileSystem/filesystem.h" @@ -37,7 +38,7 @@ DirHistoryButton::DirHistoryButton(DirHistoryQueue* hQ, QWidget *parent) : QToolButton(parent) { setAutoRaise(true); - setIcon(QIcon::fromTheme("chronometer")); + setIcon(Icon("chronometer")); setText(i18n("Open the folder history list")); setToolTip(i18n("Open the folder history list")); setPopupMode(QToolButton::InstantPopup); diff --git a/krusader/GUI/kcmdline.cpp b/krusader/GUI/kcmdline.cpp --- a/krusader/GUI/kcmdline.cpp +++ b/krusader/GUI/kcmdline.cpp @@ -39,10 +39,9 @@ #include #include -#include #include "../krglobal.h" -#include "../kicons.h" +#include "../icon.h" #include "../krslots.h" #include "../defaults.h" #include "../krusaderview.h" @@ -188,7 +187,7 @@ buttonAddPlaceholder = new QToolButton(this); buttonAddPlaceholder->setAutoRaise(true); - buttonAddPlaceholder->setIcon(SmallIcon("list-add")); + buttonAddPlaceholder->setIcon(Icon("list-add")); connect(buttonAddPlaceholder, SIGNAL(clicked()), this, SLOT(addPlaceholder())); buttonAddPlaceholder->setWhatsThis(i18n("Add Placeholders for the selected files in the panel.")); diff --git a/krusader/GUI/kcmdmodebutton.cpp b/krusader/GUI/kcmdmodebutton.cpp --- a/krusader/GUI/kcmdmodebutton.cpp +++ b/krusader/GUI/kcmdmodebutton.cpp @@ -21,12 +21,12 @@ #include "kcmdmodebutton.h" #include "../kractions.h" +#include "../icon.h" // QtWidgets #include #include -#include #include /** @@ -44,7 +44,7 @@ "programs in a terminal of your choice. If it's " "pressed, terminal mode is active." ) ); */ - setIcon(SmallIcon("utilities-terminal")); + setIcon(Icon("utilities-terminal")); adjustSize(); action = new KActionMenu(i18n("Execution mode"), this); Q_CHECK_PTR(action); diff --git a/krusader/GUI/krremoteencodingmenu.cpp b/krusader/GUI/krremoteencodingmenu.cpp --- a/krusader/GUI/krremoteencodingmenu.cpp +++ b/krusader/GUI/krremoteencodingmenu.cpp @@ -36,14 +36,14 @@ #include #include "../krglobal.h" +#include "../icon.h" #include "../Panel/krpanel.h" #include "../Panel/panelfunc.h" -#include "../kicons.h" #define DATA_KEY QString::fromLatin1("Charset") KrRemoteEncodingMenu::KrRemoteEncodingMenu(const QString &text, const QString &icon, KActionCollection *parent) : - KActionMenu(QIcon::fromTheme(icon), text, parent), settingsLoaded(false) + KActionMenu(Icon(icon), text, parent), settingsLoaded(false) { connect(menu(), SIGNAL(aboutToShow()), this, SLOT(slotAboutToShow())); diff --git a/krusader/GUI/mediabutton.cpp b/krusader/GUI/mediabutton.cpp --- a/krusader/GUI/mediabutton.cpp +++ b/krusader/GUI/mediabutton.cpp @@ -21,6 +21,7 @@ #include "mediabutton.h" #include "../krglobal.h" +#include "../icon.h" #include "../MountMan/kmountman.h" // QtCore @@ -51,7 +52,7 @@ popupMenu(0), rightMenu(0), openInNewTab(false) { setAutoRaise(true); - setIcon(QIcon::fromTheme("system-file-manager")); + setIcon(Icon("system-file-manager")); setText(i18n("Open the available media list")); setToolTip(i18n("Open the available media list")); setPopupMode(QToolButton::InstantPopup); diff --git a/krusader/GUI/profilemanager.cpp b/krusader/GUI/profilemanager.cpp --- a/krusader/GUI/profilemanager.cpp +++ b/krusader/GUI/profilemanager.cpp @@ -30,12 +30,13 @@ #include #include "../krglobal.h" +#include "../icon.h" ProfileManager::ProfileManager(QString profileType, QWidget * parent) : QPushButton(parent) { setText(""); - setIcon(QIcon::fromTheme("user-identity")); + setIcon(Icon("user-identity")); setFixedWidth(16 + 15); setToolTip(i18n("Profiles")); diff --git a/krusader/JobMan/jobman.cpp b/krusader/JobMan/jobman.cpp --- a/krusader/JobMan/jobman.cpp +++ b/krusader/JobMan/jobman.cpp @@ -36,6 +36,7 @@ #include "krjob.h" #include "../krglobal.h" +#include "../icon.h" const int MAX_OLD_MENU_ACTIONS = 10; @@ -61,7 +62,7 @@ layout->addWidget(m_pauseResumeButton, 1, 1); m_cancelButton = new QPushButton(); - m_cancelButton->setIcon(QIcon::fromTheme("remove")); + m_cancelButton->setIcon(Icon("remove")); m_cancelButton->setToolTip(i18n("Cancel Job")); connect(m_cancelButton, &QPushButton::clicked, this, &JobMenuAction::slotCancelButtonClicked); @@ -102,7 +103,7 @@ void updatePauseResumeButton() { - m_pauseResumeButton->setIcon(QIcon::fromTheme( + m_pauseResumeButton->setIcon(Icon( m_krJob->isRunning() ? "media-playback-pause" : m_krJob->isPaused() ? "media-playback-start" : "chronometer-start")); m_pauseResumeButton->setToolTip(m_krJob->isRunning() ? i18n("Pause Job") : @@ -123,7 +124,7 @@ { qDebug() << "job description=" << m_krJob->description(); m_pauseResumeButton->setEnabled(false); - m_cancelButton->setIcon(QIcon::fromTheme("edit-clear")); + m_cancelButton->setIcon(Icon("edit-clear")); m_cancelButton->setToolTip(i18n("Clear")); m_krJob = nullptr; @@ -181,7 +182,7 @@ JobMan::JobMan(QObject *parent) : QObject(parent), m_messageBox(0) { // job control action - m_controlAction = new KToolBarPopupAction(QIcon::fromTheme("media-playback-pause"), + m_controlAction = new KToolBarPopupAction(Icon("media-playback-pause"), i18n("Play/Pause &Job"), this); m_controlAction->setEnabled(false); connect(m_controlAction, &QAction::triggered, this, &JobMan::slotControlActionTriggered); @@ -207,7 +208,7 @@ // job queue mode action KConfigGroup cfg(krConfig, "JobManager"); m_queueMode = cfg.readEntry("Queue Mode", false); - m_modeAction = new QAction(QIcon::fromTheme("media-playlist-repeat"), i18n("Job Queue Mode"), + m_modeAction = new QAction(Icon("media-playlist-repeat"), i18n("Job Queue Mode"), krMainWindow); m_modeAction->setToolTip(i18n("Run only one job in parallel")); m_modeAction->setCheckable(true); @@ -221,7 +222,7 @@ KIO::FileUndoManager *undoManager = KIO::FileUndoManager::self(); undoManager->uiInterface()->setParentWidget(krMainWindow); - m_undoAction = new QAction(QIcon::fromTheme("edit-undo"), i18n("Undo Last Job"), krMainWindow); + m_undoAction = new QAction(Icon("edit-undo"), i18n("Undo Last Job"), krMainWindow); m_undoAction->setEnabled(false); connect(m_undoAction, &QAction::triggered, undoManager, &KIO::FileUndoManager::undo); connect(undoManager, static_cast(&KIO::FileUndoManager::undoAvailable), @@ -241,7 +242,7 @@ m_messageBox = new QMessageBox(krMainWindow); m_messageBox->setWindowTitle(i18n("Warning")); - m_messageBox->setIconPixmap(QIcon::fromTheme("dialog-warning") + m_messageBox->setIconPixmap(Icon("dialog-warning") .pixmap(QMessageBox::standardIcon(QMessageBox::Information).size())); m_messageBox->setText(i18n("Are you sure you want to quit?")); m_messageBox->addButton(QMessageBox::Abort); @@ -441,7 +442,7 @@ m_progressBar->setToolTip(i18np("%1 Job", "%1 Jobs", m_jobs.length())); const bool running = jobsAreRunning(); - m_controlAction->setIcon(QIcon::fromTheme( + m_controlAction->setIcon(Icon( !hasJobs ? "edit-clear" : running ? "media-playback-pause" : "media-playback-start")); m_controlAction->setToolTip(!hasJobs ? i18n("Clear Job List") : running ? i18n("Pause All Jobs") : diff --git a/krusader/KViewer/krviewer.cpp b/krusader/KViewer/krviewer.cpp --- a/krusader/KViewer/krviewer.cpp +++ b/krusader/KViewer/krviewer.cpp @@ -38,16 +38,15 @@ #include #include #include -#include #include #include #include #include #include #include #include "../defaults.h" -#include "../kicons.h" +#include "../icon.h" #include "panelviewer.h" #define VIEW_ICON "document-preview" @@ -660,7 +659,7 @@ else iconName = VIEW_ICON; - return QIcon(krLoader->loadIcon(iconName, KIconLoader::Small)); + return Icon(iconName); } void KrViewer::addPart(KParts::ReadOnlyPart *part) diff --git a/krusader/KViewer/lister.cpp b/krusader/KViewer/lister.cpp --- a/krusader/KViewer/lister.cpp +++ b/krusader/KViewer/lister.cpp @@ -60,6 +60,7 @@ #include #include "../krglobal.h" +#include "../icon.h" #include "../kractions.h" #include "../GUI/krremoteencodingmenu.h" @@ -1201,40 +1202,40 @@ { setXMLFile("krusaderlisterui.rc"); - _actionSaveSelected = new QAction(QIcon::fromTheme("document-save"), i18n("Save selection..."), this); + _actionSaveSelected = new QAction(Icon("document-save"), i18n("Save selection..."), this); connect(_actionSaveSelected, SIGNAL(triggered(bool)), SLOT(saveSelected())); actionCollection()->addAction("save_selected", _actionSaveSelected); - _actionSaveAs = new QAction(QIcon::fromTheme("document-save-as"), i18n("Save as..."), this); + _actionSaveAs = new QAction(Icon("document-save-as"), i18n("Save as..."), this); connect(_actionSaveAs, SIGNAL(triggered(bool)), SLOT(saveAs())); actionCollection()->addAction("save_as", _actionSaveAs); - _actionPrint = new QAction(QIcon::fromTheme("document-print"), i18n("Print..."), this); + _actionPrint = new QAction(Icon("document-print"), i18n("Print..."), this); connect(_actionPrint, SIGNAL(triggered(bool)), SLOT(print())); actionCollection()->addAction("print", _actionPrint); actionCollection()->setDefaultShortcut(_actionPrint, Qt::CTRL + Qt::Key_P); - _actionSearch = new QAction(QIcon::fromTheme("system-search"), i18n("Search"), this); + _actionSearch = new QAction(Icon("system-search"), i18n("Search"), this); connect(_actionSearch, SIGNAL(triggered(bool)), SLOT(searchAction())); actionCollection()->addAction("search", _actionSearch); actionCollection()->setDefaultShortcut(_actionSearch, Qt::CTRL + Qt::Key_F); - _actionSearchNext = new QAction(QIcon::fromTheme("go-down"), i18n("Search next"), this); + _actionSearchNext = new QAction(Icon("go-down"), i18n("Search next"), this); connect(_actionSearchNext, SIGNAL(triggered(bool)), SLOT(searchNext())); actionCollection()->addAction("search_next", _actionSearchNext); actionCollection()->setDefaultShortcut(_actionSearchNext, Qt::Key_F3); - _actionSearchPrev = new QAction(QIcon::fromTheme("go-up"), i18n("Search previous"), this); + _actionSearchPrev = new QAction(Icon("go-up"), i18n("Search previous"), this); connect(_actionSearchPrev, SIGNAL(triggered(bool)), SLOT(searchPrev())); actionCollection()->addAction("search_prev", _actionSearchPrev); actionCollection()->setDefaultShortcut(_actionSearchPrev, Qt::SHIFT + Qt::Key_F3); - _actionJumpToPosition = new QAction(QIcon::fromTheme("go-jump"), i18n("Jump to position"), this); + _actionJumpToPosition = new QAction(Icon("go-jump"), i18n("Jump to position"), this); connect(_actionJumpToPosition, SIGNAL(triggered(bool)), SLOT(jumpToPosition())); actionCollection()->addAction("jump_to_position", _actionJumpToPosition); actionCollection()->setDefaultShortcut(_actionJumpToPosition, Qt::CTRL + Qt::Key_G); - _actionHexMode = new QAction(QIcon::fromTheme("document-preview"), i18n("Hex mode"), this); + _actionHexMode = new QAction(Icon("document-preview"), i18n("Hex mode"), this); connect(_actionHexMode, SIGNAL(triggered(bool)), SLOT(toggleHexMode())); actionCollection()->addAction("hex_mode", _actionHexMode); actionCollection()->setDefaultShortcut(_actionHexMode, Qt::CTRL + Qt::Key_H); @@ -1268,7 +1269,7 @@ hbox->addWidget(_searchProgressBar); _searchStopButton = new QToolButton(statusWidget); - _searchStopButton->setIcon(QIcon::fromTheme("process-stop")); + _searchStopButton->setIcon(Icon("process-stop")); _searchStopButton->setToolTip(i18n("Stop search")); _searchStopButton->hide(); connect(_searchStopButton, SIGNAL(clicked()), this, SLOT(searchDelete())); @@ -1284,11 +1285,11 @@ connect(_searchLineEdit, SIGNAL(textChanged(QString)), this, SLOT(searchTextChanged())); hbox->addWidget(_searchLineEdit); - _searchNextButton = new QPushButton(QIcon::fromTheme("go-down"), i18n("Next"), statusWidget); + _searchNextButton = new QPushButton(Icon("go-down"), i18n("Next"), statusWidget); _searchNextButton->setToolTip(i18n("Jump to next match")); connect(_searchNextButton, SIGNAL(clicked()), this, SLOT(searchNext())); hbox->addWidget(_searchNextButton); - _searchPrevButton = new QPushButton(QIcon::fromTheme("go-up"), i18n("Previous"), statusWidget); + _searchPrevButton = new QPushButton(Icon("go-up"), i18n("Previous"), statusWidget); _searchPrevButton->setToolTip(i18n("Jump to previous match")); connect(_searchPrevButton, SIGNAL(clicked()), this, SLOT(searchPrev())); hbox->addWidget(_searchPrevButton); diff --git a/krusader/Konfigurator/kggeneral.cpp b/krusader/Konfigurator/kggeneral.cpp --- a/krusader/Konfigurator/kggeneral.cpp +++ b/krusader/Konfigurator/kggeneral.cpp @@ -33,12 +33,11 @@ #include #include -#include #include #include "krresulttabledialog.h" #include "../defaults.h" -#include "../kicons.h" +#include "../icon.h" #include "../krglobal.h" #define PAGE_GENERAL 0 @@ -177,15 +176,15 @@ QToolButton *addButton = new QToolButton(hboxWidget3); hbox3->addWidget(addButton); - QPixmap icon = krLoader->loadIcon("list-add", KIconLoader::Desktop, size); + QPixmap icon = Icon("list-add").pixmap(size); addButton->setFixedSize(icon.width() + 4, icon.height() + 4); addButton->setIcon(QIcon(icon)); connect(addButton, SIGNAL(clicked()), this, SLOT(slotAddExtension())); QToolButton *removeButton = new QToolButton(hboxWidget3); hbox3->addWidget(removeButton); - icon = krLoader->loadIcon("list-remove", KIconLoader::Desktop, size); + icon = Icon("list-remove").pixmap(size); removeButton->setFixedSize(icon.width() + 4, icon.height() + 4); removeButton->setIcon(QIcon(icon)); connect(removeButton, SIGNAL(clicked()), this, SLOT(slotRemoveExtension())); diff --git a/krusader/Konfigurator/kgprotocols.cpp b/krusader/Konfigurator/kgprotocols.cpp --- a/krusader/Konfigurator/kgprotocols.cpp +++ b/krusader/Konfigurator/kgprotocols.cpp @@ -20,6 +20,7 @@ #include "kgprotocols.h" #include "../krglobal.h" +#include "../icon.h" #include "../krservices.h" // QtCore @@ -63,12 +64,12 @@ addSpacer(vbox1); btnAddProtocol = new QPushButton(vbox1Widget); - btnAddProtocol->setIcon(krLoader->loadIcon("arrow-left", KIconLoader::Small)); + btnAddProtocol->setIcon(Icon("arrow-left")); btnAddProtocol->setWhatsThis(i18n("Add protocol to the link list.")); vbox1->addWidget(btnAddProtocol); btnRemoveProtocol = new QPushButton(vbox1Widget); - btnRemoveProtocol->setIcon(krLoader->loadIcon("arrow-right", KIconLoader::Small)); + btnRemoveProtocol->setIcon(Icon("arrow-right")); btnRemoveProtocol->setWhatsThis(i18n("Remove protocol from the link list.")); vbox1->addWidget(btnRemoveProtocol); addSpacer(vbox1); @@ -80,12 +81,12 @@ addSpacer(vbox2); btnAddMime = new QPushButton(vbox2Widget); - btnAddMime->setIcon(krLoader->loadIcon("arrow-left", KIconLoader::Small)); + btnAddMime->setIcon(Icon("arrow-left")); btnAddMime->setWhatsThis(i18n("Add MIME to the selected protocol on the link list.")); vbox2->addWidget(btnAddMime); btnRemoveMime = new QPushButton(vbox2Widget); - btnRemoveMime->setIcon(krLoader->loadIcon("arrow-right", KIconLoader::Small)); + btnRemoveMime->setIcon(Icon("arrow-right")); btnRemoveMime->setWhatsThis(i18n("Remove MIME from the link list.")); vbox2->addWidget(btnRemoveMime); addSpacer(vbox2); @@ -194,10 +195,10 @@ delete list[ 0 ]; QTreeWidgetItem *listViewItem = new QTreeWidgetItem(linkList); listViewItem->setText(0, name); - QString icon = KProtocolInfo::icon(name); - if (icon.isEmpty()) - icon = "go-next-view"; - listViewItem->setIcon(0, krLoader->loadIcon(icon, KIconLoader::Small)); + QString iconName = KProtocolInfo::icon(name); + if (iconName.isEmpty()) + iconName = "go-next-view"; + listViewItem->setIcon(0, Icon(iconName)); if (changeCurrent) linkList->setCurrentItem(listViewItem); @@ -258,7 +259,7 @@ delete list[ 0 ]; QTreeWidgetItem *listViewItem = new QTreeWidgetItem(currentListItem); listViewItem->setText(0, name); - listViewItem->setIcon(0, krLoader->loadMimeTypeIcon(name, KIconLoader::Small)); + listViewItem->setIcon(0, KIconLoader::global()->loadMimeTypeIcon(name, KIconLoader::Small)); linkList->expandItem( currentListItem ); } } diff --git a/krusader/Konfigurator/kgstartup.cpp b/krusader/Konfigurator/kgstartup.cpp --- a/krusader/Konfigurator/kgstartup.cpp +++ b/krusader/Konfigurator/kgstartup.cpp @@ -74,6 +74,19 @@ KonfiguratorCheckBoxGroup* cbs = createCheckBoxGroup(2, 0, settings, 2 /* settings count */, panelsGrp); panelsGrid->addWidget(cbs, 2, 0, 1, 2); + QHBoxLayout *iconThemeLayout = new QHBoxLayout(); + QLabel *iconThemeLabel = new QLabel(i18n("Fallback Icon Theme:")); + iconThemeLabel->setWhatsThis(i18n("Whenever icon is not found in system icon theme, " + "this theme will be used as a fallback. " + "If fallback theme doesn't contain the icon, " + "Breeze or Oxygen will be used if any of these are present.")); + iconThemeLayout->addWidget(iconThemeLabel); + KonfiguratorEditBox *iconThemeEditBox = createEditBox("Startup", "Fallback Icon Theme", "breeze", + panelsGrp, true); + iconThemeLayout->addWidget(iconThemeEditBox); + iconThemeLayout->addStretch(1); + panelsGrid->addLayout(iconThemeLayout, 3, 0, 1, 2); + kgStartupLayout->addWidget(panelsGrp, 0, 0); // ------------------------ USERINTERFACE GROUPBOX ------------------------------ diff --git a/krusader/Konfigurator/konfigurator.cpp b/krusader/Konfigurator/konfigurator.cpp --- a/krusader/Konfigurator/konfigurator.cpp +++ b/krusader/Konfigurator/konfigurator.cpp @@ -23,8 +23,8 @@ #include "konfigurator.h" #include "../krglobal.h" +#include "../icon.h" #include "../Dialogs/krdialogs.h" -#include "../kicons.h" // QtGui #include @@ -124,27 +124,27 @@ void Konfigurator::createLayout(int startPage) { // startup - newPage(new KgStartup(firstTime, this), i18n("Startup"), i18n("Krusader's settings upon startup"), QIcon::fromTheme("go-home")); + newPage(new KgStartup(firstTime, this), i18n("Startup"), i18n("Krusader's settings upon startup"), Icon("go-home")); // panel - newPage(new KgPanel(firstTime, this), i18n("Panel"), i18n("Panel"), QIcon::fromTheme("view-choose")); + newPage(new KgPanel(firstTime, this), i18n("Panel"), i18n("Panel"), Icon("view-choose")); // colors - newPage(new KgColors(firstTime, this), i18n("Colors"), i18n("Colors"), QIcon::fromTheme("color-picker")); + newPage(new KgColors(firstTime, this), i18n("Colors"), i18n("Colors"), Icon("color-picker")); // general - newPage(new KgGeneral(firstTime, this), i18n("General"), i18n("Basic Operations"), QIcon::fromTheme("system-run")); + newPage(new KgGeneral(firstTime, this), i18n("General"), i18n("Basic Operations"), Icon("system-run")); // advanced - newPage(new KgAdvanced(firstTime, this), i18n("Advanced"), i18n("Be sure you know what you are doing."), QIcon::fromTheme("dialog-messages")); + newPage(new KgAdvanced(firstTime, this), i18n("Advanced"), i18n("Be sure you know what you are doing."), Icon("dialog-messages")); // archives newPage(new KgArchives(firstTime, this), i18n("Archives"), i18n("Customize the way Krusader deals with archives"), - QIcon::fromTheme("archive-extract")); + Icon("archive-extract")); // dependencies newPage(new KgDependencies(firstTime, this), i18n("Dependencies"), i18n("Set the full path of the external applications"), - QIcon::fromTheme("debug-run")); + Icon("debug-run")); // useractions newPage(new KgUserActions(firstTime, this), i18n("User Actions"), i18n("Configure your personal actions"), - QIcon::fromTheme("user-properties")); + Icon("user-properties")); // protocols newPage(new KgProtocols(firstTime, this), i18n("Protocols"), i18n("Link MIMEs to protocols"), - QIcon::fromTheme("document-preview")); + Icon("document-preview")); setCurrentPage(kgPages.at(startPage)); slotApplyEnable(); diff --git a/krusader/Konfigurator/konfiguratoritems.cpp b/krusader/Konfigurator/konfiguratoritems.cpp --- a/krusader/Konfigurator/konfiguratoritems.cpp +++ b/krusader/Konfigurator/konfiguratoritems.cpp @@ -19,7 +19,9 @@ *****************************************************************************/ #include "konfiguratoritems.h" + #include "../krglobal.h" +#include "../icon.h" // QtCore #include @@ -35,7 +37,7 @@ #include #include #include -#include + KonfiguratorExtension::KonfiguratorExtension(QObject *obj, QString cfgGroup, QString cfgName, bool restartNeeded, int page) @@ -433,7 +435,7 @@ connect(pToolButton, SIGNAL(clicked()), this, SLOT(slotBrowseFont())); - pToolButton->setIcon(SmallIcon("document-open")); + pToolButton->setIcon(Icon("document-open")); layout->addWidget(pToolButton); loadInitialValue(); diff --git a/krusader/Konfigurator/krresulttabledialog.cpp b/krusader/Konfigurator/krresulttabledialog.cpp --- a/krusader/Konfigurator/krresulttabledialog.cpp +++ b/krusader/Konfigurator/krresulttabledialog.cpp @@ -30,9 +30,9 @@ #include #include -#include #include "../krglobal.h" +#include "../icon.h" KrResultTableDialog::KrResultTableDialog(QWidget *parent, DialogType type, const QString& caption, const QString& heading, const QString& headerIcon, @@ -54,7 +54,7 @@ QWidget *_iconWidget = new QWidget(this); QHBoxLayout * _iconBox = new QHBoxLayout(_iconWidget); QLabel *_iconLabel = new QLabel(_iconWidget); - _iconLabel->setPixmap(krLoader->loadIcon(headerIcon, KIconLoader::Desktop, 32)); + _iconLabel->setPixmap(Icon(headerIcon).pixmap(32)); _iconLabel->setMinimumWidth(fontMetrics().maxWidth()*20); _iconLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); _iconLabel->setFixedSize(_iconLabel->sizeHint()); diff --git a/krusader/Locate/locate.cpp b/krusader/Locate/locate.cpp --- a/krusader/Locate/locate.cpp +++ b/krusader/Locate/locate.cpp @@ -21,6 +21,7 @@ #include "locate.h" #include "../kractions.h" #include "../krglobal.h" +#include "../filelisticon.h" #include "../krslots.h" #include "../krusaderview.h" #include "../Panel/krpanel.h" @@ -32,7 +33,6 @@ #include "../FileSystem/virtualfilesystem.h" #include "../KViewer/krviewer.h" #include "../panelmanager.h" -#include "../kicons.h" // QtCore #include @@ -104,7 +104,7 @@ QDrag *drag = new QDrag(this); QMimeData *mimeData = new QMimeData; - mimeData->setImageData(FL_LOADICON("file")); + mimeData->setImageData(FileListIcon("file").pixmap()); mimeData->setUrls(urls); drag->setMimeData(mimeData); drag->start(); @@ -209,12 +209,12 @@ mainLayout->addWidget(buttonBox); locateButton = new QPushButton(i18n("Locate")); - locateButton->setIcon(QIcon::fromTheme(QStringLiteral("system-search"))); + locateButton->setIcon(Icon(QStringLiteral("system-search"))); locateButton->setDefault(true); buttonBox->addButton(locateButton, QDialogButtonBox::ActionRole); updateDbButton = new QPushButton(i18n("Update DB")); - updateDbButton->setIcon(QIcon::fromTheme(QStringLiteral("view-refresh"))); + updateDbButton->setIcon(Icon(QStringLiteral("view-refresh"))); buttonBox->addButton(updateDbButton, QDialogButtonBox::ActionRole); feedStopButton = new QPushButton; @@ -590,7 +590,7 @@ return; QMimeData *mimeData = new QMimeData; - mimeData->setImageData(FL_LOADICON("file")); + mimeData->setImageData(FileListIcon("file").pixmap()); mimeData->setUrls(urls); QApplication::clipboard()->setMimeData(mimeData, QClipboard::Clipboard); @@ -676,16 +676,16 @@ if (locateIsRunning) { feedStopButton->setEnabled(true); feedStopButton->setText(i18n("Stop")); - feedStopButton->setIcon(QIcon::fromTheme(QStringLiteral("process-stop"))); + feedStopButton->setIcon(Icon(QStringLiteral("process-stop"))); } else { if (resultList->topLevelItemCount() == 0) { feedStopButton->setEnabled(false); feedStopButton->setText(i18n("Stop")); - feedStopButton->setIcon(QIcon::fromTheme(QStringLiteral("process-stop"))); + feedStopButton->setIcon(Icon(QStringLiteral("process-stop"))); } else { feedStopButton->setEnabled(true); feedStopButton->setText(i18n("Feed to listbox")); - feedStopButton->setIcon(QIcon::fromTheme(QStringLiteral("list-add"))); + feedStopButton->setIcon(Icon(QStringLiteral("list-add"))); } } } diff --git a/krusader/MountMan/kmountman.cpp b/krusader/MountMan/kmountman.cpp --- a/krusader/MountMan/kmountman.cpp +++ b/krusader/MountMan/kmountman.cpp @@ -42,6 +42,7 @@ #include #include "../krglobal.h" +#include "../icon.h" #include "../kractions.h" #include "../defaults.h" #include "../Dialogs/krdialogs.h" @@ -57,7 +58,7 @@ KMountMan::KMountMan(QWidget *parent) : QObject(), _operational(false), waiting(false), mountManGui(0), parentWindow(parent) { - _action = new KToolBarPopupAction(QIcon::fromTheme("kr_mountman"), i18n("&MountMan..."), this); + _action = new KToolBarPopupAction(Icon("kr_mountman"), i18n("&MountMan..."), this); connect(_action, &QAction::triggered, this, &KMountMan::mainWindow); connect(_action->menu(), &QMenu::aboutToShow, this, &KMountMan::quickList); _manageAction = _action->menu()->addAction(i18n("Open &MountMan")); diff --git a/krusader/MountMan/kmountmangui.cpp b/krusader/MountMan/kmountmangui.cpp --- a/krusader/MountMan/kmountmangui.cpp +++ b/krusader/MountMan/kmountmangui.cpp @@ -22,8 +22,8 @@ #include "kmountmangui.h" #include "../krglobal.h" +#include "../icon.h" #include "../Dialogs/krspecialwidgets.h" -#include "../kicons.h" #include "../defaults.h" #include "../FileSystem/filesystem.h" @@ -83,7 +83,7 @@ mainLayout->addWidget(buttonBox); ejectButton = new QPushButton(i18n("&Eject")); - ejectButton->setIcon(QIcon::fromTheme(QStringLiteral("media-eject"))); + ejectButton->setIcon(Icon(QStringLiteral("media-eject"))); ejectButton->setEnabled(false); buttonBox->addButton(ejectButton, QDialogButtonBox::ActionRole); diff --git a/krusader/Panel/PanelView/krview.cpp b/krusader/Panel/PanelView/krview.cpp --- a/krusader/Panel/PanelView/krview.cpp +++ b/krusader/Panel/PanelView/krview.cpp @@ -29,7 +29,7 @@ #include "../FileSystem/krpermhandler.h" #include "../Filter/filterdialog.h" #include "../defaults.h" -#include "../kicons.h" +#include "../filelisticon.h" #include "../krcolorcache.h" #include "../krglobal.h" #include "../krpreviews.h" @@ -102,9 +102,9 @@ return ; // don't drag an empty thing QPixmap px; if (items.count() > 1 || _view->getCurrentKrViewItem() == 0) - px = FL_LOADICON("queue"); // how much are we dragging + px = FileListIcon("document-multiple").pixmap(); // we are dragging multiple items else - px = _view->getCurrentKrViewItem() ->icon(); + px = _view->getCurrentKrViewItem()->icon(); emit letsDrag(items, px); } @@ -345,7 +345,7 @@ // first try the cache if (!QPixmapCache::find(cacheName, icon)) { - icon = processIcon(krLoader->loadIcon(icon_name, KIconLoader::Desktop, size), + icon = processIcon(Icon(icon_name).pixmap(size), dim, dimColor, dimFactor, fileitem->isSymLink()); // insert it into the cache QPixmapCache::insert(cacheName, icon); diff --git a/krusader/Panel/krfiletreeview.cpp b/krusader/Panel/krfiletreeview.cpp --- a/krusader/Panel/krfiletreeview.cpp +++ b/krusader/Panel/krfiletreeview.cpp @@ -23,6 +23,7 @@ #include "../defaults.h" #include "../krglobal.h" +#include "../icon.h" #include "../FileSystem/filesystemprovider.h" #include @@ -245,19 +246,19 @@ // TODO nice to have: "open with" // cut/copy/paste - QAction* cutAction = new QAction(QIcon::fromTheme(QStringLiteral("edit-cut")), i18nc("@action:inmenu", "Cut"), this); + QAction* cutAction = new QAction(Icon(QStringLiteral("edit-cut")), i18nc("@action:inmenu", "Cut"), this); cutAction->setEnabled(capabilities.supportsMoving()); connect(cutAction, &QAction::triggered, this, [=]() { copyToClipBoard(fileItem, true); }); popup->addAction(cutAction); - QAction* copyAction = new QAction(QIcon::fromTheme(QStringLiteral("edit-copy")), i18nc("@action:inmenu", "Copy"), this); + QAction* copyAction = new QAction(Icon(QStringLiteral("edit-copy")), i18nc("@action:inmenu", "Copy"), this); connect(copyAction, &QAction::triggered, this, [=]() { copyToClipBoard(fileItem, false); }); popup->addAction(copyAction); const QMimeData *mimeData = QApplication::clipboard()->mimeData(); bool canPaste; const QString text = KIO::pasteActionText(mimeData, &canPaste, fileItem); - QAction* pasteAction = new QAction(QIcon::fromTheme(QStringLiteral("edit-paste")), text, this); + QAction* pasteAction = new QAction(Icon(QStringLiteral("edit-paste")), text, this); connect(pasteAction, &QAction::triggered, this, [=]() { KIO::PasteJob *job = KIO::paste(QApplication::clipboard()->mimeData(), fileItem.url()); KJobWidgets::setWindow(job, this); @@ -271,7 +272,7 @@ // trash if (KConfigGroup(krConfig, "General").readEntry("Move To Trash", _MoveToTrash)) { - QAction* moveToTrashAction = new QAction(QIcon::fromTheme(QStringLiteral("user-trash")), + QAction* moveToTrashAction = new QAction(Icon(QStringLiteral("user-trash")), i18nc("@action:inmenu", "Move to Trash"), this); const bool enableMoveToTrash = capabilities.isLocal() && capabilities.supportsMoving(); moveToTrashAction->setEnabled(enableMoveToTrash); @@ -282,7 +283,7 @@ } // delete - QAction *deleteAction = new QAction(QIcon::fromTheme(QStringLiteral("edit-delete")), + QAction *deleteAction = new QAction(Icon(QStringLiteral("edit-delete")), i18nc("@action:inmenu", "Delete"), this); deleteAction->setEnabled(capabilities.supportsDeleting()); connect(deleteAction, &QAction::triggered, this, [=]() { @@ -295,7 +296,7 @@ // properties if (!fileItem.isNull()) { QAction* propertiesAction = new QAction(i18nc("@action:inmenu", "Properties"), this); - propertiesAction->setIcon(QIcon::fromTheme(QStringLiteral("document-properties"))); + propertiesAction->setIcon(Icon(QStringLiteral("document-properties"))); connect(propertiesAction, &QAction::triggered, this, [=]() { KPropertiesDialog* dialog = new KPropertiesDialog(fileItem.url(), this); dialog->setAttribute(Qt::WA_DeleteOnClose); diff --git a/krusader/Panel/krsearchbar.cpp b/krusader/Panel/krsearchbar.cpp --- a/krusader/Panel/krsearchbar.cpp +++ b/krusader/Panel/krsearchbar.cpp @@ -25,6 +25,7 @@ #include "../FileSystem/dirlisterinterface.h" #include "../defaults.h" #include "../krglobal.h" +#include "../icon.h" #include #include @@ -35,7 +36,6 @@ #include #include -#include #include @@ -45,7 +45,7 @@ // close button QToolButton *closeButton = new QToolButton(this); closeButton->setAutoRaise(true); - closeButton->setIcon(QIcon::fromTheme(QStringLiteral("dialog-close"))); + closeButton->setIcon(Icon(QStringLiteral("dialog-close"))); closeButton->setToolTip(i18n("Close the search bar")); connect(closeButton, SIGNAL(clicked()), SLOT(hideBar())); @@ -74,13 +74,13 @@ connect(_textBox, SIGNAL(currentTextChanged(QString)), SLOT(onSearchChange())); QToolButton *saveSearchBtn = new QToolButton(this); - saveSearchBtn->setIcon(krLoader->loadIcon("document-save", KIconLoader::Toolbar, 16)); + saveSearchBtn->setIcon(Icon("document-save")); saveSearchBtn->setFixedSize(20, 20); saveSearchBtn->setToolTip(i18n("Save the current search string")); connect(saveSearchBtn, SIGNAL(clicked()), this, SLOT(saveSearchString())); _openSelectDialogBtn = new QToolButton(this); - _openSelectDialogBtn->setIcon(krLoader->loadIcon("configure", KIconLoader::Toolbar, 16)); + _openSelectDialogBtn->setIcon(Icon("configure")); _openSelectDialogBtn->setFixedSize(20, 20); _openSelectDialogBtn->setToolTip(i18n("Open selection dialog")); diff --git a/krusader/Panel/listpanel.cpp b/krusader/Panel/listpanel.cpp --- a/krusader/Panel/listpanel.cpp +++ b/krusader/Panel/listpanel.cpp @@ -47,7 +47,6 @@ #include #include -#include #include #include #include @@ -71,7 +70,7 @@ #include "PanelView/krviewitem.h" #include "../defaults.h" -#include "../kicons.h" +#include "../icon.h" #include "../krservices.h" #include "../krslots.h" #include "../krusader.h" @@ -238,7 +237,7 @@ ADD_WIDGET(quickSizeCalcProgress); cancelQuickSizeCalcButton = new QToolButton(this); cancelQuickSizeCalcButton->hide(); - cancelQuickSizeCalcButton->setIcon(krLoader->loadIcon("dialog-cancel", KIconLoader::Toolbar, 16)); + cancelQuickSizeCalcButton->setIcon(Icon("dialog-cancel")); cancelQuickSizeCalcButton->setToolTip(i18n("Cancel directory space calculation")); ADD_WIDGET(cancelQuickSizeCalcButton); @@ -250,15 +249,15 @@ // a cancel button for the filesystem refresh and preview job cancelProgressButton = new QToolButton(this); cancelProgressButton->hide(); - cancelProgressButton->setIcon(krLoader->loadIcon("dialog-cancel", KIconLoader::Toolbar, 16)); + cancelProgressButton->setIcon(Icon("dialog-cancel")); connect(cancelProgressButton, SIGNAL(clicked()), this, SLOT(cancelProgress())); ADD_WIDGET(cancelProgressButton); // button for changing the panel sidebar position in the panel sidebarPositionButton = new QToolButton(this); sidebarPositionButton->hide(); sidebarPositionButton->setAutoRaise(true); - sidebarPositionButton->setIcon(krLoader->loadIcon("exchange-positions", KIconLoader::Toolbar, 16)); + sidebarPositionButton->setIcon(Icon("exchange-positions")); sidebarPositionButton->setToolTip(i18n("Move Sidebar clockwise")); connect(sidebarPositionButton, &QToolButton::clicked, [this]() { // moving position clockwise @@ -268,7 +267,7 @@ // a quick button to open the sidebar sidebarButton = new QToolButton(this); sidebarButton->setAutoRaise(true); - sidebarButton->setIcon(krLoader->loadIcon("arrow-up", KIconLoader::Toolbar, 16)); + sidebarButton->setIcon(Icon("arrow-up")); connect(sidebarButton, &QToolButton::clicked, this, &ListPanel::toggleSidebar); sidebarButton->setToolTip(i18n("Open the Sidebar")); ADD_WIDGET(sidebarButton); @@ -290,7 +289,7 @@ // create the button for sync-browsing syncBrowseButton = new QToolButton(toolbar); - syncBrowseButton->setIcon(QIcon::fromTheme("kr_syncbrowse_off")); + syncBrowseButton->setIcon(Icon("kr_syncbrowse_off")); syncBrowseButton->setCheckable(true); const QString syncBrowseText = i18n("This button toggles the sync-browse mode.\n" @@ -300,7 +299,7 @@ syncBrowseButton->setToolTip(syncBrowseText); connect(syncBrowseButton, &QToolButton::toggled, [=](bool checked) { syncBrowseButton->setIcon( - QIcon::fromTheme(checked ? "kr_syncbrowse_on" : "kr_syncbrowse_off")); + Icon(checked ? "kr_syncbrowse_on" : "kr_syncbrowse_off")); }); syncBrowseButton->setAutoRaise(true); toolbarLayout->addWidget(syncBrowseButton); @@ -578,14 +577,14 @@ } sidebar->show(); - sidebarButton->setIcon(krLoader->loadIcon("arrow-down", KIconLoader::Toolbar, 16)); + sidebarButton->setIcon(Icon("arrow-down")); sidebarButton->setToolTip(i18n("Close the Sidebar")); sidebarPositionButton->show(); } else { sidebarSplitterSizes.clear(); sidebarSplitterSizes = sidebarSplitter->sizes(); sidebar->hide(); - sidebarButton->setIcon(krLoader->loadIcon("arrow-up", KIconLoader::Toolbar, 16)); + sidebarButton->setIcon(Icon("arrow-up")); sidebarButton->setToolTip(i18n("Open the Sidebar")); sidebarPositionButton->hide(); diff --git a/krusader/Panel/listpanelactions.cpp b/krusader/Panel/listpanelactions.cpp --- a/krusader/Panel/listpanelactions.cpp +++ b/krusader/Panel/listpanelactions.cpp @@ -26,6 +26,7 @@ #include "../krmainwindow.h" #include "../Dialogs/krdialogs.h" #include "../KViewer/krviewer.h" +#include "../icon.h" // QtCore #include @@ -47,7 +48,7 @@ QList views = KrViewFactory::registeredViews(); for(int i = 0; i < views.count(); i++) { KrViewInstance *inst = views[i]; - QAction *action = new QAction(QIcon::fromTheme(inst->icon()), inst->description(), group); + QAction *action = new QAction(Icon(inst->icon()), inst->description(), group); action->setCheckable(true); connect(action, SIGNAL(triggered()), mapper, SLOT(map())); mapper->setMapping(action, inst->id()); diff --git a/krusader/Panel/panelcontextmenu.cpp b/krusader/Panel/panelcontextmenu.cpp --- a/krusader/Panel/panelcontextmenu.cpp +++ b/krusader/Panel/panelcontextmenu.cpp @@ -27,7 +27,6 @@ #include #include #include -#include #include #include #include @@ -43,6 +42,7 @@ #include "PanelView/krview.h" #include "PanelView/krviewitem.h" #include "../defaults.h" +#include "../icon.h" #include "../krservices.h" #include "../krslots.h" #include "../krusader.h" @@ -136,7 +136,7 @@ if (file->isDir()) { QAction * openTab = addAction(i18n("Open in New Tab")); openTab->setData(QVariant(OPEN_TAB_ID)); - openTab->setIcon(krLoader->loadIcon("tab-new", KIconLoader::Panel)); + openTab->setIcon(Icon("tab-new")); openTab->setText(i18n("Open in New Tab")); } // if the file can be browsed as archive... @@ -149,7 +149,7 @@ // ...it will not be browsed as a directory by default, but add an option for it QAction *browseAct = addAction(i18n("Browse")); browseAct->setData(QVariant(BROWSE_ID)); - browseAct->setIcon(krLoader->loadIcon("", KIconLoader::Panel)); + browseAct->setIcon(Icon()); browseAct->setText(i18n("Browse Archive")); } addSeparator(); @@ -163,7 +163,7 @@ QAction *previewAction = addMenu(&preview); previewAction->setData(QVariant(PREVIEW_ID)); previewAction->setText(i18n("Preview")); - previewAction->setIcon(krLoader->loadIcon("document-print-preview", KIconLoader::Small)); + previewAction->setIcon(Icon("document-print-preview")); } // -------------- Open with: try to find-out which apps can open the file @@ -181,18 +181,18 @@ for (int i = 0; i < offers.count(); ++i) { QExplicitlySharedDataPointer service = offers[i]; if (service->isValid() && service->isApplication()) { - openWithMenu->addAction(krLoader->loadIcon(service->icon(), KIconLoader::Small), + openWithMenu->addAction(Icon(service->icon()), service->name())->setData(QVariant(SERVICE_LIST_ID + i)); } } openWithMenu->addSeparator(); if (!multipleSelections && file->isDir()) - openWithMenu->addAction(krLoader->loadIcon("utilities-terminal", KIconLoader::Small), + openWithMenu->addAction(Icon("utilities-terminal"), i18n("Terminal"))->setData(QVariant(OPEN_TERM_ID)); openWithMenu->addAction(i18n("Other..."))->setData(QVariant(CHOOSE_ID)); QAction *openWithAction = addMenu(openWithMenu); openWithAction->setText(i18n("Open With")); - openWithAction->setIcon(krLoader->loadIcon("document-open", KIconLoader::Small)); + openWithAction->setIcon(Icon("document-open")); addSeparator(); } @@ -234,11 +234,11 @@ // -------- MOVE TO TRASH if (KConfigGroup(krConfig, "General").readEntry("Move To Trash", _MoveToTrash) && panel->func->files()->canMoveToTrash(fileNames)) { - addAction(krLoader->loadIcon("user-trash", KIconLoader::Small), + addAction(Icon("user-trash"), i18n("Move to Trash"))->setData(QVariant(TRASH_ID)); } // -------- DELETE - addAction(krLoader->loadIcon("edit-delete", KIconLoader::Small), + addAction(Icon("edit-delete"), i18n("Delete"))->setData(QVariant(DELETE_ID)); // -------- SHRED - only one file /* if ( panel->func->files() ->getType() == filesystem:fileSystemM_NORMAL && @@ -257,7 +257,7 @@ } QAction *linkAction = addMenu(linkMenu); linkAction->setText(i18n("Link Handling")); - linkAction->setIcon(krLoader->loadIcon("insert-link", KIconLoader::Small)); + linkAction->setIcon(Icon("insert-link")); } addSeparator(); @@ -278,7 +278,7 @@ // --------- send by mail if (KrServices::supportedTools().contains("MAIL") && !file->isDir()) { - addAction(krLoader->loadIcon("mail-send", KIconLoader::Small), + addAction(Icon("mail-send"), i18n("Send by Email"))->setData(QVariant(SEND_BY_EMAIL_ID)); } @@ -315,14 +315,14 @@ { QMenu *createNewMenu = new QMenu(this); - createNewMenu->addAction(krLoader->loadIcon("folder", KIconLoader::Small), + createNewMenu->addAction(Icon("folder"), i18n("Folder..."))->setData(QVariant(MKDIR_ID)); - createNewMenu->addAction(krLoader->loadIcon("text-plain", KIconLoader::Small), + createNewMenu->addAction(Icon("text-plain"), i18n("Text File..."))->setData(QVariant(NEW_TEXT_FILE_ID)); QAction *newMenuAction = addMenu(createNewMenu); newMenuAction->setText(i18n("Create New")); - newMenuAction->setIcon(krLoader->loadIcon("document-new", KIconLoader::Small)); + newMenuAction->setIcon(Icon("document-new")); } void PanelContextMenu::performAction(int id) diff --git a/krusader/Panel/sidebar.cpp b/krusader/Panel/sidebar.cpp --- a/krusader/Panel/sidebar.cpp +++ b/krusader/Panel/sidebar.cpp @@ -26,7 +26,7 @@ #include "panelfunc.h" #include "viewactions.h" #include "../defaults.h" -#include "../kicons.h" +#include "../icon.h" #include "../Dialogs/krsqueezedtextlabel.h" #include "../FileSystem/fileitem.h" #include "../FileSystem/filesystem.h" @@ -44,7 +44,7 @@ #include #include -#include + Sidebar::Sidebar(QWidget *parent) : QWidget(parent), stack(0), imageFilePreview(0), pjob(0) { @@ -66,28 +66,28 @@ treeBtn = new QToolButton(this); treeBtn->setToolTip(i18n("Tree Panel: a tree view of the local file system")); - treeBtn->setIcon(krLoader->loadIcon("view-list-tree", KIconLoader::Toolbar, 16)); + treeBtn->setIcon(Icon("view-list-tree")); treeBtn->setFixedSize(20, 20); treeBtn->setCheckable(true); btns->addButton(treeBtn, Tree); previewBtn = new QToolButton(this); previewBtn->setToolTip(i18n("Preview Panel: display a preview of the current file")); - previewBtn->setIcon(krLoader->loadIcon("view-preview", KIconLoader::Toolbar, 16)); + previewBtn->setIcon(Icon("view-preview")); previewBtn->setFixedSize(20, 20); previewBtn->setCheckable(true); btns->addButton(previewBtn, Preview); viewerBtn = new QToolButton(this); viewerBtn->setToolTip(i18n("View Panel: view the current file")); - viewerBtn->setIcon(krLoader->loadIcon("zoom-original", KIconLoader::Toolbar, 16)); + viewerBtn->setIcon(Icon("zoom-original")); viewerBtn->setFixedSize(20, 20); viewerBtn->setCheckable(true); btns->addButton(viewerBtn, View); duBtn = new QToolButton(this); duBtn->setToolTip(i18n("Disk Usage Panel: view the usage of a folder")); - duBtn->setIcon(krLoader->loadIcon("kr_diskusage", KIconLoader::Toolbar, 16)); + duBtn->setIcon(Icon("kr_diskusage")); duBtn->setFixedSize(20, 20); duBtn->setCheckable(true); btns->addButton(duBtn, DskUsage); diff --git a/krusader/Search/krsearchdialog.cpp b/krusader/Search/krsearchdialog.cpp --- a/krusader/Search/krsearchdialog.cpp +++ b/krusader/Search/krsearchdialog.cpp @@ -59,9 +59,9 @@ #include "../Panel/krsearchbar.h" #include "../Panel/panelfunc.h" #include "../defaults.h" -#include "../kicons.h" #include "../kractions.h" #include "../krglobal.h" +#include "../filelisticon.h" #include "../krservices.h" #include "../krslots.h" #include "../krusaderview.h" @@ -135,7 +135,7 @@ KConfigGroup group(krConfig, "Search"); setWindowTitle(i18n("Krusader::Search")); - setWindowIcon(QIcon::fromTheme("system-search")); + setWindowIcon(Icon("system-search")); QGridLayout* searchBaseLayout = new QGridLayout(this); searchBaseLayout->setSpacing(6); @@ -165,25 +165,25 @@ mainFeedToListBoxBtn = new QPushButton(this); mainFeedToListBoxBtn->setText(i18n("Feed to listbox")); - mainFeedToListBoxBtn->setIcon(QIcon::fromTheme("list-add")); + mainFeedToListBoxBtn->setIcon(Icon("list-add")); mainFeedToListBoxBtn->setEnabled(false); buttonsLayout->addWidget(mainFeedToListBoxBtn); mainSearchBtn = new QPushButton(this); mainSearchBtn->setText(i18n("Search")); - mainSearchBtn->setIcon(QIcon::fromTheme("edit-find")); + mainSearchBtn->setIcon(Icon("edit-find")); mainSearchBtn->setDefault(true); buttonsLayout->addWidget(mainSearchBtn); mainStopBtn = new QPushButton(this); mainStopBtn->setEnabled(false); mainStopBtn->setText(i18n("Stop")); - mainStopBtn->setIcon(QIcon::fromTheme("process-stop")); + mainStopBtn->setIcon(Icon("process-stop")); buttonsLayout->addWidget(mainStopBtn); mainCloseBtn = new QPushButton(this); mainCloseBtn->setText(i18n("Close")); - mainCloseBtn->setIcon(QIcon::fromTheme("dialog-close")); + mainCloseBtn->setIcon(Icon("dialog-close")); buttonsLayout->addWidget(mainCloseBtn); searchBaseLayout->addLayout(buttonsLayout, 1, 0); @@ -654,7 +654,7 @@ return; QMimeData *mimeData = new QMimeData; - mimeData->setImageData(FL_LOADICON("file")); + mimeData->setImageData(FileListIcon("file").pixmap()); mimeData->setUrls(urls); QApplication::clipboard()->setMimeData(mimeData, QClipboard::Clipboard); diff --git a/krusader/Synchronizer/synchronizedialog.cpp b/krusader/Synchronizer/synchronizedialog.cpp --- a/krusader/Synchronizer/synchronizedialog.cpp +++ b/krusader/Synchronizer/synchronizedialog.cpp @@ -21,6 +21,7 @@ #include "synchronizedialog.h" #include "../FileSystem/krpermhandler.h" #include "../krglobal.h" +#include "../icon.h" #include "../defaults.h" // QtWidgets @@ -109,18 +110,18 @@ btnStart = new QPushButton(hboxWidget); btnStart->setText(i18n("&Start")); - btnStart->setIcon(QIcon::fromTheme("media-playback-start")); + btnStart->setIcon(Icon("media-playback-start")); hbox->addWidget(btnStart); btnPause = new QPushButton(hboxWidget); btnPause->setEnabled(false); btnPause->setText(i18n("&Pause")); - btnPause->setIcon(QIcon::fromTheme("media-playback-pause")); + btnPause->setIcon(Icon("media-playback-pause")); hbox->addWidget(btnPause); QPushButton *btnClose = new QPushButton(hboxWidget); btnClose->setText(i18n("&Close")); - btnClose->setIcon(QIcon::fromTheme("dialog-close")); + btnClose->setIcon(Icon("dialog-close")); hbox->addWidget(btnClose); layout->addWidget(hboxWidget); diff --git a/krusader/Synchronizer/synchronizergui.cpp b/krusader/Synchronizer/synchronizergui.cpp --- a/krusader/Synchronizer/synchronizergui.cpp +++ b/krusader/Synchronizer/synchronizergui.cpp @@ -20,6 +20,7 @@ #include "synchronizergui.h" #include "../krglobal.h" +#include "../filelisticon.h" #include "../defaults.h" #include "../krusaderview.h" #include "../Panel/listpanel.h" @@ -30,7 +31,6 @@ #include "../FileSystem/krquery.h" #include "../krservices.h" #include "../krslots.h" -#include "../kicons.h" #include "synchronizedialog.h" #include "feedtolistboxdialog.h" #include "synchronizercolors.h" @@ -113,7 +113,7 @@ QDrag *drag = new QDrag(this); QMimeData *mimeData = new QMimeData; - mimeData->setImageData(FL_LOADICON(isLeft ? "arrow-left-double" : "arrow-right-double")); + mimeData->setImageData(FileListIcon(isLeft ? "arrow-left-double" : "arrow-right-double").pixmap()); mimeData->setUrls(urls); drag->setMimeData(mimeData); drag->start(); @@ -469,7 +469,7 @@ buttons->addWidget(profileManager); btnSwapSides = new QPushButton(this); - btnSwapSides->setIcon(QIcon::fromTheme("document-swap")); + btnSwapSides->setIcon(Icon("document-swap")); btnSwapSides->setShortcut(Qt::CTRL + Qt::Key_S); btnSwapSides->setWhatsThis(i18n("Swap sides (Ctrl+S).")); buttons->addWidget(btnSwapSides); @@ -482,7 +482,7 @@ btnCompareDirs = new QPushButton(this); btnCompareDirs->setText(i18n("Compare")); - btnCompareDirs->setIcon(QIcon::fromTheme("kr_comparedirs")); + btnCompareDirs->setIcon(Icon("kr_comparedirs")); btnCompareDirs->setDefault(true); buttons->addWidget(btnCompareDirs); @@ -498,26 +498,26 @@ btnStopComparing = new QPushButton(this); btnStopComparing->setText(i18n("Stop")); - btnStopComparing->setIcon(QIcon::fromTheme("process-stop")); + btnStopComparing->setIcon(Icon("process-stop")); btnStopComparing->setEnabled(false); buttons->addWidget(btnStopComparing); btnFeedToListBox = new QPushButton(this); btnFeedToListBox->setText(i18n("Feed to listbox")); - btnFeedToListBox->setIcon(QIcon::fromTheme("list-add")); + btnFeedToListBox->setIcon(Icon("list-add")); btnFeedToListBox->setEnabled(false); btnFeedToListBox->hide(); buttons->addWidget(btnFeedToListBox); btnSynchronize = new QPushButton(this); btnSynchronize->setText(i18n("Synchronize")); - btnSynchronize->setIcon(QIcon::fromTheme("folder-sync")); + btnSynchronize->setIcon(Icon("folder-sync")); btnSynchronize->setEnabled(false); buttons->addWidget(btnSynchronize); QPushButton *btnCloseSync = new QPushButton(this); btnCloseSync->setText(i18n("Close")); - btnCloseSync->setIcon(QIcon::fromTheme("dialog-close")); + btnCloseSync->setIcon(Icon("dialog-close")); buttons->addWidget(btnCloseSync); synchGrid->addLayout(buttons, 1, 0); @@ -1119,7 +1119,7 @@ } if (listItem) { - listItem->setIcon(0, QIcon::fromTheme(isDir ? "folder" : "document-new")); + listItem->setIcon(0, Icon(isDir ? "folder" : "document-new")); if (!item->isMarked()) listItem->setHidden(true); else @@ -1564,9 +1564,13 @@ const QString &text, bool textAndIcon) { QPushButton *button = new QPushButton(parent); - if (!text.isEmpty() && (textAndIcon || !QIcon::hasThemeIcon(iconName))) + bool iconExists = Icon::exists(iconName); + if (!text.isEmpty() && (textAndIcon || !iconExists)) { button->setText(text); - button->setIcon(QIcon::fromTheme(iconName)); + } + if (iconExists) { + button->setIcon(Icon(iconName)); + } button->setCheckable(true); button->setChecked(checked); button->setShortcut(shortCut); @@ -1608,7 +1612,7 @@ return; QMimeData *mimeData = new QMimeData; - mimeData->setImageData(FL_LOADICON(isLeft ? "arrow-left-double" : "arrow-right-double")); + mimeData->setImageData(FileListIcon(isLeft ? "arrow-left-double" : "arrow-right-double").pixmap()); mimeData->setUrls(urls); QApplication::clipboard()->setMimeData(mimeData, QClipboard::Clipboard); diff --git a/krusader/UserAction/kraction.cpp b/krusader/UserAction/kraction.cpp --- a/krusader/UserAction/kraction.cpp +++ b/krusader/UserAction/kraction.cpp @@ -56,6 +56,7 @@ #include "useraction.h" #include "../GUI/terminaldock.h" #include "../krglobal.h" +#include "../icon.h" #include "../krusaderview.h" #include "../krservices.h" #include "../defaults.h" @@ -481,7 +482,7 @@ setToolTip(i18n(e.text().toUtf8().constData())); else if (e.tagName() == "icon") - setIcon(QIcon::fromTheme(_iconName = e.text())); + setIcon(Icon(_iconName = e.text())); else if (e.tagName() == "category") setCategory(i18n(e.text().toUtf8().constData())); diff --git a/krusader/actionsbase.cpp b/krusader/actionsbase.cpp --- a/krusader/actionsbase.cpp +++ b/krusader/actionsbase.cpp @@ -21,6 +21,7 @@ #include "actionsbase.h" #include "krmainwindow.h" +#include "icon.h" // QtWidgets #include @@ -48,12 +49,12 @@ if (icon == 0) return (QAction *)(new KToggleAction(text, this)); else - return (QAction *)(new KToggleAction(QIcon::fromTheme(icon), text, this)); + return (QAction *)(new KToggleAction(Icon(icon), text, this)); } else { if (icon == 0) return new QAction(text, this); else - return new QAction(QIcon::fromTheme(icon), text, this); + return new QAction(Icon(icon), text, this); } } diff --git a/krusader/kicons.h b/krusader/filelisticon.h rename from krusader/kicons.h rename to krusader/filelisticon.h --- a/krusader/kicons.h +++ b/krusader/filelisticon.h @@ -1,7 +1,6 @@ /***************************************************************************** - * Copyright (C) 2000 Shie Erlich * - * Copyright (C) 2000 Rafi Yanai * - * Copyright (C) 2004-2018 Krusader Krew [https://krusader.org] * + * Copyright (C) 2018 Nikita Melnichenko * + * Copyright (C) 2018 Krusader Krew [https://krusader.org] * * * * This file is part of Krusader [https://krusader.org]. * * * @@ -19,13 +18,25 @@ * along with Krusader. If not, see [http://www.gnu.org/licenses/]. * *****************************************************************************/ -#ifndef KICONS_H -#define KICONS_H +#ifndef FILELISTICON_H +#define FILELISTICON_H + +#include "icon.h" // QtGui #include -// used only for calls within the kfilelist framework, handles icon sizes -QPixmap FL_LOADICON(QString name); -#endif +class FileListIcon : public Icon +{ +public: + explicit FileListIcon(QString name) : Icon(name) {} + + /// Load pixmap of standard file list icon size + QPixmap pixmap() const; + + /// Get icon size as configured by user + QSize size() const; +}; + +#endif // FILELISTICON_H diff --git a/krusader/kicons.cpp b/krusader/filelisticon.cpp rename from krusader/kicons.cpp rename to krusader/filelisticon.cpp --- a/krusader/kicons.cpp +++ b/krusader/filelisticon.cpp @@ -1,7 +1,6 @@ /***************************************************************************** - * Copyright (C) 2000 Shie Erlich * - * Copyright (C) 2000 Rafi Yanai * - * Copyright (C) 2004-2018 Krusader Krew [https://krusader.org] * + * Copyright (C) 2018 Nikita Melnichenko * + * Copyright (C) 2018 Krusader Krew [https://krusader.org] * * * * This file is part of Krusader [https://krusader.org]. * * * @@ -19,23 +18,21 @@ * along with Krusader. If not, see [http://www.gnu.org/licenses/]. * *****************************************************************************/ -#include "kicons.h" +#include "filelisticon.h" + #include "krglobal.h" #include "defaults.h" -// QtCore -#include -// QtGui -#include -// QtWidgets -#include - #include -#include -QPixmap FL_LOADICON(QString name) + +QSize FileListIcon::size() const +{ + int linearSize = KConfigGroup(krConfig, "Look&Feel").readEntry("Filelist Icon Size", _FilelistIconSize).toInt(); + return QSize(linearSize, linearSize); +} + +QPixmap FileListIcon::pixmap() const { - KConfigGroup group(krConfig, "Look&Feel"); - int size = (group.readEntry("Filelist Icon Size", _FilelistIconSize)).toInt(); - return krLoader->loadIcon(name, KIconLoader::Desktop, size); + return QIcon::pixmap(size()); } diff --git a/krusader/kicons.cpp b/krusader/icon.h rename from krusader/kicons.cpp rename to krusader/icon.h --- a/krusader/kicons.cpp +++ b/krusader/icon.h @@ -1,7 +1,6 @@ /***************************************************************************** - * Copyright (C) 2000 Shie Erlich * - * Copyright (C) 2000 Rafi Yanai * - * Copyright (C) 2004-2018 Krusader Krew [https://krusader.org] * + * Copyright (C) 2018 Nikita Melnichenko * + * Copyright (C) 2018 Krusader Krew [https://krusader.org] * * * * This file is part of Krusader [https://krusader.org]. * * * @@ -19,23 +18,31 @@ * along with Krusader. If not, see [http://www.gnu.org/licenses/]. * *****************************************************************************/ -#include "kicons.h" -#include "krglobal.h" -#include "defaults.h" +#ifndef ICON_H +#define ICON_H -// QtCore -#include // QtGui -#include -// QtWidgets -#include +#include +#include -#include -#include - -QPixmap FL_LOADICON(QString name) +/** + * @class Icon + * + * Universal icon class for Krusader. + * + * There is a list of configured themes that Icon searches in. + * The order of themes is the following: active theme, theme specified by user, + * fallback themes that provide complete icon set for Krusader. + * If icon is not found in any configured theme, the fallback icon is used. + */ +class Icon : public QIcon { - KConfigGroup group(krConfig, "Look&Feel"); - int size = (group.readEntry("Filelist Icon Size", _FilelistIconSize)).toInt(); - return krLoader->loadIcon(name, KIconLoader::Desktop, size); -} +public: + Icon(); + explicit Icon(QString name); + + /// Check if icon exists in any configured theme + static bool exists(QString iconName); +}; + +#endif // ICON_H diff --git a/krusader/icon.cpp b/krusader/icon.cpp new file mode 100644 --- /dev/null +++ b/krusader/icon.cpp @@ -0,0 +1,244 @@ +/***************************************************************************** + * Copyright (C) 2018 Nikita Melnichenko * + * Copyright (C) 2018 Krusader Krew [https://krusader.org] * + * * + * This file is part of Krusader [https://krusader.org]. * + * * + * Krusader is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * Krusader is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with Krusader. If not, see [http://www.gnu.org/licenses/]. * + *****************************************************************************/ + +#include "icon.h" + +#include "krglobal.h" + +// QtCore +#include +#include +#include +#include +// QtGui +#include +#include + +#include +#include + + +static const int cacheSize = 500; +static const char *missingIconPath = ":/icons/icon-missing.svgz"; + + +static inline QStringList getThemeFallbackList() +{ + QStringList themes; + + // add user fallback theme if set + if (krConfig) { + const KConfigGroup group(krConfig, QStringLiteral("Startup")); + QString userFallbackTheme = group.readEntry("Fallback Icon Theme", QString()); + if (!userFallbackTheme.isEmpty()) { + themes << userFallbackTheme; + } + } + + // Breeze and Oxygen are weak dependencies of Krusader, + // i.e. each of the themes provide a complete set of icons used in the interface + themes << "breeze" << "oxygen"; + + return themes; +} + + +class IconEngine : public QIconEngine +{ +public: + IconEngine(QString iconName, QIcon fallbackIcon) : _iconName(iconName), _fallbackIcon(fallbackIcon) + { + _themeFallbackList = getThemeFallbackList(); + } + + virtual void paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state) override; + virtual QPixmap pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state) override; + + virtual IconEngine *clone() const override + { + return new IconEngine(*this); + } + +private: + QString _iconName; + QStringList _themeFallbackList; + QIcon _fallbackIcon; +}; + +Icon::Icon() : QIcon() +{ +} + +Icon::Icon(QString name) : QIcon(new IconEngine(name, QIcon(missingIconPath))) +{ +} + +struct IconSearchResult +{ + QIcon icon; ///< icon returned by search; null icon if not found + QString originalThemeName; ///< original theme name if theme is modified by search + + IconSearchResult(QIcon icon, QString originalThemeName) : + icon(icon), originalThemeName(originalThemeName) {} +}; + +// Search icon in the configured themes. +// If this call modifies active theme, the original theme name will be specified in the result. +static inline IconSearchResult searchIcon(QString iconName, QStringList themeFallbackList) +{ + if (QDir::isAbsolutePath(iconName)) { + // a path is used - directly load the icon + return IconSearchResult(QIcon(iconName), QString()); + } else if (QIcon::hasThemeIcon(iconName)) { + // current theme has the icon - load seamlessly + return IconSearchResult(QIcon::fromTheme(iconName), QString()); + } else if (KIconLoader::global()->hasIcon(iconName)) { + // KF icon loader does a wider search and helps with mime icons + return IconSearchResult(KDE::icon(iconName), QString()); + } else { + // search the icon in fallback themes + auto currentTheme = QIcon::themeName(); + for (auto fallbackThemeName : themeFallbackList) { + QIcon::setThemeName(fallbackThemeName); + if (QIcon::hasThemeIcon(iconName)) { + return IconSearchResult(QIcon::fromTheme(iconName), currentTheme); + } + } + QIcon::setThemeName(currentTheme); + + // not found + return IconSearchResult(QIcon(), QString()); + } +} + +bool Icon::exists(QString iconName) +{ + static QCache cache(cacheSize); + static QString cachedTheme; + + // invalidate cache if system theme is changed + if (cachedTheme != QIcon::themeName()) { + cache.clear(); + cachedTheme = QIcon::themeName(); + } + + // return cached result when possible + if (cache.contains(iconName)) { + return *cache.object(iconName); + } + + auto searchResult = searchIcon(iconName, getThemeFallbackList()); + if (!searchResult.originalThemeName.isNull()) { + QIcon::setThemeName(searchResult.originalThemeName); + } + + bool *result = new bool(!searchResult.icon.isNull()); + + // update the cache; the cache takes ownership over the result + cache.insert(iconName, result); + + return *result; +} + +class IconCacheKey +{ +public: + IconCacheKey(const QString &name, const QSize &size, QIcon::Mode mode, QIcon::State state) : + name(name), size(size), mode(mode), state(state) + { + } + + bool operator ==(const IconCacheKey &x) const + { + return name == x.name && size == x.size && mode == x.mode && state == x.state; + } + + uint hash() const + { + return qHash(QString("%1 %2x%3 %4 %5").arg(name).arg(size.width()).arg(size.height()) + .arg((int)mode).arg((int)state)); + } + + QString name; + QSize size; + QIcon::Mode mode; + QIcon::State state; +}; + +uint qHash(const IconCacheKey &key) +{ + return key.hash(); +} + +QPixmap IconEngine::pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state) +{ + static QCache cache(cacheSize); + static QString cachedTheme; + + // invalidate cache if system theme is changed + if (cachedTheme != QIcon::themeName()) { + if (!cachedTheme.isEmpty()) { + qDebug() << "System icon theme changed:" << cachedTheme << "->" << QIcon::themeName(); + } + + cache.clear(); + cachedTheme = QIcon::themeName(); + } + + // an empty icon name is a special case - we don't apply any fallback + if (_iconName.isEmpty()) { + return QPixmap(); + } + + auto key = IconCacheKey(_iconName, size, mode, state); + + // return cached icon when possible + if (cache.contains(key)) { + return *cache.object(key); + } + + // search icon and extract pixmap + auto pixmap = new QPixmap; + auto searchResult = searchIcon(_iconName, _themeFallbackList); + if (!searchResult.icon.isNull()) { + *pixmap = searchResult.icon.pixmap(size, mode, state); + } + if (!searchResult.originalThemeName.isNull()) { + QIcon::setThemeName(searchResult.originalThemeName); + } + + // can't find the icon neither in system theme nor in fallback themes - load fallback icon + if (pixmap->isNull()) { + qWarning() << "Unable to find icon" << _iconName << "of size" << size << "in any configured theme"; + *pixmap = _fallbackIcon.pixmap(size, mode, state); + } + + // update the cache; the cache takes ownership over the pixmap + cache.insert(key, pixmap); + + return *pixmap; +} + +void IconEngine::paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state) +{ + QSize pixmapSize = rect.size(); + QPixmap px = pixmap(pixmapSize, mode, state); + painter->drawPixmap(rect, px); +} diff --git a/krusader/icons/icon-missing.svgz b/krusader/icons/icon-missing.svgz new file mode 100644 index 0000000000000000000000000000000000000000..99e2871c76db96893b883c0b255a7bb19c6b5e2c GIT binary patch literal 1223 zc$@*p1UUO2iwFP!000000JT<8Z`(Eye$TJql$Q+~B~r3wS+QND4GI(}P@wCuXPTmI zHWDd_v>oTy_ee>$l(<{BVUi7-ci-K2ygQz>c=J@1=pY&+wOR%=BmokN>q4sSGWg@m zdz=NxSf&bAY9*F|(!rb6&EhAF(Yr=4D++X!c85NwN5fey(9b(->pY5%$73ivVW^vJ z^b5jxb#t>YhwTkQ2zZsr3%(3GgL>bT9$4^5l%f*Knuvxp3NCPdfpf<$4}$Be(#m*C zWo`%Hrr4a(E}CQFL3BQ!Mm^~Dq*9CFArxWCShTVftx;`Bi2!p6|01)85bt%<=$Qv%K$>6e$o5S3(cLu zGLT#=TuEb~>>=QuJ? z92Pl;Wp?_wZCu7TtURaurQeD@$x1$p;tDn2Hw~P2T(XmBx<2g+Tr<17l+>-J*`z17 zrxJSC*hW7JTuLRrYN_%@?^SWPk!6XSeJOHr5K0%tU5m?a6Mx+e%pi!)suTJ;=SfK8 zsdtp$t`m26#1Ki9hG{mNqN&4h3}cF9h~OBJFq_Bl8y_fCZayjF)ct^bp3D$+J|_r@ zHz6qk#59R9^ae=}n9g8DIcc5Y&XK!!c#?**>2npw-dCK2(=;h@Jn>6MkN^RUohhPO zIHPk;P#2Q(g8aSnPIxCrG46CY2JSSZSyo~S9@7MN71KF}D5vuYhM2QS^4wRX5|$Or zvP)HZ$;2O5fWTPIKR>*0SFq+h|5G=Q{n{OAp2Ntim|e*Vy2?$8qKje#wx?R0 z1#mfrMzpi@>I0&gyv+PPiG$Qm1DRtypgqqVZZv+$gNbYEKg`(mzovu z{;)ow2d2~s-It|M2chVsEz{>}6Pbsu%bOlm@HYKy}PbFI30n3QK zt>((*)Lcnw0o^Ohh*C-t8f`3`cY)V#3@E%lVWzY?ReEncN#|?i-?xXpUg7T*?0)3+ z$IJDK%WrVM{wny0%OAnFZ2N-WNlUqMnOj8N;wr*r`mYgP;$K5r*@(MM-8f3W#o<(N zIs5qXM7}-~|KKo=PkSvI7zyTIopyLR{4DB57klpd>(wOrkG>xyJa^=J|G)SajXZdT lOST!f_Z8?e-VN?(Fu4~|KiA=P-wo*1%{O0KWTPz%002z9R?Pqa literal 0 Hc$@connect(a, SIGNAL(triggered(bool)), recv, slot); krusaderApp->actionCollection()->addAction(name, a); krusaderApp->actionCollection()->setDefaultShortcut(a, shortcut); @@ -132,7 +133,7 @@ if (icon.isEmpty()) a = new QAction(text, krusaderApp); else - a = new QAction(QIcon::fromTheme(icon), text, krusaderApp); + a = new QAction(Icon(icon), text, krusaderApp); krusaderApp->connect(a, SIGNAL(triggered(bool)), recv, slot); krusaderApp->actionCollection()->addAction(name, a); krusaderApp->actionCollection()->setDefaultShortcuts(a, shortcuts); @@ -147,7 +148,7 @@ if (icon == 0) a = new KToggleAction(text, krusaderApp); else - a = new KToggleAction(QIcon::fromTheme(icon), text, krusaderApp); + a = new KToggleAction(Icon(icon), text, krusaderApp); krusaderApp->connect(a, SIGNAL(triggered(bool)), recv, slot); krusaderApp->actionCollection()->addAction(name, a); krusaderApp->actionCollection()->setDefaultShortcut(a, shortcut); diff --git a/krusader/krglobal.h b/krusader/krglobal.h --- a/krusader/krglobal.h +++ b/krusader/krglobal.h @@ -31,7 +31,6 @@ class KMountMan; class KrBookmarkHandler; class KRslots; -class KIconLoader; class KrusaderView; class UserAction; class JobMan; @@ -47,7 +46,6 @@ static KMountMan *mountMan; // krusader's Mount Manager static KrBookmarkHandler *bookman; static KRslots *slot; - static KIconLoader *iconLoader; // the app's icon loader static KrusaderView *mainView; // The GUI static QWidget *mainWindow; static UserAction *userAction; @@ -70,7 +68,6 @@ #define krMtMan (*(KrGlobal::mountMan)) #define krBookMan KrGlobal::bookman #define SLOTS KrGlobal::slot -#define krLoader KrGlobal::iconLoader #define MAIN_VIEW KrGlobal::mainView #define krMainWindow KrGlobal::mainWindow #define krUserAction KrGlobal::userAction diff --git a/krusader/krglobal.cpp b/krusader/krglobal.cpp --- a/krusader/krglobal.cpp +++ b/krusader/krglobal.cpp @@ -33,7 +33,6 @@ KMountMan *KrGlobal::mountMan = 0; KrBookmarkHandler *KrGlobal::bookman = 0; KRslots* KrGlobal::slot = 0; -KIconLoader *KrGlobal::iconLoader = 0; KrusaderView *KrGlobal::mainView = 0; QWidget *KrGlobal::mainWindow = 0; UserAction *KrGlobal::userAction = 0; diff --git a/krusader/krslots.cpp b/krusader/krslots.cpp --- a/krusader/krslots.cpp +++ b/krusader/krslots.cpp @@ -37,7 +37,6 @@ #include #include #include -#include #include #include @@ -47,6 +46,7 @@ #endif #include "defaults.h" +#include "icon.h" #include "kractions.h" #include "krservices.h" #include "krtrashhandler.h" @@ -708,9 +708,9 @@ void KRslots::trashPopupMenu() { QMenu trashMenu(krApp); - QAction * act = trashMenu.addAction(krLoader->loadIcon("document-open", KIconLoader::Panel), i18n("Open trash bin")); + QAction * act = trashMenu.addAction(Icon("document-open"), i18n("Open trash bin")); act->setData(QVariant(OPEN_ID)); - act = trashMenu.addAction(krLoader->loadIcon("trash-empty", KIconLoader::Panel), i18n("Empty trash bin")); + act = trashMenu.addAction(Icon("trash-empty"), i18n("Empty trash bin")); act->setData(QVariant(EMPTY_TRASH_ID)); int result = -1; diff --git a/krusader/krusader.cpp b/krusader/krusader.cpp --- a/krusader/krusader.cpp +++ b/krusader/krusader.cpp @@ -40,7 +40,6 @@ #include #include #include -#include #include #include #include @@ -53,7 +52,6 @@ #include #include "defaults.h" -#include "kicons.h" #include "kractions.h" #include "krglobal.h" #include "krservices.h" @@ -137,10 +135,6 @@ KMessageBox::error(krApp, message); } - // create an icon loader - krLoader = KIconLoader::global(); -// iconLoader->addExtraDesktopThemes(); - // create MountMan KrGlobal::mountMan = new KMountMan(this); connect(KrGlobal::mountMan, SIGNAL(refreshPanel(QUrl)), SLOTS, SLOT(refresh(QUrl))); diff --git a/krusader/krusaderview.cpp b/krusader/krusaderview.cpp --- a/krusader/krusaderview.cpp +++ b/krusader/krusaderview.cpp @@ -39,6 +39,7 @@ #include #include "krusader.h" +#include "icon.h" #include "kractions.h" #include "krslots.h" #include "defaults.h" @@ -457,11 +458,11 @@ if (horiz_splitter->orientation() == Qt::Vertical) { horiz_splitter->setOrientation(Qt::Horizontal); KrActions::actVerticalMode->setText(i18n("Vertical Mode")); - KrActions::actVerticalMode->setIcon(QIcon::fromTheme("view-split-top-bottom")); + KrActions::actVerticalMode->setIcon(Icon("view-split-top-bottom")); } else { horiz_splitter->setOrientation(Qt::Vertical); KrActions::actVerticalMode->setText(i18n("Horizontal Mode")); - KrActions::actVerticalMode->setIcon(QIcon::fromTheme("view-split-left-right")); + KrActions::actVerticalMode->setIcon(Icon("view-split-left-right")); } } @@ -510,7 +511,7 @@ else icon = (from == leftMng) ? "arrow-down" : "arrow-up"; - QCursor cursor(QIcon::fromTheme(icon).pixmap(22)); + QCursor cursor(Icon(icon).pixmap(22)); if (cursorIsOnOtherSide(from, e->globalPos())) { if(!qApp->overrideCursor()) diff --git a/krusader/main.cpp b/krusader/main.cpp --- a/krusader/main.cpp +++ b/krusader/main.cpp @@ -51,6 +51,7 @@ #include "krservices.h" #include "krslots.h" #include "krusader.h" +#include "icon.h" #include "krusaderversion.h" #include "krusaderview.h" #include "panelmanager.h" @@ -91,39 +92,6 @@ int main(int argc, char *argv[]) { -// ============ begin icon-stuff =========== -// If the user has no icon specified over the commandline we set up our own. -// this is according to the users privileges. The icons are in Krusader::privIcon() - -/* bool hasIcon = false; - int i = 0; - char * myArgv[argc+2];*/ - -// if no --miniicon is given, --icon is used. So we don't need to check for --miniicon separately -/* for (i = 0; i < argc; ++i) { - if (strstr(argv[ i ], "-icon") != 0) // important: just one dash because both can appear! - hasIcon = true; - } - - static const char* const icon_text = "--icon"; - const char* icon_name = Krusader::privIcon(); - char addedParams[strlen(icon_text)+strlen(icon_name)+2]; - - if (! hasIcon) { - for (i = 0; i < argc; ++i) - myArgv[ i ] = argv[ i ]; - - strcpy(addedParams, icon_text); - strcpy(addedParams + strlen(icon_text) + 1, icon_name); - - myArgv[ argc ] = addedParams; - myArgv[ ++argc ] = addedParams + strlen(icon_text) + 1; - myArgv[ ++argc ] = 0; - - argv = myArgv; - }*/ -// ============ end icon-stuff =========== - // set global log message format qSetMessagePattern(KrServices::GLOBAL_MESSAGE_PATTERN); @@ -134,6 +102,12 @@ QApplication app(argc, argv); KLocalizedString::setApplicationDomain("krusader"); + // init icon theme + qDebug() << "System icon theme:" << QIcon::themeName(); + // [WORKAROUND] setThemeName sets user theme in QIconLoader and allows to avoid Qt issues with invalid icon caching later + // IMPORTANT: this must be done before the first QIcon::fromTheme / QIcon::hasThemeIcon call + QIcon::setThemeName(QIcon::themeName()); + // ABOUT data information #ifdef RELEASE_NAME QString versionName = QString("%1 \"%2\"").arg(VERSION).arg(RELEASE_NAME); @@ -230,7 +204,7 @@ // This will call QCoreApplication::setApplicationName, etc for us by using info in the KAboutData instance. // The only thing not called for us is setWindowIcon(), which is why we do it ourselves here. KAboutData::setApplicationData(aboutData); - app.setWindowIcon(QIcon::fromTheme(Krusader::privIcon())); + app.setWindowIcon(Icon(Krusader::privIcon())); // Command line arguments ... QCommandLineParser parser; @@ -326,8 +300,6 @@ fprintf(stderr, "DBus Error: %s, %s\n", dbus.lastError().name().toLocal8Bit().constData(), dbus.lastError().message().toLocal8Bit().constData()); } - qDebug() << "Qt icon theme: " << QIcon::themeName(); - // catching SIGTERM, SIGHUP, SIGQUIT signal(SIGTERM, sigterm_handler); signal(SIGPIPE, sigterm_handler); diff --git a/krusader/panelmanager.cpp b/krusader/panelmanager.cpp --- a/krusader/panelmanager.cpp +++ b/krusader/panelmanager.cpp @@ -22,6 +22,7 @@ #include "panelmanager.h" #include "defaults.h" +#include "icon.h" #include "tabactions.h" #include "krusaderview.h" #include "krmainwindow.h" @@ -40,7 +41,6 @@ #include #include -#include PanelManager::PanelManager(QWidget *parent, KrMainWindow* mainWindow, bool left) : @@ -61,7 +61,7 @@ _newTab->setAutoRaise(true); _newTab->setText(i18n("Open a new tab in home")); _newTab->setToolTip(i18n("Open a new tab in home")); - _newTab->setIcon(SmallIcon("tab-new")); + _newTab->setIcon(Icon("tab-new")); _newTab->adjustSize(); connect(_newTab, SIGNAL(clicked()), this, SLOT(slotNewTab())); diff --git a/krusader/paneltabbar.cpp b/krusader/paneltabbar.cpp --- a/krusader/paneltabbar.cpp +++ b/krusader/paneltabbar.cpp @@ -26,6 +26,7 @@ #include "defaults.h" #include "tabactions.h" #include "../krglobal.h" +#include "../icon.h" #include "Panel/listpanel.h" #include "Panel/panelfunc.h" @@ -41,9 +42,9 @@ #include #include -#include #include + static const int sDragEnterDelay = 500; // msec PanelTabBar::PanelTabBar(QWidget *parent, TabActions *actions): QTabBar(parent), @@ -160,11 +161,11 @@ void PanelTabBar::setIcon(int index, ListPanel *panel) { - QIcon tabIcon; + Icon tabIcon; if (panel->isLocked()) { - tabIcon = krLoader->loadIcon("lock", KIconLoader::Toolbar, 16); + tabIcon = Icon("lock"); } else if (panel->isPinned()) { - tabIcon = krLoader->loadIcon("pin", KIconLoader::Toolbar, 16); + tabIcon = Icon("pin"); } setTabIcon(index, tabIcon); } diff --git a/krusader/resources.qrc b/krusader/resources.qrc --- a/krusader/resources.qrc +++ b/krusader/resources.qrc @@ -1,5 +1,6 @@ - - - layout.xml - + + + layout.xml + icons/icon-missing.svgz + diff --git a/krusader/useraction_examples.xml b/krusader/useraction_examples.xml --- a/krusader/useraction_examples.xml +++ b/krusader/useraction_examples.xml @@ -12,16 +12,16 @@ Edit as root Edit a file as root - kate + document-edit Samples Edit a file with root permissions EDITOR='kate -b' SUDO_ASKPASS=/usr/bin/ssh-askpass sudoedit -A %aCurrent% Ctrl+E Mount Mount a new filesystem - hdd_mount + media-mount Samples mount -t %_Ask("Filesystem Type?")% %_Ask("Device ?")% %_Ask("Mount Point ?")% Alt+Ctrl+M @@ -45,34 +45,34 @@ Sort by Name Sort by Name - view_text + sort-name User Interface Sorts the active panel by Name %aColSort("Name")% Ctrl+1 Sort by Extension Sort by Extension - view_text + sort-name User Interface Sorts the active panel by Extension %aColSort("Ext")% Ctrl+2 Sort by Size Sort by Size - view_text + sort-name User Interface Sorts the active panel by Size %aColSort("Size")% Ctrl+3 Sort by Modified Sort by Modified - view_text + sort-name User Interface Sorts the active panel by Modified %aColSort("Modified")%