]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Kitemlistcontroller: only accept doubleclick for left mouse button
authorMéven Car <meven@kde.org>
Wed, 31 Jul 2024 09:00:32 +0000 (11:00 +0200)
committerMéven Car <meven@kde.org>
Wed, 31 Jul 2024 12:04:38 +0000 (12:04 +0000)
Add test for double-click activation.

BUG: 485295

src/kitemviews/kitemlistcontroller.cpp
src/tests/kitemlistcontrollertest.cpp

index 392dc410e605a9b4a069dd985071732933eed807..997e6623bbbb9847aa8e45ae1e683c6aeba33fd4 100644 (file)
@@ -713,7 +713,7 @@ bool KItemListController::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event,
         }
     }
 
-    if (event->button() & Qt::RightButton) {
+    if (event->button() & ~Qt::LeftButton) {
         return false;
     }
 
index cb921781dff133e861d226b2708381a4664682f0..18ad1186d439002786d6b6e7b2ee35dcccbe0b79 100644 (file)
@@ -620,6 +620,41 @@ void KItemListControllerTest::testMouseClickActivation()
     mouseReleaseEvent.setButton(Qt::LeftButton);
     mouseReleaseEvent.setButtons(Qt::NoButton);
 
+    QGraphicsSceneMouseEvent mouseDoubleClickEvent(QEvent::GraphicsSceneMouseDoubleClick);
+    mouseDoubleClickEvent.setPos(pos);
+    mouseDoubleClickEvent.setButton(Qt::LeftButton);
+    mouseDoubleClickEvent.setButtons(Qt::LeftButton);
+
+    QGraphicsSceneMouseEvent mouseRightPressEvent(QEvent::GraphicsSceneMousePress);
+    mouseRightPressEvent.setPos(pos);
+    mouseRightPressEvent.setButton(Qt::RightButton);
+    mouseRightPressEvent.setButtons(Qt::RightButton);
+
+    QGraphicsSceneMouseEvent mouseRightReleaseEvent(QEvent::GraphicsSceneMouseRelease);
+    mouseRightReleaseEvent.setPos(pos);
+    mouseRightReleaseEvent.setButton(Qt::RightButton);
+    mouseRightReleaseEvent.setButtons(Qt::NoButton);
+
+    QGraphicsSceneMouseEvent mouseRightDoubleClickEvent(QEvent::GraphicsSceneMouseDoubleClick);
+    mouseRightDoubleClickEvent.setPos(pos);
+    mouseRightDoubleClickEvent.setButton(Qt::RightButton);
+    mouseRightDoubleClickEvent.setButtons(Qt::RightButton);
+
+    QGraphicsSceneMouseEvent mouseBackPressEvent(QEvent::GraphicsSceneMousePress);
+    mouseBackPressEvent.setPos(pos);
+    mouseBackPressEvent.setButton(Qt::BackButton);
+    mouseBackPressEvent.setButtons(Qt::BackButton);
+
+    QGraphicsSceneMouseEvent mouseBackReleaseEvent(QEvent::GraphicsSceneMouseRelease);
+    mouseBackReleaseEvent.setPos(pos);
+    mouseBackReleaseEvent.setButton(Qt::BackButton);
+    mouseBackReleaseEvent.setButtons(Qt::NoButton);
+
+    QGraphicsSceneMouseEvent mouseBackDoubleClickEvent(QEvent::GraphicsSceneMouseDoubleClick);
+    mouseBackDoubleClickEvent.setPos(pos);
+    mouseBackDoubleClickEvent.setButton(Qt::BackButton);
+    mouseBackDoubleClickEvent.setButtons(Qt::BackButton);
+
     QSignalSpy spyItemActivated(m_controller, &KItemListController::itemActivated);
 
     // Default setting: single click activation.
@@ -638,6 +673,29 @@ void KItemListControllerTest::testMouseClickActivation()
     spyItemActivated.clear();
     QVERIFY(m_view->controller()->selectionManager()->hasSelection());
 
+    // emulation of double click according to https://doc.qt.io/qt-6/qgraphicsscene.html#mouseDoubleClickEvent
+    m_view->event(&mousePressEvent);
+    m_view->event(&mouseReleaseEvent);
+    m_view->event(&mouseDoubleClickEvent);
+    m_view->event(&mouseReleaseEvent);
+    QCOMPARE(spyItemActivated.count(), 1);
+    spyItemActivated.clear();
+    QVERIFY2(!m_view->controller()->selectionManager()->hasSelection(), "An item should not be implicitly selected during activation. @see bug 424723");
+
+    // right mouse button should not trigger activation
+    m_view->event(&mouseRightPressEvent);
+    m_view->event(&mouseRightReleaseEvent);
+    m_view->event(&mouseRightDoubleClickEvent);
+    m_view->event(&mouseRightReleaseEvent);
+    QCOMPARE(spyItemActivated.count(), 0);
+
+    // back mouse button should not trigger activation
+    m_view->event(&mouseBackPressEvent);
+    m_view->event(&mouseBackReleaseEvent);
+    m_view->event(&mouseBackDoubleClickEvent);
+    m_view->event(&mouseBackReleaseEvent);
+    QCOMPARE(spyItemActivated.count(), 0);
+
     // Enforce single click activation in the controller.
     m_controller->setSingleClickActivationEnforced(true);
     m_view->event(&mousePressEvent);