┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews/kitemlistcontroller.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/kitemviews/kitemlistcontroller.cpp')
-rw-r--r--src/kitemviews/kitemlistcontroller.cpp68
1 files changed, 64 insertions, 4 deletions
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 <QEvent>
#include <QGraphicsSceneEvent>
#include <QMimeData>
+#include <QTimer>
#include <KGlobalSettings>
#include <KDebug>
@@ -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<int> 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);