]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Allow interaction with folder/files with the stylus again
authorSteffen Hartleib <sh033@gmx.de>
Sat, 26 Sep 2020 14:53:57 +0000 (14:53 +0000)
committerElvis Angelaccio <elvis.angelaccio@kde.org>
Sat, 26 Sep 2020 14:53:57 +0000 (14:53 +0000)
This Patch works for Wayland and X.

BUG: 426582

src/kitemviews/kitemlistcontroller.cpp
src/kitemviews/kitemlistcontroller.h
src/kitemviews/kitemlistview.cpp
src/kitemviews/private/ktwofingertap.cpp

index 1733eeab5fb3b50a405ded9a4f24b6550288e1d0..172b57e92db73a7af82edad9467273c737970db9 100644 (file)
@@ -37,6 +37,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 +50,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 +537,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;
     }
 
@@ -576,7 +575,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;
     }
 
@@ -633,6 +632,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;
@@ -643,7 +643,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;
     }
 
@@ -863,6 +863,7 @@ bool KItemListController::hoverLeaveEvent(QGraphicsSceneHoverEvent* event, const
     Q_UNUSED(transform)
 
     m_mousePress = false;
+    m_isTouchEvent = false;
 
     if (!m_model || !m_view) {
         return false;
@@ -935,6 +936,15 @@ bool KItemListController::gestureEvent(QGestureEvent* event, const QTransform& t
     return accepted;
 }
 
+bool KItemListController::touchBeginEvent(QGestureEvent* 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;
@@ -943,7 +953,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;
     }
 
@@ -972,6 +981,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;
     }
 }
 
@@ -979,7 +989,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;
     }
 
@@ -1126,6 +1136,8 @@ bool KItemListController::processEvent(QEvent* event, const QTransform& transfor
         return resizeEvent(static_cast<QGraphicsSceneResizeEvent*>(event), transform);
     case QEvent::Gesture:
         return gestureEvent(static_cast<QGestureEvent*>(event), transform);
+    case QEvent::TouchBegin:
+        return touchBeginEvent();
     default:
         break;
     }
index d929027b7b364ce35f396b1ed28713fcde6dad93..eb6d85e8a6b734c0976346c4652b661c7db4584f 100644 (file)
@@ -301,6 +301,7 @@ private:
     bool wheelEvent(QGraphicsSceneWheelEvent* event, const QTransform& transform);
     bool resizeEvent(QGraphicsSceneResizeEvent* event, const QTransform& transform);
     bool gestureEvent(QGestureEvent* event, const QTransform& transform);
+    bool touchBeginEvent(QGestureEvent* event, const QTransform& transform);
     void tapTriggered(QTapGesture* tap, const QTransform& transform);
     void tapAndHoldTriggered(QGestureEvent* event, const QTransform& transform);
     void pinchTriggered(QGestureEvent* event, const QTransform& transform);
@@ -319,6 +320,7 @@ private:
     bool m_scrollerIsScrolling;
     bool m_pinchGestureInProgress;
     bool m_mousePress;
+    bool m_isTouchEvent;
     SelectionBehavior m_selectionBehavior;
     AutoActivationBehavior m_autoActivationBehavior;
     MouseDoubleClickAction m_mouseDoubleClickAction;
@@ -333,7 +335,6 @@ private:
 
     Qt::GestureType m_swipeGesture;
     Qt::GestureType m_twoFingerTapGesture;
-    Qt::MouseEventSource m_lastSource;
 
     /**
      * When starting a rubberband selection during a Shift- or Control-key has been
index f14369cbd959f197b34b06ea83ae8e7f2704fe15..4d9bf083f2f056ff4ffde35c6d86ad16d55d52e9 100644 (file)
@@ -91,6 +91,7 @@ KItemListView::KItemListView(QGraphicsWidget* parent) :
     m_dropIndicator()
 {
     setAcceptHoverEvents(true);
+    setAcceptTouchEvents(true);
 
     m_sizeHintResolver = new KItemListSizeHintResolver(this);
 
index 9f4521d268310f7f58ebda3435ea8f16242671c6..edd9d1d35f96746d86c9dcf82058fbacb3ed1def 100644 (file)
@@ -10,6 +10,7 @@
 // Qt
 #include <QTouchEvent>
 #include <QApplication>
+#include <QGraphicsWidget>
 
 KTwoFingerTapRecognizer::KTwoFingerTapRecognizer() :
     QGestureRecognizer(),
@@ -28,7 +29,9 @@ QGesture* KTwoFingerTapRecognizer::create(QObject*)
 
 QGestureRecognizer::Result KTwoFingerTapRecognizer::recognize(QGesture* gesture, QObject* watched, QEvent* event)
 {
-    Q_UNUSED(watched)
+    if (qobject_cast<QGraphicsWidget*>(watched)) {
+        return Ignore;
+    }
 
     KTwoFingerTap* const kTwoFingerTap = static_cast<KTwoFingerTap*>(gesture);
     const QTouchEvent* touchEvent = static_cast<const QTouchEvent*>(event);