X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/3fe971e17467e30ba59ca42a53931a273fd7e78b..fcdb202577f3368e85a685bfc4b851e7ddc797c8:/src/views/dolphinview.cpp diff --git a/src/views/dolphinview.cpp b/src/views/dolphinview.cpp index f5c21a2c5..c84e642dc 100644 --- a/src/views/dolphinview.cpp +++ b/src/views/dolphinview.cpp @@ -7,8 +7,8 @@ #include "dolphinview.h" -#include "dolphin_detailsmodesettings.h" #include "dolphin_generalsettings.h" +#include "dolphin_detailsmodesettings.h" #include "dolphinitemlistview.h" #include "dolphinnewfilemenuobserver.h" #include "draganddrophelper.h" @@ -19,12 +19,14 @@ #include "kitemviews/kitemlistheader.h" #include "kitemviews/kitemlistselectionmanager.h" #include "kitemviews/private/kitemlistroleeditor.h" +#include "settings/viewmodes/viewmodesettings.h" +#include "selectionmode/singleclickselectionproxystyle.h" #include "versioncontrol/versioncontrolobserver.h" #include "viewproperties.h" #include "views/tooltips/tooltipmanager.h" #include "zoomlevelinfo.h" -#ifdef HAVE_BALOO +#if HAVE_BALOO #include #endif #include @@ -38,12 +40,19 @@ #include #include #include -#include #include #include #include #include #include +#include + +#include + +#include +#if KIO_VERSION >= QT_VERSION_CHECK(5, 100, 0) +#include +#endif #include #include @@ -56,10 +65,10 @@ #include #include #include -#include #include #include #include +#include #include DolphinView::DolphinView(const QUrl& url, QWidget* parent) : @@ -69,7 +78,6 @@ DolphinView::DolphinView(const QUrl& url, QWidget* parent) : m_assureVisibleCurrentIndex(false), m_isFolderWritable(true), m_dragging(false), - m_loading(false), m_url(url), m_viewPropertiesContext(), m_mode(DolphinView::IconsView), @@ -109,7 +117,7 @@ DolphinView::DolphinView(const QUrl& url, QWidget* parent) : m_model = new KFileItemModel(this); m_view = new DolphinItemListView(); - m_view->setEnabledSelectionToggles(GeneralSettings::showSelectionToggle()); + m_view->setEnabledSelectionToggles(DolphinItemListView::SelectionTogglesEnabled::FollowSetting); m_view->setVisibleRoles({"text"}); applyModeToView(); @@ -171,6 +179,7 @@ DolphinView::DolphinView(const QUrl& url, QWidget* parent) : connect(controller, &KItemListController::increaseZoom, this, &DolphinView::slotIncreaseZoom); connect(controller, &KItemListController::decreaseZoom, this, &DolphinView::slotDecreaseZoom); connect(controller, &KItemListController::swipeUp, this, &DolphinView::slotSwipeUp); + connect(controller, &KItemListController::selectionModeChangeRequested, this, &DolphinView::selectionModeChangeRequested); connect(m_model, &KFileItemModel::directoryLoadingStarted, this, &DolphinView::slotDirectoryLoadingStarted); connect(m_model, &KFileItemModel::directoryLoadingCompleted, this, &DolphinView::slotDirectoryLoadingCompleted); @@ -186,6 +195,7 @@ DolphinView::DolphinView(const QUrl& url, QWidget* parent) : connect(m_model, &KFileItemModel::directoryRedirection, this, &DolphinView::slotDirectoryRedirection); connect(m_model, &KFileItemModel::urlIsFileError, this, &DolphinView::urlIsFileError); connect(m_model, &KFileItemModel::fileItemsChanged, this, &DolphinView::fileItemsChanged); + connect(m_model, &KFileItemModel::currentDirectoryRemoved, this, &DolphinView::currentDirectoryRemoved); connect(this, &DolphinView::itemCountChanged, this, &DolphinView::updatePlaceholderLabel); @@ -201,12 +211,14 @@ DolphinView::DolphinView(const QUrl& url, QWidget* parent) : this, &DolphinView::slotRoleEditingCanceled); connect(m_view->header(), &KItemListHeader::columnWidthChangeFinished, this, &DolphinView::slotHeaderColumnWidthChangeFinished); + connect(m_view->header(), &KItemListHeader::sidePaddingChanged, + this, &DolphinView::slotSidePaddingWidthChanged); KItemListSelectionManager* selectionManager = controller->selectionManager(); connect(selectionManager, &KItemListSelectionManager::selectionChanged, this, &DolphinView::slotSelectionChanged); -#ifdef HAVE_BALOO +#if HAVE_BALOO m_toolTipManager = new ToolTipManager(this); connect(m_toolTipManager, &ToolTipManager::urlActivated, this, &DolphinView::urlActivated); #endif @@ -230,6 +242,7 @@ DolphinView::DolphinView(const QUrl& url, QWidget* parent) : DolphinView::~DolphinView() { + disconnect(m_container->controller(), &KItemListController::modelChanged, this, &DolphinView::slotModelChanged); } QUrl DolphinView::url() const @@ -259,7 +272,7 @@ bool DolphinView::isActive() const return m_active; } -void DolphinView::setMode(Mode mode) +void DolphinView::setViewMode(Mode mode) { if (mode != m_mode) { ViewProperties props(viewPropertiesUrl()); @@ -273,11 +286,31 @@ void DolphinView::setMode(Mode mode) } } -DolphinView::Mode DolphinView::mode() const +DolphinView::Mode DolphinView::viewMode() const { return m_mode; } +void DolphinView::setSelectionModeEnabled(const bool enabled) +{ + if (enabled) { + m_proxyStyle = std::make_unique(); + setStyle(m_proxyStyle.get()); + m_view->setStyle(m_proxyStyle.get()); + m_view->setEnabledSelectionToggles(DolphinItemListView::SelectionTogglesEnabled::False); + } else { + setStyle(QApplication::style()); + m_view->setStyle(QApplication::style()); + m_view->setEnabledSelectionToggles(DolphinItemListView::SelectionTogglesEnabled::FollowSetting); + } + m_container->controller()->setSelectionModeEnabled(enabled); +} + +bool DolphinView::selectionMode() const +{ + return m_container->controller()->selectionMode(); +} + void DolphinView::setPreviewsShown(bool show) { if (previewsShown() == show) { @@ -463,6 +496,18 @@ bool DolphinView::sortFoldersFirst() const return m_model->sortDirectoriesFirst(); } +void DolphinView::setSortHiddenLast(bool hiddenLast) +{ + if (sortHiddenLast() != hiddenLast) { + updateSortHiddenLast(hiddenLast); + } +} + +bool DolphinView::sortHiddenLast() const +{ + return m_model->sortHiddenLast(); +} + void DolphinView::setVisibleRoles(const QList& roles) { const QList previousRoles = roles; @@ -714,6 +759,13 @@ void DolphinView::renameSelectedItems() void DolphinView::trashSelectedItems() { const QList list = simplifiedSelectedUrls(); + +#if KIO_VERSION >= QT_VERSION_CHECK(5, 100, 0) + using Iface = KIO::AskUserActionInterface; + auto *trashJob = new KIO::DeleteOrTrashJob(list, Iface::Trash, Iface::DefaultConfirmation, this); + connect(trashJob, &KJob::result, this, &DolphinView::slotTrashFileFinished); + trashJob->start(); +#else KIO::JobUiDelegate uiDelegate; uiDelegate.setWindow(window()); if (uiDelegate.askDeleteConfirmation(list, KIO::JobUiDelegate::Trash, KIO::JobUiDelegate::DefaultConfirmation)) { @@ -723,12 +775,19 @@ void DolphinView::trashSelectedItems() connect(job, &KIO::Job::result, this, &DolphinView::slotTrashFileFinished); } +#endif } void DolphinView::deleteSelectedItems() { const QList list = simplifiedSelectedUrls(); +#if KIO_VERSION >= QT_VERSION_CHECK(5, 100, 0) + using Iface = KIO::AskUserActionInterface; + auto *trashJob = new KIO::DeleteOrTrashJob(list, Iface::Delete, Iface::DefaultConfirmation, this); + connect(trashJob, &KJob::result, this, &DolphinView::slotTrashFileFinished); + trashJob->start(); +#else KIO::JobUiDelegate uiDelegate; uiDelegate.setWindow(window()); if (uiDelegate.askDeleteConfirmation(list, KIO::JobUiDelegate::Delete, KIO::JobUiDelegate::DefaultConfirmation)) { @@ -737,18 +796,21 @@ void DolphinView::deleteSelectedItems() connect(job, &KIO::Job::result, this, &DolphinView::slotDeleteFileFinished); } +#endif } void DolphinView::cutSelectedItemsToClipboard() { QMimeData* mimeData = selectionMimeData(); KIO::setClipboardDataCut(mimeData, true); + KUrlMimeData::exportUrlsToPortal(mimeData); QApplication::clipboard()->setMimeData(mimeData); } void DolphinView::copySelectedItemsToClipboard() { - QMimeData* mimeData = selectionMimeData(); + QMimeData *mimeData = selectionMimeData(); + KUrlMimeData::exportUrlsToPortal(mimeData); QApplication::clipboard()->setMimeData(mimeData); } @@ -907,6 +969,11 @@ bool DolphinView::eventFilter(QObject* watched, QEvent* event) if (watched == m_view) { m_dragging = false; } + break; + + case QEvent::ToolTip: + tryShowNameToolTip(static_cast(event)); + default: break; } @@ -963,16 +1030,29 @@ void DolphinView::slotItemActivated(int index) } } -void DolphinView::slotItemsActivated(const KItemSet& indexes) +void DolphinView::slotItemsActivated(const KItemSet &indexes) { Q_ASSERT(indexes.count() >= 2); abortTwoClicksRenaming(); + const auto modifiers = QGuiApplication::keyboardModifiers(); + if (indexes.count() > 5) { QString question = i18np("Are you sure you want to open 1 item?", "Are you sure you want to open %1 items?", indexes.count()); - const int answer = KMessageBox::warningYesNo(this, question); +#if KWIDGETSADDONS_VERSION >= QT_VERSION_CHECK(5, 100, 0) + const int answer = KMessageBox::warningTwoActions(this, question, {}, +#else + const int answer = KMessageBox::warningYesNo(this, question, {}, +#endif + KGuiItem(i18ncp("@action:button", "Open %1 Item", "Open %1 Items", indexes.count()), + QStringLiteral("document-open")), + KStandardGuiItem::cancel()); +#if KWIDGETSADDONS_VERSION >= QT_VERSION_CHECK(5, 100, 0) + if (answer != KMessageBox::PrimaryAction) { +#else if (answer != KMessageBox::Yes) { +#endif return; } } @@ -984,8 +1064,15 @@ void DolphinView::slotItemsActivated(const KItemSet& indexes) KFileItem item = m_model->fileItem(index); const QUrl& url = openItemAsFolderUrl(item); - if (!url.isEmpty()) { // Open folders in new tabs - Q_EMIT tabRequested(url); + if (!url.isEmpty()) { + // Open folders in new tabs or in new windows depending on the modifier + // The ctrl+shift behavior is ignored because we are handling multiple items + // keep in sync with KUrlNavigator::slotNavigatorButtonClicked + if (modifiers & Qt::ShiftModifier && !(modifiers & Qt::ControlModifier)) { + Q_EMIT windowRequested(url); + } else { + Q_EMIT tabRequested(url); + } } else { items.append(item); } @@ -1002,10 +1089,21 @@ void DolphinView::slotItemMiddleClicked(int index) { const KFileItem& item = m_model->fileItem(index); const QUrl& url = openItemAsFolderUrl(item); + const auto modifiers = QGuiApplication::keyboardModifiers(); if (!url.isEmpty()) { - Q_EMIT tabRequested(url); + // keep in sync with KUrlNavigator::slotNavigatorButtonClicked + if (modifiers & Qt::ShiftModifier) { + Q_EMIT activeTabRequested(url); + } else { + Q_EMIT tabRequested(url); + } } else if (isTabsForFilesEnabled()) { - Q_EMIT tabRequested(item.url()); + // keep in sync with KUrlNavigator::slotNavigatorButtonClicked + if (modifiers & Qt::ShiftModifier) { + Q_EMIT activeTabRequested(item.url()); + } else { + Q_EMIT tabRequested(item.url()); + } } } @@ -1018,12 +1116,12 @@ void DolphinView::slotItemContextMenuRequested(int index, const QPointF& pos) } const KFileItem item = m_model->fileItem(index); - Q_EMIT requestContextMenu(pos.toPoint(), item, url(), QList()); + Q_EMIT requestContextMenu(pos.toPoint(), item, selectedItems(), url()); } void DolphinView::slotViewContextMenuRequested(const QPointF& pos) { - Q_EMIT requestContextMenu(pos.toPoint(), KFileItem(), url(), QList()); + Q_EMIT requestContextMenu(pos.toPoint(), KFileItem(), selectedItems(), url()); } void DolphinView::slotHeaderContextMenuRequested(const QPointF& pos) @@ -1036,7 +1134,7 @@ void DolphinView::slotHeaderContextMenuRequested(const QPointF& pos) const QList visibleRolesSet = view->visibleRoles(); bool indexingEnabled = false; -#ifdef HAVE_BALOO +#if HAVE_BALOO Baloo::IndexerConfig config; indexingEnabled = config.fileIndexingEnabled(); #endif @@ -1080,6 +1178,10 @@ void DolphinView::slotHeaderContextMenuRequested(const QPointF& pos) QActionGroup* widthsGroup = new QActionGroup(menu); const bool autoColumnWidths = props.headerColumnWidths().isEmpty(); + QAction* toggleSidePaddingAction = menu->addAction(i18nc("@action:inmenu", "Side Padding")); + toggleSidePaddingAction->setCheckable(true); + toggleSidePaddingAction->setChecked(view->header()->sidePadding() > 0); + QAction* autoAdjustWidthsAction = menu->addAction(i18nc("@action:inmenu", "Automatic Column Widths")); autoAdjustWidthsAction->setCheckable(true); autoAdjustWidthsAction->setChecked(autoColumnWidths); @@ -1110,6 +1212,8 @@ void DolphinView::slotHeaderContextMenuRequested(const QPointF& pos) } props.setHeaderColumnWidths(columnWidths); header->setAutomaticColumnResizing(false); + } else if (action == toggleSidePaddingAction) { + header->setSidePadding(toggleSidePaddingAction->isChecked() ? 20 : 0); } else { // Show or hide the selected role const QByteArray selectedRole = action->data().toByteArray(); @@ -1162,6 +1266,13 @@ void DolphinView::slotHeaderColumnWidthChangeFinished(const QByteArray& role, qr props.setHeaderColumnWidths(columnWidths); } +void DolphinView::slotSidePaddingWidthChanged(qreal width) +{ + ViewProperties props(viewPropertiesUrl()); + DetailsModeSettings::setSidePadding(int(width)); + m_view->writeSettings(); +} + void DolphinView::slotItemHovered(int index) { const KFileItem item = m_model->fileItem(index); @@ -1171,8 +1282,11 @@ 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()); +#if HAVE_BALOO + auto nativeParent = nativeParentWidget(); + if (nativeParent) { + m_toolTipManager->showToolTip(item, itemRect, nativeParent->windowHandle()); + } #endif } @@ -1284,7 +1398,7 @@ void DolphinView::slotItemCreated(const QUrl& url) void DolphinView::slotJobResult(KJob *job) { - if (job->error()) { + if (job->error() && job->error() != KIO::ERR_USER_CANCELED) { Q_EMIT errorMessage(job->errorString()); } if (!m_selectedUrls.isEmpty()) { @@ -1373,6 +1487,17 @@ void DolphinView::updateSortFoldersFirst(bool foldersFirst) Q_EMIT sortFoldersFirstChanged(foldersFirst); } +void DolphinView::updateSortHiddenLast(bool hiddenLast) +{ + ViewProperties props(viewPropertiesUrl()); + props.setSortHiddenLast(hiddenLast); + + m_model->setSortHiddenLast(hiddenLast); + + Q_EMIT sortHiddenLastChanged(hiddenLast); +} + + QPair DolphinView::pasteInfo() const { const QMimeData *mimeData = QApplication::clipboard()->mimeData(); @@ -1396,6 +1521,16 @@ bool DolphinView::itemsExpandable() const return m_mode == DetailsView; } +bool DolphinView::isExpanded(const KFileItem& item) const +{ + Q_ASSERT(item.isDir()); + Q_ASSERT(items().contains(item)); + if (!itemsExpandable()) { + return false; + } + return m_model->isExpanded(m_model->index(item)); +} + void DolphinView::restoreState(QDataStream& stream) { // Read the version number of the view state and check if the version is supported. @@ -1508,16 +1643,12 @@ QUrl DolphinView::openItemAsFolderUrl(const KFileItem& item, const bool browseTh void DolphinView::resetZoomLevel() { - ViewModeSettings::ViewMode mode; + ViewModeSettings settings{m_mode}; + settings.useDefaults(true); + const int defaultIconSize = settings.iconSize(); + settings.useDefaults(false); - switch (m_mode) { - case IconsView: mode = ViewModeSettings::IconsMode; break; - case CompactView: mode = ViewModeSettings::CompactMode; break; - case DetailsView: mode = ViewModeSettings::DetailsMode; break; - } - const ViewModeSettings settings(mode); - const QSize iconSize = QSize(settings.iconSize(), settings.iconSize()); - setZoomLevel(ZoomLevelInfo::zoomLevelForIconSize(iconSize)); + setZoomLevel(ZoomLevelInfo::zoomLevelForIconSize(QSize(defaultIconSize, defaultIconSize))); } void DolphinView::observeCreatedItem(const QUrl& url) @@ -1551,12 +1682,13 @@ void DolphinView::updateViewState() m_view->scrollToItem(currentIndex); m_scrollToCurrentItem = false; } + m_currentItemUrl = QUrl(); } else { selectionManager->setCurrentItem(0); } + } else { + m_currentItemUrl = QUrl(); } - - m_currentItemUrl = QUrl(); } if (!m_restoredContentsPosition.isNull()) { @@ -1591,21 +1723,25 @@ void DolphinView::updateViewState() } } - selectionManager->beginAnchoredSelection(selectionManager->currentItem()); - selectionManager->setSelectedItems(selectedItems); + if (!selectedItems.isEmpty()) { + selectionManager->beginAnchoredSelection(selectionManager->currentItem()); + selectionManager->setSelectedItems(selectedItems); + } } } } void DolphinView::hideToolTip(const ToolTipManager::HideBehavior behavior) { -#ifdef HAVE_BALOO if (GeneralSettings::showToolTips()) { +#if HAVE_BALOO m_toolTipManager->hideToolTip(behavior); - } #else Q_UNUSED(behavior) #endif + } else if (m_mode == DolphinView::IconsView) { + QToolTip::hideText(); + } } void DolphinView::slotTwoClicksRenamingTimerTimeout() @@ -1660,7 +1796,7 @@ void DolphinView::slotRenamingResult(KJob* job) void DolphinView::slotDirectoryLoadingStarted() { - m_loading = true; + m_loadingState = LoadingState::Loading; updatePlaceholderLabel(); // Disable the writestate temporary until it can be determined in a fast way @@ -1675,7 +1811,7 @@ void DolphinView::slotDirectoryLoadingStarted() void DolphinView::slotDirectoryLoadingCompleted() { - m_loading = false; + m_loadingState = LoadingState::Completed; // Update the view-state. This has to be done asynchronously // because the view might not be in its final state yet. @@ -1692,7 +1828,7 @@ void DolphinView::slotDirectoryLoadingCompleted() void DolphinView::slotDirectoryLoadingCanceled() { - m_loading = false; + m_loadingState = LoadingState::Canceled; updatePlaceholderLabel(); @@ -1771,10 +1907,13 @@ void DolphinView::slotRoleEditingFinished(int index, const QByteArray& role, con #ifndef Q_OS_WIN //Confirm hiding file/directory by renaming inline if (!hiddenFilesShown() && newName.startsWith(QLatin1Char('.')) && !oldItem.name().startsWith(QLatin1Char('.'))) { - KGuiItem yesGuiItem(KStandardGuiItem::yes()); - yesGuiItem.setText(i18nc("@action:button", "Rename and Hide")); + KGuiItem yesGuiItem(i18nc("@action:button", "Rename and Hide"), QStringLiteral("view-hidden")); +#if KWIDGETSADDONS_VERSION >= QT_VERSION_CHECK(5, 100, 0) + const auto code = KMessageBox::questionTwoActions(this, +#else const auto code = KMessageBox::questionYesNo(this, +#endif oldItem.isFile() ? i18n("Adding a dot to the beginning of this file's name will hide it from view.\n" "Do you still want to rename it?") : i18n("Adding a dot to the beginning of this folder's name will hide it from view.\n" @@ -1785,7 +1924,11 @@ void DolphinView::slotRoleEditingFinished(int index, const QByteArray& role, con QStringLiteral("ConfirmHide") ); +#if KWIDGETSADDONS_VERSION >= QT_VERSION_CHECK(5, 100, 0) + if (code == KMessageBox::SecondaryAction) { +#else if (code == KMessageBox::No) { +#endif return; } } @@ -1903,6 +2046,12 @@ void DolphinView::applyViewProperties(const ViewProperties& props) Q_EMIT sortFoldersFirstChanged(sortFoldersFirst); } + const bool sortHiddenLast = props.sortHiddenLast(); + if (sortHiddenLast != m_model->sortHiddenLast()) { + m_model->setSortHiddenLast(sortHiddenLast); + Q_EMIT sortHiddenLastChanged(sortHiddenLast); + } + const QList visibleRoles = props.visibleRoles(); if (visibleRoles != m_visibleRoles) { const QList previousVisibleRoles = m_visibleRoles; @@ -1940,6 +2089,7 @@ void DolphinView::applyViewProperties(const ViewProperties& props) } else { header->setAutomaticColumnResizing(true); } + header->setSidePadding(DetailsModeSettings::sidePadding()); } m_view->endTransaction(); @@ -2084,20 +2234,28 @@ void DolphinView::updatePlaceholderLabel() return; } - if (m_loading) { + if (m_loadingState == LoadingState::Loading) { m_placeholderLabel->setVisible(false); m_showLoadingPlaceholderTimer->start(); return; } - if (!nameFilter().isEmpty()) { + if (m_loadingState == LoadingState::Canceled) { + m_placeholderLabel->setText(i18n("Loading canceled")); + } else if (!nameFilter().isEmpty()) { m_placeholderLabel->setText(i18n("No items matching the filter")); } else if (m_url.scheme() == QLatin1String("baloosearch") || m_url.scheme() == QLatin1String("filenamesearch")) { m_placeholderLabel->setText(i18n("No items matching the search")); } else if (m_url.scheme() == QLatin1String("trash") && m_url.path() == QLatin1String("/")) { m_placeholderLabel->setText(i18n("Trash is empty")); } else if (m_url.scheme() == QLatin1String("tags")) { - m_placeholderLabel->setText(i18n("No tags")); + if (m_url.path() == QLatin1Char('/')) { + m_placeholderLabel->setText(i18n("No tags")); + } else { + const QString tagName = m_url.path().mid(1); // Remove leading / + m_placeholderLabel->setText(i18n("No files tagged with \"%1\"", tagName)); + } + } else if (m_url.scheme() == QLatin1String("recentlyused")) { m_placeholderLabel->setText(i18n("No recently used items")); } else if (m_url.scheme() == QLatin1String("smb")) { @@ -2106,6 +2264,8 @@ void DolphinView::updatePlaceholderLabel() m_placeholderLabel->setText(i18n("No relevant network resources found")); } else if (m_url.scheme() == QLatin1String("mtp") && m_url.path() == QLatin1String("/")) { m_placeholderLabel->setText(i18n("No MTP-compatible devices found")); + } else if (m_url.scheme() == QLatin1String("afc") && m_url.path() == QLatin1String("/")) { + m_placeholderLabel->setText(i18n("No Apple devices found")); } else if (m_url.scheme() == QLatin1String("bluetooth")) { m_placeholderLabel->setText(i18n("No Bluetooth devices found")); } else { @@ -2114,3 +2274,24 @@ void DolphinView::updatePlaceholderLabel() m_placeholderLabel->setVisible(true); } + +void DolphinView::tryShowNameToolTip(QHelpEvent* event) +{ + if (!GeneralSettings::showToolTips() && m_mode == DolphinView::IconsView) { + const std::optional index = m_view->itemAt(event->pos()); + + if (!index.has_value()) { + return; + } + + // Check whether the filename has been elided + const bool isElided = m_view->isElided(index.value()); + + if(isElided) { + const KFileItem item = m_model->fileItem(index.value()); + const QString text = item.text(); + const QPoint pos = mapToGlobal(event->pos()); + QToolTip::showText(pos, text); + } + } +}