X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/362817d1834f2ada3ea4552a25fa39bbbb540f8c..c16c6f76a6d51f4800ded240db6552017447faac:/src/kitemviews/kitemlistcontroller.cpp diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp index 60bfef518..746df4d1d 100644 --- a/src/kitemviews/kitemlistcontroller.cpp +++ b/src/kitemviews/kitemlistcontroller.cpp @@ -32,6 +32,7 @@ #include #include #include +#include #include #include @@ -46,10 +47,16 @@ KItemListController::KItemListController(QObject* parent) : m_keyboardManager(new KItemListKeyboardSearchManager(this)), m_pressedIndex(-1), m_pressedMousePos(), + m_autoActivationTimer(0), m_oldSelection() { connect(m_keyboardManager, SIGNAL(changeCurrentItem(QString,bool)), this, SLOT(slotChangeCurrentItem(QString,bool))); + + m_autoActivationTimer = new QTimer(this); + m_autoActivationTimer->setSingleShot(true); + m_autoActivationTimer->setInterval(-1); + connect(m_autoActivationTimer, SIGNAL(timeout()), this, SLOT(slotAutoActivationTimeout())); } KItemListController::~KItemListController() @@ -121,6 +128,16 @@ KItemListController::SelectionBehavior KItemListController::selectionBehavior() return m_selectionBehavior; } +void KItemListController::setAutoActivationDelay(int delay) +{ + m_autoActivationTimer->setInterval(delay); +} + +int KItemListController::autoActivationDelay() const +{ + return m_autoActivationTimer->interval(); +} + bool KItemListController::showEvent(QShowEvent* event) { Q_UNUSED(event); @@ -217,9 +234,17 @@ bool KItemListController::keyPressEvent(QKeyEvent* event) break; case Qt::Key_Enter: - case Qt::Key_Return: - emit itemActivated(index); + case Qt::Key_Return: { + const QSet selectedItems = m_selectionManager->selectedItems(); + if (selectedItems.count() >= 2) { + emit itemsActivated(selectedItems); + } else if (selectedItems.count() == 1) { + emit itemActivated(selectedItems.toList().first()); + } else { + emit itemActivated(index); + } break; + } case Qt::Key_Space: if (controlPressed) { @@ -276,6 +301,27 @@ void KItemListController::slotChangeCurrentItem(const QString& text, bool search } } +void KItemListController::slotAutoActivationTimeout() +{ + if (!m_model || !m_view) { + return; + } + + const int index = m_autoActivationTimer->property("index").toInt(); + if (index < 0 || index >= m_model->count()) { + return; + } + + if (m_model->supportsDropping(index)) { + if (m_view->supportsItemExpanding() && m_model->isExpandable(index)) { + const bool expanded = m_model->isExpanded(index); + m_model->setExpanded(index, !expanded); + } else { + emit itemActivated(index); + } + } +} + bool KItemListController::inputMethodEvent(QInputMethodEvent* event) { Q_UNUSED(event); @@ -542,8 +588,13 @@ bool KItemListController::dragMoveEvent(QGraphicsSceneDragDropEvent* event, cons } KItemListWidget* oldHoveredWidget = hoveredWidget(); - KItemListWidget* newHoveredWidget = widgetForPos(event->pos()); + + const QPointF pos = transform.map(event->pos()); + KItemListWidget* newHoveredWidget = widgetForPos(pos); + if (oldHoveredWidget != newHoveredWidget) { + m_autoActivationTimer->stop(); + if (oldHoveredWidget) { oldHoveredWidget->setHovered(false); emit itemUnhovered(oldHoveredWidget->index()); @@ -555,6 +606,11 @@ bool KItemListController::dragMoveEvent(QGraphicsSceneDragDropEvent* event, cons newHoveredWidget->setHovered(true); } emit itemHovered(index); + + if (m_autoActivationTimer->interval() >= 0) { + m_autoActivationTimer->setProperty("index", index); + m_autoActivationTimer->start(); + } } } @@ -568,6 +624,8 @@ bool KItemListController::dropEvent(QGraphicsSceneDragDropEvent* event, const QT return false; } + m_autoActivationTimer->stop(); + const QPointF pos = transform.map(event->pos()); const int index = m_view->itemAt(pos); emit itemDropEvent(index, event); @@ -590,7 +648,9 @@ bool KItemListController::hoverMoveEvent(QGraphicsSceneHoverEvent* event, const } KItemListWidget* oldHoveredWidget = hoveredWidget(); - KItemListWidget* newHoveredWidget = widgetForPos(event->pos()); + const QPointF pos = transform.map(event->pos()); + KItemListWidget* newHoveredWidget = widgetForPos(pos); + if (oldHoveredWidget != newHoveredWidget) { if (oldHoveredWidget) { oldHoveredWidget->setHovered(false);