X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/97415729c34851df75c77a67f27d6299c00bfbc4..56888a56:/src/panels/places/placespanel.cpp diff --git a/src/panels/places/placespanel.cpp b/src/panels/places/placespanel.cpp index 336b9deb8..d49ad39ec 100644 --- a/src/panels/places/placespanel.cpp +++ b/src/panels/places/placespanel.cpp @@ -34,11 +34,14 @@ #include #include +#include #include #include #include #include #include +#include +#include PlacesPanel::PlacesPanel(QWidget* parent) : Panel(parent), @@ -49,8 +52,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() @@ -71,7 +78,7 @@ bool PlacesPanel::urlChanged() } if (m_controller) { - selectClosestItem(); + selectItem(); } return true; @@ -111,6 +118,8 @@ void PlacesPanel::showEvent(QShowEvent* event) 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); @@ -131,12 +140,27 @@ void PlacesPanel::showEvent(QShowEvent* event) layout->setContentsMargins(0, 0, 0, 0); layout->addWidget(container); - selectClosestItem(); + selectItem(); } 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); @@ -270,7 +294,7 @@ void PlacesPanel::slotItemContextMenuRequested(int index, const QPointF& pos) } } - selectClosestItem(); + selectItem(); } void PlacesPanel::slotViewContextMenuRequested(const QPointF& pos) @@ -338,7 +362,7 @@ void PlacesPanel::slotViewContextMenuRequested(const QPointF& pos) } } - selectClosestItem(); + selectItem(); } QAction *PlacesPanel::buildGroupContextMenu(QMenu *menu, int index) @@ -460,6 +484,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(); @@ -499,13 +530,17 @@ void PlacesPanel::editEntry(int index) delete dialog; } -void PlacesPanel::selectClosestItem() +void PlacesPanel::selectItem() { const int index = m_model->closestItem(url()); KItemListSelectionManager* selectionManager = m_controller->selectionManager(); selectionManager->setCurrentItem(index); selectionManager->clearSelection(); - selectionManager->setSelected(index); + + const QUrl closestUrl = m_model->url(index); + if (!closestUrl.path().isEmpty() && url() == closestUrl) { + selectionManager->setSelected(index); + } } void PlacesPanel::triggerItem(int index, Qt::MouseButton button)