X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/d7b33b76a18b14e9f286e4d8326b00910b9ea02a..041d6a4bd8ed2bf74e2a4427a0d2a0d18ed79228:/src/kitemviews/kitemlistcontroller.cpp diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp index 650bf6286..b7d1da7d2 100644 --- a/src/kitemviews/kitemlistcontroller.cpp +++ b/src/kitemviews/kitemlistcontroller.cpp @@ -26,6 +26,7 @@ #include #include #include +#include KItemListController::KItemListController(KItemModelBase* model, KItemListView* view, QObject* parent) : QObject(parent), @@ -37,6 +38,7 @@ KItemListController::KItemListController(KItemModelBase* model, KItemListView* v m_scrollerIsScrolling(false), m_pinchGestureInProgress(false), m_mousePress(false), + m_isTouchEvent(false), m_selectionBehavior(NoSelection), m_autoActivationBehavior(ActivationAndExpansion), m_mouseDoubleClickAction(ActivateItemOnly), @@ -49,7 +51,6 @@ KItemListController::KItemListController(KItemModelBase* model, KItemListView* v m_autoActivationTimer(nullptr), m_swipeGesture(Qt::CustomGesture), m_twoFingerTapGesture(Qt::CustomGesture), - m_lastSource(Qt::MouseEventNotSynthesized), m_oldSelection(), m_keyboardAnchorIndex(-1), m_keyboardAnchorPos(0) @@ -537,9 +538,8 @@ bool KItemListController::inputMethodEvent(QInputMethodEvent* event) bool KItemListController::mousePressEvent(QGraphicsSceneMouseEvent* event, const QTransform& transform) { m_mousePress = true; - m_lastSource = event->source(); - if (event->source() == Qt::MouseEventSynthesizedByQt) { + if (event->source() == Qt::MouseEventSynthesizedByQt && m_isTouchEvent) { return false; } @@ -550,17 +550,19 @@ bool KItemListController::mousePressEvent(QGraphicsSceneMouseEvent* event, const m_pressedMousePos = transform.map(event->pos()); m_pressedIndex = m_view->itemAt(m_pressedMousePos); - if (event->buttons() & (Qt::BackButton | Qt::ForwardButton)) { - // Do not select items when clicking the back/forward buttons, see - // https://bugs.kde.org/show_bug.cgi?id=327412. - return true; - } - const Qt::MouseButtons buttons = event->buttons(); + if (!onPress(event->screenPos(), event->pos(), event->modifiers(), buttons)) { startRubberBand(); return false; } + + if (buttons & (Qt::BackButton | Qt::ForwardButton)) { + // Do not select items when clicking the back/forward buttons, see + // https://bugs.kde.org/show_bug.cgi?id=327412. + return true; + } + return true; } @@ -574,7 +576,7 @@ bool KItemListController::mouseMoveEvent(QGraphicsSceneMouseEvent* event, const m_view->m_tapAndHoldIndicator->setActive(false); } - if (event->source() == Qt::MouseEventSynthesizedByQt && !m_dragActionOrRightClick) { + if (event->source() == Qt::MouseEventSynthesizedByQt && !m_dragActionOrRightClick && m_isTouchEvent) { return false; } @@ -631,6 +633,7 @@ bool KItemListController::mouseMoveEvent(QGraphicsSceneMouseEvent* event, const bool KItemListController::mouseReleaseEvent(QGraphicsSceneMouseEvent* event, const QTransform& transform) { m_mousePress = false; + m_isTouchEvent = false; if (!m_view) { return false; @@ -641,7 +644,7 @@ bool KItemListController::mouseReleaseEvent(QGraphicsSceneMouseEvent* event, con } KItemListRubberBand* rubberBand = m_view->rubberBand(); - if (event->source() == Qt::MouseEventSynthesizedByQt && !rubberBand->isActive()) { + if (event->source() == Qt::MouseEventSynthesizedByQt && !rubberBand->isActive() && m_isTouchEvent) { return false; } @@ -861,6 +864,7 @@ bool KItemListController::hoverLeaveEvent(QGraphicsSceneHoverEvent* event, const Q_UNUSED(transform) m_mousePress = false; + m_isTouchEvent = false; if (!m_model || !m_view) { return false; @@ -933,6 +937,15 @@ bool KItemListController::gestureEvent(QGestureEvent* event, const QTransform& t return accepted; } +bool KItemListController::touchBeginEvent(QTouchEvent* event, const QTransform& transform) +{ + Q_UNUSED(event) + Q_UNUSED(transform) + + m_isTouchEvent = true; + return false; +} + void KItemListController::tapTriggered(QTapGesture* tap, const QTransform& transform) { static bool scrollerWasActive = false; @@ -941,7 +954,6 @@ void KItemListController::tapTriggered(QTapGesture* tap, const QTransform& trans m_dragActionOrRightClick = false; m_isSwipeGesture = false; m_pinchGestureInProgress = false; - m_lastSource = Qt::MouseEventSynthesizedByQt; scrollerWasActive = m_scrollerIsScrolling; } @@ -970,6 +982,7 @@ void KItemListController::tapTriggered(QTapGesture* tap, const QTransform& trans onPress(tap->hotSpot().toPoint(), tap->position().toPoint(), Qt::NoModifier, Qt::LeftButton); onRelease(transform.map(tap->position()), Qt::NoModifier, Qt::LeftButton, true); } + m_isTouchEvent = false; } } @@ -977,7 +990,7 @@ void KItemListController::tapAndHoldTriggered(QGestureEvent* event, const QTrans { //the Qt TabAndHold gesture is triggerable with a mouse click, we don't want this - if (m_lastSource == Qt::MouseEventNotSynthesized) { + if (!m_isTouchEvent) { return; } @@ -1124,6 +1137,8 @@ bool KItemListController::processEvent(QEvent* event, const QTransform& transfor return resizeEvent(static_cast(event), transform); case QEvent::Gesture: return gestureEvent(static_cast(event), transform); + case QEvent::TouchBegin: + return touchBeginEvent(static_cast(event), transform); default: break; }