X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/e0085fb2804eedfe91b05c1c0c272758466fb62f..f2d2f325b628f8b831cce076c1a5f5dc43ac21ee:/src/panels/places/placespanel.cpp diff --git a/src/panels/places/placespanel.cpp b/src/panels/places/placespanel.cpp index 34361a5a7..ef174946b 100644 --- a/src/panels/places/placespanel.cpp +++ b/src/panels/places/placespanel.cpp @@ -1,25 +1,12 @@ -/*************************************************************************** - * Copyright (C) 2008-2012 by Peter Penz * - * * - * Based on KFilePlacesView from kdelibs: * - * Copyright (C) 2007 Kevin Ottens * - * Copyright (C) 2007 David Faure * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * - ***************************************************************************/ +/* + * SPDX-FileCopyrightText: 2008-2012 Peter Penz + * + * Based on KFilePlacesView from kdelibs: + * SPDX-FileCopyrightText: 2007 Kevin Ottens + * SPDX-FileCopyrightText: 2007 David Faure + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ #include "placespanel.h" @@ -52,6 +39,8 @@ #include #include #include +#include +#include PlacesPanel::PlacesPanel(QWidget* parent) : Panel(parent), @@ -62,8 +51,12 @@ PlacesPanel::PlacesPanel(QWidget* parent) : m_triggerStorageSetupButton(), m_itemDropEventIndex(-1), m_itemDropEventMimeData(nullptr), - m_itemDropEvent(nullptr) + m_itemDropEvent(nullptr), + m_tooltipTimer() { + m_tooltipTimer.setInterval(500); + m_tooltipTimer.setSingleShot(true); + connect(&m_tooltipTimer, &QTimer::timeout, this, &PlacesPanel::slotShowTooltip); } PlacesPanel::~PlacesPanel() @@ -117,11 +110,15 @@ void PlacesPanel::showEvent(QShowEvent* event) this, &PlacesPanel::storageTearDownRequested); connect(m_model, &PlacesItemModel::storageTearDownExternallyRequested, this, &PlacesPanel::storageTearDownExternallyRequested); + connect(m_model, &PlacesItemModel::storageTearDownSuccessful, + this, &PlacesPanel::storageTearDownSuccessful); m_view = new PlacesView(); m_view->setWidgetCreator(new KItemListWidgetCreator()); m_view->setGroupHeaderCreator(new KItemListGroupHeaderCreator()); + installEventFilter(this); + m_controller = new KItemListController(m_model, m_view, this); m_controller->setSelectionBehavior(KItemListController::SingleSelection); m_controller->setSingleClickActivationEnforced(true); @@ -148,6 +145,21 @@ void PlacesPanel::showEvent(QShowEvent* event) Panel::showEvent(event); } +bool PlacesPanel::eventFilter(QObject * /* obj */, QEvent *event) +{ + if (event->type() == QEvent::ToolTip) { + + QHelpEvent *hoverEvent = reinterpret_cast(event); + + m_hoveredIndex = m_view->itemAt(hoverEvent->pos()); + m_hoverPos = mapToGlobal(hoverEvent->pos()); + + m_tooltipTimer.start(); + return true; + } + return false; +} + void PlacesPanel::slotItemActivated(int index) { triggerItem(index, Qt::LeftButton); @@ -181,8 +193,8 @@ void PlacesPanel::slotItemContextMenuRequested(int index, const QPointF& pos) menu.addSeparator(); } - QAction* openInNewWindowAction = menu.addAction(QIcon::fromTheme(QStringLiteral("window-new")), i18nc("@item:inmenu", "Open in New Window")); QAction* openInNewTabAction = menu.addAction(QIcon::fromTheme(QStringLiteral("tab-new")), i18nc("@item:inmenu", "Open in New Tab")); + QAction* openInNewWindowAction = menu.addAction(QIcon::fromTheme(QStringLiteral("window-new")), i18nc("@item:inmenu", "Open in New Window")); QAction* propertiesAction = nullptr; if (item->url().isLocalFile()) { propertiesAction = menu.addAction(QIcon::fromTheme(QStringLiteral("document-properties")), i18nc("@action:inmenu", "Properties")); @@ -333,7 +345,8 @@ void PlacesPanel::slotViewContextMenuRequested(const QPointF& pos) menu.addMenu(iconSizeSubMenu); menu.addSeparator(); - foreach (QAction* action, customContextMenuActions()) { + const auto actions = customContextMenuActions(); + for (QAction* action : actions) { menu.addAction(action); } @@ -447,7 +460,7 @@ void PlacesPanel::slotUrlsDropped(const QUrl& dest, QDropEvent* event, QWidget* { KIO::DropJob *job = DragAndDropHelper::dropUrls(dest, event, parent); if (job) { - connect(job, &KIO::DropJob::result, this, [this](KJob *job) { if (job->error()) emit errorMessage(job->errorString()); }); + connect(job, &KIO::DropJob::result, this, [this](KJob *job) { if (job->error()) Q_EMIT errorMessage(job->errorString()); }); } } @@ -470,6 +483,13 @@ void PlacesPanel::slotStorageSetupDone(int index, bool success) } } +void PlacesPanel::slotShowTooltip() +{ + const QUrl url = m_model->data(m_hoveredIndex).value("url").value(); + const QString text = url.toDisplayString(QUrl::PreferLocalFile); + QToolTip::showText(m_hoverPos, text); +} + void PlacesPanel::addEntry() { const int index = m_controller->selectionManager()->currentItem(); @@ -539,9 +559,9 @@ void PlacesPanel::triggerItem(int index, Qt::MouseButton button) const QUrl url = m_model->data(index).value("url").toUrl(); if (!url.isEmpty()) { if (button == Qt::MiddleButton) { - emit placeMiddleClicked(KFilePlacesModel::convertedUrl(url)); + Q_EMIT placeMiddleClicked(KFilePlacesModel::convertedUrl(url)); } else { - emit placeActivated(KFilePlacesModel::convertedUrl(url)); + Q_EMIT placeActivated(KFilePlacesModel::convertedUrl(url)); } } } @@ -550,7 +570,7 @@ void PlacesPanel::triggerItem(int index, Qt::MouseButton button) void PlacesPanel::showHiddenEntries(bool shown) { m_model->setHiddenItemsShown(shown); - emit showHiddenEntriesChanged(shown); + Q_EMIT showHiddenEntriesChanged(shown); } int PlacesPanel::hiddenListCount()