X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/152a7b4fcbc06ab536083abe0a7f63c1722960fb..3abc4cfcd49df45c856e1b5f01da8de8f970ccb2:/src/views/dolphinview.cpp diff --git a/src/views/dolphinview.cpp b/src/views/dolphinview.cpp index 9d253c4e0..0cd38c9eb 100644 --- a/src/views/dolphinview.cpp +++ b/src/views/dolphinview.cpp @@ -7,7 +7,6 @@ #include "dolphinview.h" -#include "dolphin_detailsmodesettings.h" #include "dolphin_generalsettings.h" #include "dolphinitemlistview.h" #include "dolphinnewfilemenuobserver.h" @@ -19,6 +18,7 @@ #include "kitemviews/kitemlistheader.h" #include "kitemviews/kitemlistselectionmanager.h" #include "kitemviews/private/kitemlistroleeditor.h" +#include "settings/viewmodes/viewmodesettings.h" #include "versioncontrol/versioncontrolobserver.h" #include "viewproperties.h" #include "views/tooltips/tooltipmanager.h" @@ -56,10 +56,10 @@ #include #include #include -#include #include #include #include +#include #include DolphinView::DolphinView(const QUrl& url, QWidget* parent) : @@ -463,6 +463,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; @@ -907,6 +919,11 @@ bool DolphinView::eventFilter(QObject* watched, QEvent* event) if (watched == m_view) { m_dragging = false; } + break; + + case QEvent::ToolTip: + tryShowNameToolTip(event); + default: break; } @@ -963,12 +980,14 @@ 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); @@ -984,8 +1003,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 +1028,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()); + } } } @@ -1373,6 +1410,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(); @@ -1508,16 +1556,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) @@ -1599,13 +1643,15 @@ void DolphinView::updateViewState() void DolphinView::hideToolTip(const ToolTipManager::HideBehavior behavior) { -#ifdef HAVE_BALOO if (GeneralSettings::showToolTips()) { +#ifdef HAVE_BALOO m_toolTipManager->hideToolTip(behavior); - } #else Q_UNUSED(behavior) #endif + } else if (m_mode == DolphinView::IconsView) { + QToolTip::hideText(); + } } void DolphinView::slotTwoClicksRenamingTimerTimeout() @@ -1903,6 +1949,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; @@ -2094,7 +2146,7 @@ void DolphinView::updatePlaceholderLabel() 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")) { + } 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")); @@ -2114,3 +2166,25 @@ void DolphinView::updatePlaceholderLabel() m_placeholderLabel->setVisible(true); } + +void DolphinView::tryShowNameToolTip(QEvent* event) +{ + if (!GeneralSettings::showToolTips() && m_mode == DolphinView::IconsView) { + QHelpEvent *hoverEvent = reinterpret_cast(event); + const std::optional index = m_view->itemAt(hoverEvent->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(hoverEvent->pos()); + QToolTip::showText(pos, text); + } + } +}