diff options
Diffstat (limited to 'src')
24 files changed, 185 insertions, 170 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/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 f8b35d4a7..b603b8cfa 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(); @@ -1001,46 +999,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) @@ -1266,6 +1227,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); @@ -1281,6 +1244,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")); @@ -1377,7 +1341,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(); @@ -1501,7 +1467,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..f747d442e 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> @@ -409,6 +410,52 @@ 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 (!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 = '/'; + } + + if (isSearchModeEnabled()) { + if(currentSearchText().isEmpty()){ + return i18n("Search"); + } else { + return i18n("Search for %1", currentSearchText()); + } + } + + 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..409aecfcf 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 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/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/tests/dolphinmainwindowtest.cpp b/src/tests/dolphinmainwindowtest.cpp index eee387116..ca492215a 100644 --- a/src/tests/dolphinmainwindowtest.cpp +++ b/src/tests/dolphinmainwindowtest.cpp @@ -39,6 +39,7 @@ private slots: void testActiveViewAfterClosingSplitView_data(); void testActiveViewAfterClosingSplitView(); void testUpdateWindowTitleAfterClosingSplitView(); + void testOpenInNewTabTitle(); private: QScopedPointer<DolphinMainWindow> m_mainWindow; @@ -170,6 +171,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)); +} + QTEST_MAIN(DolphinMainWindowTest) #include "dolphinmainwindowtest.moc" 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 342c22638..a0c5ef38b 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); @@ -1030,7 +1032,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); @@ -1407,9 +1411,11 @@ void DolphinView::updateViewState() void DolphinView::hideToolTip() { +#ifdef HAVE_BALOO if (GeneralSettings::showToolTips()) { m_toolTipManager->hideToolTip(); } +#endif } void DolphinView::calculateItemCount(int& fileCount, 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()); |
