Commit 653d5714 authored by Méven Car's avatar Méven Car Committed by Nate Graham
Browse files

Tabs: ensure to have folder icons for remote folders

KIO::iconForUrl relies on filename to find the icon for remote files.
Appending / at the end of the filename allows it to interpret it as
a folder.

This causes inconsistent tab icons.

To reproduce:

Open in a tab a url on a smb or sftp folder, i.e sftp:/my-server/photos

Before:
Icon is a cloud.

After:
Icon is a folder

Previously a folder icon could be presented if the tab was first opened
with a url with a trailing /
parent b712c9fc
Pipeline #77390 passed with stage
in 4 minutes and 53 seconds
......@@ -383,7 +383,9 @@ void DolphinTabWidget::tabUrlChanged(const QUrl& url)
tabBar()->setTabText(index, tabName(tabPageAt(index)));
tabBar()->setTabToolTip(index, url.toDisplayString(QUrl::PreferLocalFile));
if (tabBar()->isVisible()) {
tabBar()->setTabIcon(index, QIcon::fromTheme(KIO::iconNameForUrl(url)));
// ensure the path url ends with a slash to have proper folder icon for remote folders
const QUrl pathUrl = QUrl(url.adjusted(QUrl::StripTrailingSlash).toString(QUrl::FullyEncoded).append("/"));
tabBar()->setTabIcon(index, QIcon::fromTheme(KIO::iconNameForUrl(pathUrl)));
} else {
// Mark as dirty, actually load once the tab bar actually gets shown
tabBar()->setTabIcon(index, QIcon());
......@@ -427,7 +429,9 @@ void DolphinTabWidget::tabInserted(int index)
for (int i = 0; i < count(); ++i) {
const QUrl url = tabPageAt(i)->activeViewContainer()->url();
if (tabBar()->tabIcon(i).isNull()) {
tabBar()->setTabIcon(i, QIcon::fromTheme(KIO::iconNameForUrl(url)));
// ensure the path url ends with a slash to have proper folder icon for remote folders
const QUrl pathUrl = QUrl(url.adjusted(QUrl::StripTrailingSlash).toString(QUrl::FullyEncoded).append("/"));
tabBar()->setTabIcon(i, QIcon::fromTheme(KIO::iconNameForUrl(pathUrl)));
}
if (tabBar()->tabToolTip(i).isEmpty()) {
tabBar()->setTabToolTip(index, url.toDisplayString(QUrl::PreferLocalFile));
......
......@@ -211,7 +211,8 @@ void DolphinMainWindowTest::testOpenInNewTabTitle()
QCOMPARE(tabWidget->count(), 2);
QVERIFY(tabWidget->tabText(0) != tabWidget->tabText(1));
if (!tabWidget->tabIcon(0).isNull() && !tabWidget->tabIcon(1).isNull()) {
QVERIFY(tabWidget->tabIcon(0).name() != tabWidget->tabIcon(1).name());
QCOMPARE(QStringLiteral("inode-directory"), tabWidget->tabIcon(0).name());
QCOMPARE(QStringLiteral("inode-directory"), tabWidget->tabIcon(1).name());
}
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment