#include <QGraphicsSceneEvent>
#include <QGraphicsView>
#include <QMimeData>
-#include <QStyleHints>
#include <QTimer>
#include <QTouchEvent>
m_pressedIndex(std::nullopt),
m_pressedMousePos(),
m_autoActivationTimer(nullptr),
- m_longPressDetectionTimer(nullptr),
m_swipeGesture(Qt::CustomGesture),
m_twoFingerTapGesture(Qt::CustomGesture),
m_oldSelection(),
m_autoActivationTimer->setInterval(-1);
connect(m_autoActivationTimer, &QTimer::timeout, this, &KItemListController::slotAutoActivationTimeout);
- m_longPressDetectionTimer = new QTimer(this);
- m_longPressDetectionTimer->setSingleShot(true);
- m_longPressDetectionTimer->setInterval(QGuiApplication::styleHints()->mousePressAndHoldInterval());
- connect(m_longPressDetectionTimer, &QTimer::timeout, this, [this]() {
- if (!m_selectionMode) {
- Q_EMIT selectionModeChangeRequested(true);
- }
- });
-
setModel(model);
setView(view);
}
case Qt::Key_Escape:
- if (m_selectionMode && m_selectionManager->selectedItems().count() < 1) {
+ if (m_selectionMode) {
Q_EMIT selectionModeChangeRequested(false);
- }
- if (m_selectionBehavior != SingleSelection) {
+ } else if (m_selectionBehavior != SingleSelection) {
m_selectionManager->clearSelection();
}
m_keyboardManager->cancelSearch();
}
const QPointF pos = transform.map(event->pos());
- if ((pos - m_pressedMousePos).manhattanLength() >= QApplication::startDragDistance()) {
- m_longPressDetectionTimer->stop();
- }
if (m_pressedIndex.has_value() && !m_view->rubberBand()->isActive()) {
// Check whether a dragging should be started
m_view->m_tapAndHoldIndicator->setActive(false);
}
- m_longPressDetectionTimer->stop();
-
KItemListRubberBand* rubberBand = m_view->rubberBand();
if (event->source() == Qt::MouseEventSynthesizedByQt && !rubberBand->isActive() && m_isTouchEvent) {
return false;
m_pressedIndex = m_view->itemAt(m_pressedMousePos);
if (m_dragActionOrRightClick) {
- onPress(tap->hotSpot().toPoint(), tap->position().toPoint(), Qt::NoModifier, Qt::RightButton);
- onRelease(transform.map(tap->position()), Qt::NoModifier, Qt::RightButton, false);
m_dragActionOrRightClick = false;
}
else {
if (m_pressedIndex.has_value() && !m_selectionManager->isSelected(m_pressedIndex.value())) {
m_selectionManager->clearSelection();
m_selectionManager->setSelected(m_pressedIndex.value());
+ if (!m_selectionMode) {
+ Q_EMIT selectionModeChangeRequested(true);
+ }
} else if (!m_pressedIndex.has_value()) {
m_selectionManager->clearSelection();
startRubberBand();
const bool leftClick = buttons & Qt::LeftButton;
const bool rightClick = buttons & Qt::RightButton;
- if (leftClick) {
- m_longPressDetectionTimer->start();
- }
-
// The previous selection is cleared if either
// 1. The selection mode is SingleSelection, or
// 2. the selection mode is MultiSelection, and *none* of the following conditions are met: