┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt25
-rw-r--r--src/dbusinterface.cpp4
-rw-r--r--src/dolphincontextmenu.cpp7
-rw-r--r--src/dolphinmainwindow.cpp53
-rw-r--r--src/dolphinmainwindow.h5
-rw-r--r--src/dolphintabwidget.cpp26
-rw-r--r--src/dolphintabwidget.h5
-rw-r--r--src/dolphinviewcontainer.cpp53
-rw-r--r--src/dolphinviewcontainer.h8
-rw-r--r--src/kitemviews/kfileitemlistwidget.cpp8
-rw-r--r--src/kitemviews/kfileitemmodel.cpp24
-rw-r--r--src/kitemviews/kfileitemmodelrolesupdater.cpp11
-rw-r--r--src/kitemviews/private/kdirectorycontentscounterworker.h4
-rw-r--r--src/kitemviews/private/kitemlistviewlayouter.cpp2
-rw-r--r--src/main.cpp1
-rw-r--r--src/panels/information/filemetadataconfigurationdialog.cpp9
-rw-r--r--src/panels/information/filemetadataconfigurationdialog.h4
-rw-r--r--src/panels/information/informationpanelcontent.cpp24
-rw-r--r--src/panels/places/placesitemmodel.cpp59
-rw-r--r--src/panels/places/placesitemmodel.h10
-rw-r--r--src/panels/places/placespanel.cpp18
-rw-r--r--src/panels/places/placespanel.h4
-rw-r--r--src/settings/general/behaviorsettingspage.cpp12
-rw-r--r--src/statusbar/dolphinstatusbar.cpp5
-rw-r--r--src/statusbar/dolphinstatusbar.h5
-rw-r--r--src/statusbar/spaceinfoobserver.cpp7
-rw-r--r--src/statusbar/spaceinfoobserver.h3
-rw-r--r--src/statusbar/statusbarspaceinfo.cpp7
-rw-r--r--src/statusbar/statusbarspaceinfo.h2
-rw-r--r--src/tests/dolphinmainwindowtest.cpp19
-rw-r--r--src/tests/kfileitemmodeltest.cpp33
-rw-r--r--src/views/dolphinview.cpp8
-rw-r--r--src/views/tooltips/dolphinfilemetadatawidget.cpp12
-rw-r--r--src/views/tooltips/dolphinfilemetadatawidget.h8
-rw-r--r--src/views/tooltips/tooltipmanager.cpp5
-rw-r--r--src/views/viewproperties.cpp24
36 files changed, 251 insertions, 263 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index eacb792fc..5aff4b0fa 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -98,8 +98,6 @@ set(dolphinprivate_LIB_SRCS
views/dolphinviewactionhandler.cpp
views/draganddrophelper.cpp
views/renamedialog.cpp
- views/tooltips/dolphinfilemetadatawidget.cpp
- views/tooltips/tooltipmanager.cpp
views/versioncontrol/updateitemstatesthread.cpp
views/versioncontrol/versioncontrolobserver.cpp
views/viewmodecontroller.cpp
@@ -114,6 +112,8 @@ set(dolphinprivate_LIB_SRCS
if(HAVE_BALOO)
set(dolphinprivate_LIB_SRCS
${dolphinprivate_LIB_SRCS}
+ views/tooltips/dolphinfilemetadatawidget.cpp
+ views/tooltips/tooltipmanager.cpp
kitemviews/private/kbaloorolesprovider.cpp
)
endif()
@@ -155,11 +155,6 @@ if(HAVE_BALOO)
KF5::Baloo
KF5::BalooWidgets
)
-else()
- target_link_libraries(
- dolphinprivate PUBLIC
- KF5::KDELibs4Support # for KFileMetaDataWidget
- )
endif()
set_target_properties(dolphinprivate PROPERTIES
@@ -204,11 +199,6 @@ set(dolphinstatic_SRCS
dolphintabwidget.cpp
trash/dolphintrash.cpp
filterbar/filterbar.cpp
- panels/information/filemetadataconfigurationdialog.cpp
- panels/information/informationpanel.cpp
- panels/information/informationpanelcontent.cpp
- panels/information/pixmapviewer.cpp
- panels/information/phononwidget.cpp
panels/places/placespanel.cpp
panels/places/placesitem.cpp
panels/places/placesitemeditdialog.cpp
@@ -252,6 +242,17 @@ set(dolphinstatic_SRCS
global.cpp
)
+if(HAVE_BALOO)
+ set(dolphinstatic_SRCS
+ ${dolphinstatic_SRCS}
+ panels/information/filemetadataconfigurationdialog.cpp
+ panels/information/informationpanel.cpp
+ panels/information/informationpanelcontent.cpp
+ panels/information/pixmapviewer.cpp
+ panels/information/phononwidget.cpp
+ )
+endif()
+
kconfig_add_kcfg_files(dolphinstatic_SRCS GENERATE_MOC
panels/folders/dolphin_folderspanelsettings.kcfgc
panels/information/dolphin_informationpanelsettings.kcfgc
diff --git a/src/dbusinterface.cpp b/src/dbusinterface.cpp
index e5192f207..c780bc7cd 100644
--- a/src/dbusinterface.cpp
+++ b/src/dbusinterface.cpp
@@ -23,13 +23,15 @@
#include <KPropertiesDialog>
#include <QDBusConnection>
+#include <QDBusConnectionInterface>
DBusInterface::DBusInterface() :
QObject()
{
- QDBusConnection::sessionBus().registerService(QStringLiteral("org.freedesktop.FileManager1"));
QDBusConnection::sessionBus().registerObject(QStringLiteral("/org/freedesktop/FileManager1"), this,
QDBusConnection::ExportScriptableContents | QDBusConnection::ExportAdaptors);
+ QDBusConnection::sessionBus().interface()->registerService(QStringLiteral("org.freedesktop.FileManager1"),
+ QDBusConnectionInterface::QueueService);
}
void DBusInterface::ShowFolders(const QStringList& uriList, const QString& startUpId)
diff --git a/src/dolphincontextmenu.cpp b/src/dolphincontextmenu.cpp
index 8fdaab1d0..a521551e5 100644
--- a/src/dolphincontextmenu.cpp
+++ b/src/dolphincontextmenu.cpp
@@ -341,7 +341,12 @@ void DolphinContextMenu::openViewportContextMenu()
addSeparator();
// Insert 'Open With' entries
- const KFileItemListProperties baseUrlProperties(KFileItemList() << baseFileItem());
+ KFileItem baseItem = view->rootItem();
+ if (baseItem.isNull() || baseItem.url() != m_baseUrl) {
+ baseItem = baseFileItem();
+ }
+
+ const KFileItemListProperties baseUrlProperties(KFileItemList() << baseItem);
KFileItemActions fileItemActions;
fileItemActions.setParentWidget(m_mainWindow);
fileItemActions.setItemListProperties(baseUrlProperties);
diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp
index 38537d92a..7f36e82db 100644
--- a/src/dolphinmainwindow.cpp
+++ b/src/dolphinmainwindow.cpp
@@ -25,7 +25,6 @@
#include "dolphindockwidget.h"
#include "dolphincontextmenu.h"
#include "dolphinnewfilemenu.h"
-#include "dolphinplacesmodelsingleton.h"
#include "dolphinrecenttabsmenu.h"
#include "dolphintabwidget.h"
#include "dolphinviewcontainer.h"
@@ -49,7 +48,6 @@
#include <KAuthorized>
#include <KConfig>
#include <KFileItemListProperties>
-#include <KFilePlacesModel>
#include <KHelpMenu>
#include <KIO/JobUiDelegate>
#include <KIO/OpenFileManagerWindowJob>
@@ -137,7 +135,7 @@ DolphinMainWindow::DolphinMainWindow() :
connect(m_tabWidget, &DolphinTabWidget::tabCountChanged,
this, &DolphinMainWindow::tabCountChanged);
connect(m_tabWidget, &DolphinTabWidget::currentUrlChanged,
- this, &DolphinMainWindow::setUrlAsCaption);
+ this, &DolphinMainWindow::updateWindowTitle);
setCentralWidget(m_tabWidget);
setupActions();
@@ -588,6 +586,7 @@ void DolphinMainWindow::reloadView()
{
clearStatusBar();
m_activeViewContainer->reload();
+ m_activeViewContainer->statusBar()->updateSpaceInfo();
}
void DolphinMainWindow::stopLoading()
@@ -996,46 +995,9 @@ void DolphinMainWindow::tabCountChanged(int count)
actionCollection()->action(QStringLiteral("activate_prev_tab"))->setEnabled(enableTabActions);
}
-void DolphinMainWindow::setUrlAsCaption(const QUrl& url)
+void DolphinMainWindow::updateWindowTitle()
{
- QString schemePrefix;
- if (!url.isLocalFile()) {
- schemePrefix.append(url.scheme() + " - ");
- if (!url.host().isEmpty()) {
- schemePrefix.append(url.host() + " - ");
- }
- }
-
- if (GeneralSettings::showFullPathInTitlebar()) {
- const QString path = url.adjusted(QUrl::StripTrailingSlash).path();
- setWindowTitle(schemePrefix + path);
- return;
- }
-
- KFilePlacesModel *placesModel = DolphinPlacesModelSingleton::instance().placesModel();
- const auto& matchedPlaces = placesModel->match(placesModel->index(0,0), KFilePlacesModel::UrlRole, url, 1, Qt::MatchExactly);
-
- if (!matchedPlaces.isEmpty()) {
- setWindowTitle(placesModel->text(matchedPlaces.first()));
- return;
- }
-
- QString fileName = url.adjusted(QUrl::StripTrailingSlash).fileName();
- if (fileName.isEmpty()) {
- fileName = '/';
- }
-
- if (m_activeViewContainer->isSearchModeEnabled()) {
- if(m_activeViewContainer->currentSearchText().isEmpty()){
- setWindowTitle(i18n("Search"));
- } else {
- const auto searchText = i18n("Search for %1", m_activeViewContainer->currentSearchText());
- setWindowTitle(searchText);
- }
- return;
- }
-
- setWindowTitle(schemePrefix + fileName);
+ setWindowTitle(m_activeViewContainer->caption());
}
void DolphinMainWindow::slotStorageTearDownFromPlacesRequested(const QString& mountPath)
@@ -1262,6 +1224,8 @@ void DolphinMainWindow::setupDockWidgets()
infoDock->setLocked(lock);
infoDock->setObjectName(QStringLiteral("infoDock"));
infoDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
+
+#ifdef HAVE_BALOO
InformationPanel* infoPanel = new InformationPanel(infoDock);
infoPanel->setCustomContextMenuActions({lockLayoutAction});
connect(infoPanel, &InformationPanel::urlActivated, this, &DolphinMainWindow::handleUrl);
@@ -1277,6 +1241,7 @@ void DolphinMainWindow::setupDockWidgets()
infoPanel, &InformationPanel::setSelection);
connect(this, &DolphinMainWindow::requestItemInfo,
infoPanel, &InformationPanel::requestDelayedItemInfo);
+#endif
// Setup "Folders"
DolphinDockWidget* foldersDock = new DolphinDockWidget(i18nc("@title:window", "Folders"));
@@ -1373,7 +1338,9 @@ void DolphinMainWindow::setupDockWidgets()
panelsMenu->setDelayed(false);
const KActionCollection* ac = actionCollection();
panelsMenu->addAction(ac->action(QStringLiteral("show_places_panel")));
+#ifdef HAVE_BALOO
panelsMenu->addAction(ac->action(QStringLiteral("show_information_panel")));
+#endif
panelsMenu->addAction(ac->action(QStringLiteral("show_folders_panel")));
panelsMenu->addAction(ac->action(QStringLiteral("show_terminal_panel")));
panelsMenu->addSeparator();
@@ -1497,7 +1464,7 @@ void DolphinMainWindow::refreshViews()
const bool splitView = GeneralSettings::splitView();
m_tabWidget->currentTabPage()->setSplitViewEnabled(splitView);
updateSplitAction();
- setUrlAsCaption(activeViewContainer()->url());
+ updateWindowTitle();
}
emit settingsChanged();
diff --git a/src/dolphinmainwindow.h b/src/dolphinmainwindow.h
index 637f41f21..f2876a877 100644
--- a/src/dolphinmainwindow.h
+++ b/src/dolphinmainwindow.h
@@ -412,10 +412,9 @@ private slots:
void tabCountChanged(int count);
/**
- * Sets the window caption to url.fileName() if this is non-empty,
- * "/" if the URL is "file:///", and url.protocol() otherwise.
+ * Updates the Window Title with the caption from the active view container
*/
- void setUrlAsCaption(const QUrl& url);
+ void updateWindowTitle();
/**
* This slot is called when the user requested to unmount a removable media
diff --git a/src/dolphintabwidget.cpp b/src/dolphintabwidget.cpp
index a5c2f8c98..edb7247cc 100644
--- a/src/dolphintabwidget.cpp
+++ b/src/dolphintabwidget.cpp
@@ -116,6 +116,7 @@ void DolphinTabWidget::refreshViews()
{
const int tabCount = count();
for (int i = 0; i < tabCount; ++i) {
+ tabBar()->setTabText(i, tabName(tabPageAt(i)));
tabPageAt(i)->refreshViews();
}
}
@@ -160,7 +161,7 @@ void DolphinTabWidget::openNewTab(const QUrl& primaryUrl, const QUrl& secondaryU
this, &DolphinTabWidget::activeViewChanged);
connect(tabPage, &DolphinTabPage::activeViewUrlChanged,
this, &DolphinTabWidget::tabUrlChanged);
- addTab(tabPage, QIcon::fromTheme(KIO::iconNameForUrl(primaryUrl)), tabName(primaryUrl));
+ addTab(tabPage, QIcon::fromTheme(KIO::iconNameForUrl(primaryUrl)), tabName(tabPage));
if (focusWidget) {
// The DolphinViewContainer grabbed the keyboard focus. As the tab is opened
@@ -305,7 +306,7 @@ void DolphinTabWidget::tabUrlChanged(const QUrl& url)
{
const int index = indexOf(qobject_cast<QWidget*>(sender()));
if (index >= 0) {
- tabBar()->setTabText(index, tabName(url));
+ tabBar()->setTabText(index, tabName(tabPageAt(index)));
tabBar()->setTabIcon(index, QIcon::fromTheme(KIO::iconNameForUrl(url)));
// Emit the currentUrlChanged signal if the url of the current tab has been changed.
@@ -353,20 +354,13 @@ void DolphinTabWidget::tabRemoved(int index)
emit tabCountChanged(count());
}
-QString DolphinTabWidget::tabName(const QUrl& url) const
+QString DolphinTabWidget::tabName(DolphinTabPage* tabPage) const
{
- QString name;
- if (url == QUrl(QStringLiteral("file:///"))) {
- name = '/';
- } else {
- name = url.adjusted(QUrl::StripTrailingSlash).fileName();
- if (name.isEmpty()) {
- name = url.scheme();
- } else {
- // Make sure that a '&' inside the directory name is displayed correctly
- // and not misinterpreted as a keyboard shortcut in QTabBar::setTabText()
- name.replace('&', QLatin1String("&&"));
- }
+ if (!tabPage) {
+ return QString();
}
- return name;
+ QString name = tabPage->activeViewContainer()->caption();
+ // Make sure that a '&' inside the directory name is displayed correctly
+ // and not misinterpreted as a keyboard shortcut in QTabBar::setTabText()
+ return name.replace('&', QLatin1String("&&"));
}
diff --git a/src/dolphintabwidget.h b/src/dolphintabwidget.h
index b4493f7ed..0cb662966 100644
--- a/src/dolphintabwidget.h
+++ b/src/dolphintabwidget.h
@@ -191,9 +191,10 @@ protected:
private:
/**
- * Returns the name of the tab for the URL \a url.
+ * @param tabPage The tab page to get the name of
+ * @return The name of the tab page
*/
- QString tabName(const QUrl& url) const;
+ QString tabName(DolphinTabPage* tabPage) const;
private:
/** Caches the (negated) places panel visibility */
diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp
index f473752dc..5978ae938 100644
--- a/src/dolphinviewcontainer.cpp
+++ b/src/dolphinviewcontainer.cpp
@@ -31,6 +31,7 @@
#include "views/viewproperties.h"
#include <KFileItemActions>
+#include <KFilePlacesModel>
#include <KIO/PreviewJob>
#include <KLocalizedString>
#include <KMessageWidget>
@@ -55,6 +56,7 @@ DolphinViewContainer::DolphinViewContainer(const QUrl& url, QWidget* parent) :
m_urlNavigator(nullptr),
m_emptyTrashButton(nullptr),
m_searchBox(nullptr),
+ m_searchModeEnabled(false),
m_messageWidget(nullptr),
m_view(nullptr),
m_filterBar(nullptr),
@@ -377,11 +379,13 @@ void DolphinViewContainer::setSearchModeEnabled(bool enabled)
}
m_urlNavigator->setLocationUrl(url);
}
+
+ m_searchModeEnabled = enabled;
}
bool DolphinViewContainer::isSearchModeEnabled() const
{
- return m_searchBox->isVisible();
+ return m_searchModeEnabled;
}
QString DolphinViewContainer::placesText() const
@@ -409,6 +413,53 @@ void DolphinViewContainer::reload()
m_messageWidget->hide();
}
+QString DolphinViewContainer::caption() const
+{
+ if (GeneralSettings::showFullPathInTitlebar()) {
+ if (!url().isLocalFile()) {
+ return url().adjusted(QUrl::StripTrailingSlash).toString();
+ }
+ return url().adjusted(QUrl::StripTrailingSlash).path();
+ }
+
+ KFilePlacesModel *placesModel = DolphinPlacesModelSingleton::instance().placesModel();
+ const auto& matchedPlaces = placesModel->match(placesModel->index(0,0), KFilePlacesModel::UrlRole, url(), 1, Qt::MatchExactly);
+
+ if (!matchedPlaces.isEmpty()) {
+ return placesModel->text(matchedPlaces.first());
+ }
+
+ if (isSearchModeEnabled()) {
+ if (currentSearchText().isEmpty()){
+ return i18n("Search");
+ } else {
+ return i18n("Search for %1", currentSearchText());
+ }
+ }
+
+ if (!url().isLocalFile()) {
+ QUrl adjustedUrl = url().adjusted(QUrl::StripTrailingSlash);
+ QString caption;
+ if (!adjustedUrl.fileName().isEmpty()) {
+ caption = adjustedUrl.fileName();
+ } else if (!adjustedUrl.path().isEmpty() && adjustedUrl.path() != "/") {
+ caption = adjustedUrl.path();
+ } else if (!adjustedUrl.host().isEmpty()) {
+ caption = adjustedUrl.host();
+ } else {
+ caption = adjustedUrl.toString();
+ }
+ return caption;
+ }
+
+ QString fileName = url().adjusted(QUrl::StripTrailingSlash).fileName();
+ if (fileName.isEmpty()) {
+ fileName = '/';
+ }
+
+ return fileName;
+}
+
void DolphinViewContainer::setUrl(const QUrl& newUrl)
{
if (newUrl != m_urlNavigator->locationUrl()) {
diff --git a/src/dolphinviewcontainer.h b/src/dolphinviewcontainer.h
index b5bcc78ad..f33a5a118 100644
--- a/src/dolphinviewcontainer.h
+++ b/src/dolphinviewcontainer.h
@@ -136,6 +136,13 @@ public:
*/
void reload();
+ /**
+ * @return Returns a Caption suitable for display to the user. It is
+ * calculated depending on settings, if a search is active and other
+ * factors.
+ */
+ QString caption() const;
+
public slots:
/**
* Sets the current active URL, where all actions are applied. The
@@ -324,6 +331,7 @@ private:
KUrlNavigator* m_urlNavigator;
QPushButton* m_emptyTrashButton;
DolphinSearchBox* m_searchBox;
+ bool m_searchModeEnabled;
KMessageWidget* m_messageWidget;
DolphinView* m_view;
diff --git a/src/kitemviews/kfileitemlistwidget.cpp b/src/kitemviews/kfileitemlistwidget.cpp
index e548e7519..40b8ccf37 100644
--- a/src/kitemviews/kfileitemlistwidget.cpp
+++ b/src/kitemviews/kfileitemlistwidget.cpp
@@ -78,7 +78,13 @@ QString KFileItemListWidgetInformant::roleText(const QByteArray& role,
const KIO::filesize_t size = roleValue.value<KIO::filesize_t>();
text = KFormat().formatByteSize(size);
}
- } else if (role == "modificationtime" || role == "creationtime" || role == "accesstime" || role == "deletiontime" || role == "imageDateTime") {
+ } else if (role == "modificationtime" || role == "creationtime" || role == "accesstime") {
+ bool ok;
+ const long long time = roleValue.toLongLong(&ok);
+ if (ok && time != -1) {
+ return QLocale().toString(QDateTime::fromSecsSinceEpoch(time), QLocale::ShortFormat);
+ }
+ } else if (role == "deletiontime" || role == "imageDateTime") {
const QDateTime dateTime = roleValue.toDateTime();
text = QLocale().toString(dateTime, QLocale::ShortFormat);
} else {
diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp
index d2c8429ac..d9c1e6bfb 100644
--- a/src/kitemviews/kfileitemmodel.cpp
+++ b/src/kitemviews/kfileitemmodel.cpp
@@ -1563,26 +1563,26 @@ QHash<QByteArray, QVariant> KFileItemModel::retrieveData(const KFileItem& item,
}
if (m_requestRole[ModificationTimeRole]) {
- // Don't use KFileItem::timeString() as this is too expensive when
- // having several thousands of items. Instead the formatting of the
- // date-time will be done on-demand by the view when the date will be shown.
- const QDateTime dateTime = item.time(KFileItem::ModificationTime);
+ // Don't use KFileItem::timeString() or KFileItem::time() as this is too expensive when
+ // having several thousands of items. Instead read the raw number from UDSEntry directly
+ // and the formatting of the date-time will be done on-demand by the view when the date will be shown.
+ const long long dateTime = item.entry().numberValue(KIO::UDSEntry::UDS_MODIFICATION_TIME, -1);
data.insert(sharedValue("modificationtime"), dateTime);
}
if (m_requestRole[CreationTimeRole]) {
- // Don't use KFileItem::timeString() as this is too expensive when
- // having several thousands of items. Instead the formatting of the
- // date-time will be done on-demand by the view when the date will be shown.
- const QDateTime dateTime = item.time(KFileItem::CreationTime);
+ // Don't use KFileItem::timeString() or KFileItem::time() as this is too expensive when
+ // having several thousands of items. Instead read the raw number from UDSEntry directly
+ // and the formatting of the date-time will be done on-demand by the view when the date will be shown.
+ const long long dateTime = item.entry().numberValue(KIO::UDSEntry::UDS_CREATION_TIME, -1);
data.insert(sharedValue("creationtime"), dateTime);
}
if (m_requestRole[AccessTimeRole]) {
- // Don't use KFileItem::timeString() as this is too expensive when
- // having several thousands of items. Instead the formatting of the
- // date-time will be done on-demand by the view when the date will be shown.
- const QDateTime dateTime = item.time(KFileItem::AccessTime);
+ // Don't use KFileItem::timeString() or KFileItem::time() as this is too expensive when
+ // having several thousands of items. Instead read the raw number from UDSEntry directly
+ // and the formatting of the date-time will be done on-demand by the view when the date will be shown.
+ const long long dateTime = item.entry().numberValue(KIO::UDSEntry::UDS_ACCESS_TIME, -1);
data.insert(sharedValue("accesstime"), dateTime);
}
diff --git a/src/kitemviews/kfileitemmodelrolesupdater.cpp b/src/kitemviews/kfileitemmodelrolesupdater.cpp
index abc5f176a..f4d69dec2 100644
--- a/src/kitemviews/kfileitemmodelrolesupdater.cpp
+++ b/src/kitemviews/kfileitemmodelrolesupdater.cpp
@@ -495,14 +495,9 @@ void KFileItemModelRolesUpdater::slotGotPreview(const KFileItem& item, const QPi
QPixmap scaledPixmap = pixmap;
- const QString mimeType = item.mimetype();
- const int slashIndex = mimeType.indexOf(QLatin1Char('/'));
- const bool isFontPreview = mimeType.rightRef(slashIndex).contains(QLatin1String("font"));
- const bool isFolderPreview = item.isDir();
- const bool isWindowsExePreview = mimeType == QLatin1String("application/x-ms-dos-executable") ||
- mimeType == QLatin1String("application/x-msdownload");
-
- if (!isFolderPreview && !isFontPreview && !isWindowsExePreview) {
+ if (!pixmap.hasAlpha()
+ && m_iconSize.width() > KIconLoader::SizeSmallMedium
+ && m_iconSize.height() > KIconLoader::SizeSmallMedium) {
if (m_enlargeSmallPreviews) {
KPixmapModifier::applyFrame(scaledPixmap, m_iconSize);
} else {
diff --git a/src/kitemviews/private/kdirectorycontentscounterworker.h b/src/kitemviews/private/kdirectorycontentscounterworker.h
index 2460a0e1f..b40da6e87 100644
--- a/src/kitemviews/private/kdirectorycontentscounterworker.h
+++ b/src/kitemviews/private/kdirectorycontentscounterworker.h
@@ -17,8 +17,8 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
***************************************************************************/
-#ifndef KDIRECTORYCONTENTENTSCOUNTERWORKER_H
-#define KDIRECTORYCONTENTENTSCOUNTERWORKER_H
+#ifndef KDIRECTORYCONTENTSCOUNTERWORKER_H
+#define KDIRECTORYCONTENTSCOUNTERWORKER_H
#include <QMetaType>
#include <QObject>
diff --git a/src/kitemviews/private/kitemlistviewlayouter.cpp b/src/kitemviews/private/kitemlistviewlayouter.cpp
index c765cdcfe..56e0f338f 100644
--- a/src/kitemviews/private/kitemlistviewlayouter.cpp
+++ b/src/kitemviews/private/kitemlistviewlayouter.cpp
@@ -17,9 +17,9 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
***************************************************************************/
+#include "kitemlistviewlayouter.h"
#include "dolphindebug.h"
#include "kitemlistsizehintresolver.h"
-#include "kitemlistviewlayouter.h"
#include "kitemviews/kitemmodelbase.h"
// #define KITEMLISTVIEWLAYOUTER_DEBUG
diff --git a/src/main.cpp b/src/main.cpp
index a46b5e2d8..3db63eab0 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -144,7 +144,6 @@ extern "C" Q_DECL_EXPORT int kdemain(int argc, char **argv)
}
DolphinMainWindow* mainWindow = new DolphinMainWindow();
- mainWindow->setAttribute(Qt::WA_DeleteOnClose);
if (parser.isSet(QStringLiteral("select"))) {
mainWindow->openFiles(urls, splitView);
diff --git a/src/panels/information/filemetadataconfigurationdialog.cpp b/src/panels/information/filemetadataconfigurationdialog.cpp
index 3b3789175..f3ca819b7 100644
--- a/src/panels/information/filemetadataconfigurationdialog.cpp
+++ b/src/panels/information/filemetadataconfigurationdialog.cpp
@@ -19,11 +19,7 @@
#include "filemetadataconfigurationdialog.h"
-#ifndef HAVE_BALOO
-#include <kfilemetadataconfigurationwidget.h>
-#else
#include <Baloo/FileMetaDataConfigWidget>
-#endif
#include <KConfigGroup>
#include <KLocalizedString>
#include <KSharedConfig>
@@ -56,12 +52,7 @@ FileMetaDataConfigurationDialog::FileMetaDataConfigurationDialog(QWidget* parent
"be shown:"), this);
m_descriptionLabel->setWordWrap(true);
-#ifndef HAVE_BALOO
- m_configWidget = new KFileMetaDataConfigurationWidget(this);
-#else
m_configWidget = new Baloo::FileMetaDataConfigWidget(this);
-#endif
-
QWidget* mainWidget = new QWidget(this);
QVBoxLayout* topLayout = new QVBoxLayout(mainWidget);
diff --git a/src/panels/information/filemetadataconfigurationdialog.h b/src/panels/information/filemetadataconfigurationdialog.h
index b38404da8..04357783c 100644
--- a/src/panels/information/filemetadataconfigurationdialog.h
+++ b/src/panels/information/filemetadataconfigurationdialog.h
@@ -70,11 +70,7 @@ protected slots:
void slotAccepted();
private:
QLabel* m_descriptionLabel;
-#ifndef HAVE_BALOO
- KFileMetaDataConfigurationWidget* m_configWidget;
-#else
Baloo::FileMetaDataConfigWidget* m_configWidget;
-#endif
};
#endif
diff --git a/src/panels/information/informationpanelcontent.cpp b/src/panels/information/informationpanelcontent.cpp
index 0cba0cdf0..6f671e683 100644
--- a/src/panels/information/informationpanelcontent.cpp
+++ b/src/panels/information/informationpanelcontent.cpp
@@ -32,11 +32,7 @@
#include <QMenu>
#include <QTextDocument>
-#ifndef HAVE_BALOO
-#include <KFileMetaDataWidget>
-#else
#include <Baloo/FileMetaDataWidget>
-#endif
#include <panels/places/placesitem.h>
#include <panels/places/placesitemmodel.h>
@@ -106,19 +102,13 @@ InformationPanelContent::InformationPanelContent(QWidget* parent) :
const bool previewsShown = InformationPanelSettings::previewsShown();
m_preview->setVisible(previewsShown);
-#ifndef HAVE_BALOO
- m_metaDataWidget = new KFileMetaDataWidget(parent);
- connect(m_metaDataWidget, &KFileMetaDataWidget::urlActivated,
- this, &InformationPanelContent::urlActivated);
-#else
m_metaDataWidget = new Baloo::FileMetaDataWidget(parent);
m_metaDataWidget->setDateFormat(static_cast<Baloo::DateFormats>(InformationPanelSettings::dateFormat()));
connect(m_metaDataWidget, &Baloo::FileMetaDataWidget::urlActivated,
this, &InformationPanelContent::urlActivated);
-#endif
m_metaDataWidget->setFont(QFontDatabase::systemFont(QFontDatabase::SmallestReadableFont));
m_metaDataWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum);
-
+
// Encapsulate the MetaDataWidget inside a container that has a dummy widget
// at the bottom. This prevents that the meta data widget gets vertically stretched
// in the case where the height of m_metaDataArea > m_metaDataWidget.
@@ -180,7 +170,10 @@ void InformationPanelContent::showItem(const KFileItem& item)
m_outdatedPreviewTimer->start();
}
- m_previewJob = new KIO::PreviewJob(KFileItemList() << item, QSize(m_preview->width(), m_preview->height()));
+ QStringList plugins = KIO::PreviewJob::availablePlugins();
+ m_previewJob = new KIO::PreviewJob(KFileItemList() << item,
+ QSize(m_preview->width(), m_preview->height()),
+ &plugins);
m_previewJob->setScaleType(KIO::PreviewJob::Unscaled);
m_previewJob->setIgnoreMaximumSize(item.isLocalFile());
if (m_previewJob->uiDelegate()) {
@@ -194,9 +187,7 @@ void InformationPanelContent::showItem(const KFileItem& item)
}
if (m_metaDataWidget) {
-#ifdef HAVE_BALOO
m_metaDataWidget->setDateFormat(static_cast<Baloo::DateFormats>(InformationPanelSettings::dateFormat()));
-#endif
m_metaDataWidget->show();
m_metaDataWidget->setItems(KFileItemList() << item);
}
@@ -285,12 +276,11 @@ void InformationPanelContent::configureSettings(const QList<QAction*>& customCon
QAction* configureAction = popup.addAction(i18nc("@action:inmenu", "Configure..."));
configureAction->setIcon(QIcon::fromTheme(QStringLiteral("configure")));
-#ifdef HAVE_BALOO
QAction* dateformatAction = popup.addAction(i18nc("@action:inmenu", "Condensed Date"));
dateformatAction->setIcon(QIcon::fromTheme(QStringLiteral("change-date-symbolic")));
dateformatAction->setCheckable(true);
dateformatAction->setChecked(InformationPanelSettings::dateFormat() == static_cast<int>(Baloo::DateFormats::ShortFormat));
-#endif
+
popup.addSeparator();
foreach (QAction* action, customContextMenuActions) {
popup.addAction(action);
@@ -316,14 +306,12 @@ void InformationPanelContent::configureSettings(const QList<QAction*>& customCon
dialog->show();
connect(dialog, &FileMetaDataConfigurationDialog::destroyed, this, &InformationPanelContent::refreshMetaData);
}
-#ifdef HAVE_BALOO
if (action == dateformatAction) {
int dateFormat = static_cast<int>(isChecked ? Baloo::DateFormats::ShortFormat : Baloo::DateFormats::LongFormat);
InformationPanelSettings::setDateFormat(dateFormat);
refreshMetaData();
}
-#endif
}
void InformationPanelContent::showIcon(const KFileItem& item)
diff --git a/src/panels/places/placesitemmodel.cpp b/src/panels/places/placesitemmodel.cpp
index 7e313482d..f7fe5587c 100644
--- a/src/panels/places/placesitemmodel.cpp
+++ b/src/panels/places/placesitemmodel.cpp
@@ -120,11 +120,6 @@ void PlacesItemModel::setHiddenItemsShown(bool show)
}
}
}
-
-#ifdef PLACESITEMMODEL_DEBUG
- qCDebug(DolphinDebug) << "Changed visibility of hidden items";
- showModelState();
-#endif
}
bool PlacesItemModel::hiddenItemsShown() const
@@ -169,10 +164,6 @@ void PlacesItemModel::insertSortedItem(PlacesItem* item)
void PlacesItemModel::onItemInserted(int index)
{
KStandardItemModel::onItemInserted(index);
-#ifdef PLACESITEMMODEL_DEBUG
- qCDebug(DolphinDebug) << "Inserted item" << index;
- showModelState();
-#endif
}
void PlacesItemModel::onItemRemoved(int index, KStandardItem* removedItem)
@@ -180,10 +171,6 @@ void PlacesItemModel::onItemRemoved(int index, KStandardItem* removedItem)
m_indexMap.removeAt(index);
KStandardItemModel::onItemRemoved(index, removedItem);
-#ifdef PLACESITEMMODEL_DEBUG
- qCDebug(DolphinDebug) << "Removed item" << index;
- showModelState();
-#endif
}
void PlacesItemModel::onItemChanged(int index, const QSet<QByteArray>& changedRoles)
@@ -635,11 +622,6 @@ void PlacesItemModel::loadBookmarks()
addItemFromSourceModel(sourceIndex);
}
}
-
-#ifdef PLACESITEMMODEL_DEBUG
- qCDebug(DolphinDebug) << "Loaded bookmarks";
- showModelState();
-#endif
}
void PlacesItemModel::clear() {
@@ -786,44 +768,3 @@ PlacesItem *PlacesItemModel::itemFromBookmark(const KBookmark &bookmark) const
return nullptr;
}
-#ifdef PLACESITEMMODEL_DEBUG
-void PlacesItemModel::showModelState()
-{
- qCDebug(DolphinDebug) << "=================================";
- qCDebug(DolphinDebug) << "Model:";
- qCDebug(DolphinDebug) << "hidden-index model-index text";
- int modelIndex = 0;
- for (int i = 0; i < m_bookmarkedItems.count(); ++i) {
- if (m_bookmarkedItems[i]) {
- qCDebug(DolphinDebug) << i << "(Hidden) " << " " << m_bookmarkedItems[i]->dataValue("text").toString();
- } else {
- if (item(modelIndex)) {
- qCDebug(DolphinDebug) << i << " " << modelIndex << " " << item(modelIndex)->dataValue("text").toString();
- } else {
- qCDebug(DolphinDebug) << i << " " << modelIndex << " " << "(not available yet)";
- }
- ++modelIndex;
- }
- }
-
- qCDebug(DolphinDebug);
- qCDebug(DolphinDebug) << "Bookmarks:";
-
- int bookmarkIndex = 0;
- KBookmarkGroup root = m_bookmarkManager->root();
- KBookmark bookmark = root.first();
- while (!bookmark.isNull()) {
- const QString udi = bookmark.metaDataItem("UDI");
- const QString text = udi.isEmpty() ? bookmark.text() : udi;
- if (bookmark.metaDataItem("IsHidden") == QLatin1String("true")) {
- qCDebug(DolphinDebug) << bookmarkIndex << "(Hidden)" << text;
- } else {
- qCDebug(DolphinDebug) << bookmarkIndex << " " << text;
- }
-
- bookmark = root.next(bookmark);
- ++bookmarkIndex;
- }
-}
-#endif
-
diff --git a/src/panels/places/placesitemmodel.h b/src/panels/places/placesitemmodel.h
index a2086efc5..c4ff7e2dd 100644
--- a/src/panels/places/placesitemmodel.h
+++ b/src/panels/places/placesitemmodel.h
@@ -32,17 +32,13 @@
#include <QUrl>
class KBookmark;
-class KBookmarkManager;
class PlacesItem;
class QAction;
-// #define PLACESITEMMODEL_DEBUG
-
/**
* @brief Model for maintaining the bookmarks of the places panel.
*
- * It is compatible to the KFilePlacesModel from kdelibs but adds
- * the ability to have groups for places.
+ * It is based on KFilePlacesModel from KIO.
*/
class PlacesItemModel: public KStandardItemModel
{
@@ -204,10 +200,6 @@ private:
*/
void insertSortedItem(PlacesItem* item);
-#ifdef PLACESITEMMODEL_DEBUG
- void showModelState();
-#endif
-
PlacesItem *itemFromBookmark(const KBookmark &bookmark) const;
void addItemFromSourceModel(const QModelIndex &index);
diff --git a/src/panels/places/placespanel.cpp b/src/panels/places/placespanel.cpp
index 00d8735c3..8d7f29384 100644
--- a/src/panels/places/placespanel.cpp
+++ b/src/panels/places/placespanel.cpp
@@ -38,22 +38,17 @@
#include "trash/dolphintrash.h"
#include "views/draganddrophelper.h"
-#include <KDirNotify>
-#include <KFileItem>
#include <KFilePlacesModel>
#include <KIO/DropJob>
#include <KIO/EmptyTrashJob>
#include <KIO/Job>
-#include <KIO/JobUiDelegate>
#include <KIconLoader>
-#include <KJobWidgets>
#include <KLocalizedString>
-#include <KMessageBox>
-#include <KNotification>
#include <QGraphicsSceneDragDropEvent>
#include <QIcon>
#include <QMenu>
+#include <QMimeData>
#include <QVBoxLayout>
PlacesPanel::PlacesPanel(QWidget* parent) :
@@ -174,6 +169,7 @@ void PlacesPanel::slotItemContextMenuRequested(int index, const QPointF& pos)
QAction* editAction = nullptr;
QAction* teardownAction = nullptr;
QAction* ejectAction = nullptr;
+ QAction* mountAction = nullptr;
const bool isDevice = !item->udi().isEmpty();
const bool isTrash = (item->url().scheme() == QLatin1String("trash"));
@@ -190,7 +186,11 @@ void PlacesPanel::slotItemContextMenuRequested(int index, const QPointF& pos)
menu.addAction(teardownAction);
}
- if (teardownAction || ejectAction) {
+ if (item->storageSetupNeeded()) {
+ mountAction = menu.addAction(QIcon::fromTheme(QStringLiteral("media-mount")), i18nc("@action:inmenu", "Mount"));
+ }
+
+ if (teardownAction || ejectAction || mountAction) {
menu.addSeparator();
}
} else {
@@ -208,7 +208,7 @@ void PlacesPanel::slotItemContextMenuRequested(int index, const QPointF& pos)
}
if (!isDevice) {
- editAction = menu.addAction(QIcon::fromTheme("document-properties"), i18nc("@item:inmenu", "Edit..."));
+ editAction = menu.addAction(QIcon::fromTheme("edit-entry"), i18nc("@item:inmenu", "Edit..."));
}
QAction* removeAction = nullptr;
@@ -248,6 +248,8 @@ void PlacesPanel::slotItemContextMenuRequested(int index, const QPointF& pos)
// TriggerItem does set up the storage first and then it will
// emit the slotItemMiddleClicked signal, because of Qt::MiddleButton.
triggerItem(index, Qt::MiddleButton);
+ } else if (action == mountAction) {
+ m_model->requestStorageSetup(index);
} else if (action == teardownAction) {
m_model->requestTearDown(index);
} else if (action == ejectAction) {
diff --git a/src/panels/places/placespanel.h b/src/panels/places/placespanel.h
index d62697940..c6f959d23 100644
--- a/src/panels/places/placespanel.h
+++ b/src/panels/places/placespanel.h
@@ -23,16 +23,14 @@
#include "panels/panel.h"
-#include <QMimeData>
#include <QUrl>
class KItemListController;
-class PlacesItem;
class PlacesItemModel;
class PlacesView;
class QGraphicsSceneDragDropEvent;
-class KJob;
class QMenu;
+class QMimeData;
/**
* @brief Combines bookmarks and mounted devices as list.
*/
diff --git a/src/settings/general/behaviorsettingspage.cpp b/src/settings/general/behaviorsettingspage.cpp
index 921ab3f8e..add9acad5 100644
--- a/src/settings/general/behaviorsettingspage.cpp
+++ b/src/settings/general/behaviorsettingspage.cpp
@@ -78,13 +78,19 @@ BehaviorSettingsPage::BehaviorSettingsPage(const QUrl& url, QWidget* parent) :
topLayout->addItem(new QSpacerItem(0, Dolphin::VERTICAL_SPACER_HEIGHT, QSizePolicy::Fixed, QSizePolicy::Fixed));
+#ifdef HAVE_BALOO
// 'Show tooltips'
m_showToolTips = new QCheckBox(i18nc("@option:check", "Show tooltips"));
topLayout->addRow(i18nc("@title:group", "Miscellaneous: "), m_showToolTips);
+#endif
// 'Show selection marker'
m_showSelectionToggle = new QCheckBox(i18nc("@option:check", "Show selection marker"));
+#ifdef HAVE_BALOO
topLayout->addRow(QString(), m_showSelectionToggle);
+#else
+ topLayout->addRow(i18nc("@title:group", "Miscellaneous: "), m_showSelectionToggle);
+#endif
// 'Inline renaming of items'
m_renameInline = new QCheckBox(i18nc("option:check", "Rename inline"));
@@ -98,7 +104,9 @@ BehaviorSettingsPage::BehaviorSettingsPage(const QUrl& url, QWidget* parent) :
connect(m_localViewProps, &QRadioButton::toggled, this, &BehaviorSettingsPage::changed);
connect(m_globalViewProps, &QRadioButton::toggled, this, &BehaviorSettingsPage::changed);
+#ifdef HAVE_BALOO
connect(m_showToolTips, &QCheckBox::toggled, this, &BehaviorSettingsPage::changed);
+#endif
connect(m_showSelectionToggle, &QCheckBox::toggled, this, &BehaviorSettingsPage::changed);
connect(m_naturalSorting, &QRadioButton::toggled, this, &BehaviorSettingsPage::changed);
connect(m_caseInsensitiveSorting, &QRadioButton::toggled, this, &BehaviorSettingsPage::changed);
@@ -118,7 +126,9 @@ void BehaviorSettingsPage::applySettings()
const bool useGlobalViewProps = m_globalViewProps->isChecked();
settings->setGlobalViewProps(useGlobalViewProps);
+#ifdef HAVE_BALOO
settings->setShowToolTips(m_showToolTips->isChecked());
+#endif
settings->setShowSelectionToggle(m_showSelectionToggle->isChecked());
setSortingChoiceValue(settings);
settings->setRenameInline(m_renameInline->isChecked());
@@ -149,7 +159,9 @@ void BehaviorSettingsPage::loadSettings()
m_localViewProps->setChecked(!useGlobalViewProps);
m_globalViewProps->setChecked(useGlobalViewProps);
+#ifdef HAVE_BALOO
m_showToolTips->setChecked(GeneralSettings::showToolTips());
+#endif
m_showSelectionToggle->setChecked(GeneralSettings::showSelectionToggle());
m_renameInline->setChecked(GeneralSettings::renameInline());
m_useTabForSplitViewSwitch->setChecked(GeneralSettings::useTabForSwitchingSplitView());
diff --git a/src/statusbar/dolphinstatusbar.cpp b/src/statusbar/dolphinstatusbar.cpp
index 34916830e..b3fddba10 100644
--- a/src/statusbar/dolphinstatusbar.cpp
+++ b/src/statusbar/dolphinstatusbar.cpp
@@ -252,6 +252,11 @@ void DolphinStatusBar::readSettings()
setExtensionsVisible(true);
}
+void DolphinStatusBar::updateSpaceInfo()
+{
+ m_spaceInfo->update();
+}
+
void DolphinStatusBar::contextMenuEvent(QContextMenuEvent* event)
{
Q_UNUSED(event);
diff --git a/src/statusbar/dolphinstatusbar.h b/src/statusbar/dolphinstatusbar.h
index 8b872ace5..7461d1d7d 100644
--- a/src/statusbar/dolphinstatusbar.h
+++ b/src/statusbar/dolphinstatusbar.h
@@ -88,6 +88,11 @@ public:
*/
void readSettings();
+ /**
+ * Refreshes the disk space information.
+ */
+ void updateSpaceInfo();
+
public slots:
void setText(const QString& text);
void setUrl(const QUrl& url);
diff --git a/src/statusbar/spaceinfoobserver.cpp b/src/statusbar/spaceinfoobserver.cpp
index 6cf695d55..692eba7e7 100644
--- a/src/statusbar/spaceinfoobserver.cpp
+++ b/src/statusbar/spaceinfoobserver.cpp
@@ -71,6 +71,13 @@ void SpaceInfoObserver::setUrl(const QUrl& url)
}
}
+void SpaceInfoObserver::update()
+{
+ if (m_mountPointObserver) {
+ m_mountPointObserver->update();
+ }
+}
+
void SpaceInfoObserver::spaceInfoChanged(quint64 size, quint64 available)
{
// Make sure that the size has actually changed
diff --git a/src/statusbar/spaceinfoobserver.h b/src/statusbar/spaceinfoobserver.h
index 1e74caef4..93f4c8c91 100644
--- a/src/statusbar/spaceinfoobserver.h
+++ b/src/statusbar/spaceinfoobserver.h
@@ -40,6 +40,9 @@ public:
void setUrl(const QUrl& url);
+public slots:
+ void update();
+
signals:
/**
* This signal is emitted when the size or available space changes.
diff --git a/src/statusbar/statusbarspaceinfo.cpp b/src/statusbar/statusbarspaceinfo.cpp
index 65af17490..882249576 100644
--- a/src/statusbar/statusbarspaceinfo.cpp
+++ b/src/statusbar/statusbarspaceinfo.cpp
@@ -54,6 +54,13 @@ QUrl StatusBarSpaceInfo::url() const
return m_url;
}
+void StatusBarSpaceInfo::update()
+{
+ if (m_observer) {
+ m_observer->update();
+ }
+}
+
void StatusBarSpaceInfo::showEvent(QShowEvent* event)
{
KCapacityBar::showEvent(event);
diff --git a/src/statusbar/statusbarspaceinfo.h b/src/statusbar/statusbarspaceinfo.h
index 4f36517ae..24f8b7f29 100644
--- a/src/statusbar/statusbarspaceinfo.h
+++ b/src/statusbar/statusbarspaceinfo.h
@@ -45,6 +45,8 @@ public:
void setUrl(const QUrl& url);
QUrl url() const;
+ void update();
+
protected:
void showEvent(QShowEvent* event) override;
void hideEvent(QHideEvent* event) override;
diff --git a/src/tests/dolphinmainwindowtest.cpp b/src/tests/dolphinmainwindowtest.cpp
index 0dc330124..027ab3e89 100644
--- a/src/tests/dolphinmainwindowtest.cpp
+++ b/src/tests/dolphinmainwindowtest.cpp
@@ -40,9 +40,11 @@ private slots:
void testActiveViewAfterClosingSplitView_data();
void testActiveViewAfterClosingSplitView();
void testUpdateWindowTitleAfterClosingSplitView();
+ void testOpenInNewTabTitle();
void testNewFileMenuEnabled_data();
void testNewFileMenuEnabled();
+
private:
QScopedPointer<DolphinMainWindow> m_mainWindow;
};
@@ -173,6 +175,23 @@ void DolphinMainWindowTest::testUpdateWindowTitleAfterClosingSplitView()
QCOMPARE(currentUrlChangedSpy.count(), 1);
}
+// Test case for bug #397910
+void DolphinMainWindowTest::testOpenInNewTabTitle()
+{
+ m_mainWindow->openDirectories({ QUrl::fromLocalFile(QDir::homePath()) }, false);
+ m_mainWindow->show();
+ QVERIFY(QTest::qWaitForWindowExposed(m_mainWindow.data()));
+ QVERIFY(m_mainWindow->isVisible());
+
+ auto tabWidget = m_mainWindow->findChild<DolphinTabWidget*>("tabWidget");
+ QVERIFY(tabWidget);
+
+ tabWidget->openNewTab(QUrl::fromLocalFile(QDir::tempPath()));
+ QCOMPARE(tabWidget->count(), 2);
+ QVERIFY(tabWidget->tabIcon(0).name() != tabWidget->tabIcon(1).name());
+ QVERIFY(tabWidget->tabText(0) != tabWidget->tabText(1));
+}
+
void DolphinMainWindowTest::testNewFileMenuEnabled_data()
{
QTest::addColumn<QUrl>("activeViewUrl");
diff --git a/src/tests/kfileitemmodeltest.cpp b/src/tests/kfileitemmodeltest.cpp
index b455c521d..2f258d17d 100644
--- a/src/tests/kfileitemmodeltest.cpp
+++ b/src/tests/kfileitemmodeltest.cpp
@@ -1551,25 +1551,26 @@ void KFileItemModelTest::testChangeSortRoleWhileFiltering()
{
KFileItemList items;
- KIO::UDSEntry entry;
- entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, 0100000); // S_IFREG might not be defined on non-Unix platforms.
- entry.insert(KIO::UDSEntry::UDS_ACCESS, 07777);
- entry.insert(KIO::UDSEntry::UDS_SIZE, 0);
- entry.insert(KIO::UDSEntry::UDS_MODIFICATION_TIME, 0);
- entry.insert(KIO::UDSEntry::UDS_GROUP, "group");
- entry.insert(KIO::UDSEntry::UDS_ACCESS_TIME, 0);
+ KIO::UDSEntry entry[3];
- entry.insert(KIO::UDSEntry::UDS_NAME, "a.txt");
- entry.insert(KIO::UDSEntry::UDS_USER, "user-b");
- items.append(KFileItem(entry, m_testDir->url(), false, true));
+ entry[0].insert(KIO::UDSEntry::UDS_NAME, "a.txt");
+ entry[0].insert(KIO::UDSEntry::UDS_USER, "user-b");
- entry.insert(KIO::UDSEntry::UDS_NAME, "b.txt");
- entry.insert(KIO::UDSEntry::UDS_USER, "user-c");
- items.append(KFileItem(entry, m_testDir->url(), false, true));
+ entry[1].insert(KIO::UDSEntry::UDS_NAME, "b.txt");
+ entry[1].insert(KIO::UDSEntry::UDS_USER, "user-c");
- entry.insert(KIO::UDSEntry::UDS_NAME, "c.txt");
- entry.insert(KIO::UDSEntry::UDS_USER, "user-a");
- items.append(KFileItem(entry, m_testDir->url(), false, true));
+ entry[2].insert(KIO::UDSEntry::UDS_NAME, "c.txt");
+ entry[2].insert(KIO::UDSEntry::UDS_USER, "user-a");
+
+ for (int i = 0; i < 3; ++i) {
+ entry[i].insert(KIO::UDSEntry::UDS_FILE_TYPE, 0100000); // S_IFREG might not be defined on non-Unix platforms.
+ entry[i].insert(KIO::UDSEntry::UDS_ACCESS, 07777);
+ entry[i].insert(KIO::UDSEntry::UDS_SIZE, 0);
+ entry[i].insert(KIO::UDSEntry::UDS_MODIFICATION_TIME, 0);
+ entry[i].insert(KIO::UDSEntry::UDS_GROUP, "group");
+ entry[i].insert(KIO::UDSEntry::UDS_ACCESS_TIME, 0);
+ items.append(KFileItem(entry[i], m_testDir->url(), false, true));
+ }
m_model->slotItemsAdded(m_testDir->url(), items);
m_model->slotCompleted();
diff --git a/src/views/dolphinview.cpp b/src/views/dolphinview.cpp
index 1db62b800..df2797d1d 100644
--- a/src/views/dolphinview.cpp
+++ b/src/views/dolphinview.cpp
@@ -176,8 +176,10 @@ DolphinView::DolphinView(const QUrl& url, QWidget* parent) :
connect(selectionManager, &KItemListSelectionManager::selectionChanged,
this, &DolphinView::slotSelectionChanged);
+#ifdef HAVE_BALOO
m_toolTipManager = new ToolTipManager(this);
connect(m_toolTipManager, &ToolTipManager::urlActivated, this, &DolphinView::urlActivated);
+#endif
m_versionControlObserver = new VersionControlObserver(this);
m_versionControlObserver->setModel(m_model);
@@ -1031,7 +1033,9 @@ void DolphinView::slotItemHovered(int index)
const QPoint pos = m_container->mapToGlobal(itemRect.topLeft().toPoint());
itemRect.moveTo(pos);
+#ifdef HAVE_BALOO
m_toolTipManager->showToolTip(item, itemRect, nativeParentWidget()->windowHandle());
+#endif
}
emit requestItemInfo(item);
@@ -1408,9 +1412,11 @@ void DolphinView::updateViewState()
void DolphinView::hideToolTip()
{
+#ifdef HAVE_BALOO
if (GeneralSettings::showToolTips()) {
m_toolTipManager->hideToolTip();
}
+#endif
}
void DolphinView::calculateItemCount(int& fileCount,
@@ -1482,7 +1488,7 @@ void DolphinView::slotRenamingResult(KJob* job)
void DolphinView::slotDirectoryLoadingStarted()
{
// Disable the writestate temporary until it can be determined in a fast way
- // in DolphinView::slotLoadingCompleted()
+ // in DolphinView::slotDirectoryLoadingCompleted()
if (m_isFolderWritable) {
m_isFolderWritable = false;
emit writeStateChanged(m_isFolderWritable);
diff --git a/src/views/tooltips/dolphinfilemetadatawidget.cpp b/src/views/tooltips/dolphinfilemetadatawidget.cpp
index 1df6a6673..f4a688ea8 100644
--- a/src/views/tooltips/dolphinfilemetadatawidget.cpp
+++ b/src/views/tooltips/dolphinfilemetadatawidget.cpp
@@ -24,11 +24,7 @@
#include <KColorScheme>
#include <KSeparator>
#include <KStringHandler>
-#ifndef HAVE_BALOO
-#include <KFileMetaDataWidget>
-#else
#include <Baloo/FileMetaDataWidget>
-#endif
#include <QLabel>
#include <QStyleOptionFrame>
@@ -61,19 +57,11 @@ DolphinFileMetaDataWidget::DolphinFileMetaDataWidget(QWidget* parent) :
m_name->setMaximumWidth(fontMetrics.averageCharWidth() * 40);
// Create widget for the meta data
-#ifndef HAVE_BALOO
- m_fileMetaDataWidget = new KFileMetaDataWidget(this);
- connect(m_fileMetaDataWidget, &KFileMetaDataWidget::metaDataRequestFinished,
- this, &DolphinFileMetaDataWidget::metaDataRequestFinished);
- connect(m_fileMetaDataWidget, &KFileMetaDataWidget::urlActivated,
- this, &DolphinFileMetaDataWidget::urlActivated);
-#else
m_fileMetaDataWidget = new Baloo::FileMetaDataWidget(this);
connect(m_fileMetaDataWidget, &Baloo::FileMetaDataWidget::metaDataRequestFinished,
this, &DolphinFileMetaDataWidget::metaDataRequestFinished);
connect(m_fileMetaDataWidget, &Baloo::FileMetaDataWidget::urlActivated,
this, &DolphinFileMetaDataWidget::urlActivated);
-#endif
m_fileMetaDataWidget->setForegroundRole(QPalette::ToolTipText);
m_fileMetaDataWidget->setReadOnly(true);
diff --git a/src/views/tooltips/dolphinfilemetadatawidget.h b/src/views/tooltips/dolphinfilemetadatawidget.h
index 1e2cfadb6..b9dbd98a1 100644
--- a/src/views/tooltips/dolphinfilemetadatawidget.h
+++ b/src/views/tooltips/dolphinfilemetadatawidget.h
@@ -29,13 +29,9 @@
class KFileItemList;
class QLabel;
-#ifndef HAVE_BALOO
-class KFileMetaDataWidget;
-#else
namespace Baloo {
class FileMetaDataWidget;
}
-#endif
/**
* @brief Widget that shows the meta information and a preview of one
@@ -79,11 +75,7 @@ signals:
private:
QLabel* m_preview;
QLabel* m_name;
-#ifndef HAVE_BALOO
- KFileMetaDataWidget* m_fileMetaDataWidget;
-#else
Baloo::FileMetaDataWidget* m_fileMetaDataWidget;
-#endif
};
#endif
diff --git a/src/views/tooltips/tooltipmanager.cpp b/src/views/tooltips/tooltipmanager.cpp
index 19c87b084..bb2890138 100644
--- a/src/views/tooltips/tooltipmanager.cpp
+++ b/src/views/tooltips/tooltipmanager.cpp
@@ -129,7 +129,10 @@ void ToolTipManager::startContentRetrieval()
// Request a preview of the item
m_fileMetaDataWidget->setPreview(QPixmap());
- KIO::PreviewJob* job = new KIO::PreviewJob(KFileItemList() << m_item, QSize(256, 256));
+ QStringList plugins = KIO::PreviewJob::availablePlugins();
+ KIO::PreviewJob* job = new KIO::PreviewJob(KFileItemList() << m_item,
+ QSize(256, 256),
+ &plugins);
job->setIgnoreMaximumSize(m_item.isLocalFile());
if (job->uiDelegate()) {
KJobWidgets::setWindow(job, qApp->activeWindow());
diff --git a/src/views/viewproperties.cpp b/src/views/viewproperties.cpp
index e5d636cd1..d7c6abd65 100644
--- a/src/views/viewproperties.cpp
+++ b/src/views/viewproperties.cpp
@@ -63,17 +63,19 @@ ViewProperties::ViewProperties(const QUrl& url) :
useDetailsViewWithPath = true;
} else if (url.isLocalFile()) {
m_filePath = url.toLocalFile();
- const QFileInfo dirInfo(m_filePath);
- const QFileInfo fileInfo(m_filePath + QDir::separator() + ViewPropertiesFileName);
- // Check if the directory is writable and check if the ".directory" file exists and
- // is read- and writable.
- if (!dirInfo.isWritable()
- || (fileInfo.exists() && !(fileInfo.isReadable() && fileInfo.isWritable()))
- || !isPartOfHome(m_filePath)) {
-#ifdef Q_OS_WIN
- // m_filePath probably begins with C:/ - the colon is not a valid character for paths though
- m_filePath = QDir::separator() + m_filePath.remove(QLatin1Char(':'));
-#endif
+
+ bool useDestinationDir = !isPartOfHome(m_filePath);
+ if (!useDestinationDir) {
+ const QFileInfo dirInfo(m_filePath);
+ const QFileInfo fileInfo(m_filePath + QDir::separator() + ViewPropertiesFileName);
+ useDestinationDir = !dirInfo.isWritable() || (dirInfo.size() > 0 && fileInfo.exists() && !(fileInfo.isReadable() && fileInfo.isWritable()));
+ }
+
+ if (useDestinationDir) {
+ #ifdef Q_OS_WIN
+ // m_filePath probably begins with C:/ - the colon is not a valid character for paths though
+ m_filePath = QDir::separator() + m_filePath.remove(QLatin1Char(':'));
+ #endif
m_filePath = destinationDir(QStringLiteral("local")) + m_filePath;
}
} else {