From: Méven Car Date: Wed, 31 Jul 2024 09:00:32 +0000 (+0200) Subject: Kitemlistcontroller: only accept doubleclick for left mouse button X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/131c889b0c050592809035242db6200482e0edde Kitemlistcontroller: only accept doubleclick for left mouse button Add test for double-click activation. BUG: 485295 --- diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp index 392dc410e..997e6623b 100644 --- a/src/kitemviews/kitemlistcontroller.cpp +++ b/src/kitemviews/kitemlistcontroller.cpp @@ -713,7 +713,7 @@ bool KItemListController::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event, } } - if (event->button() & Qt::RightButton) { + if (event->button() & ~Qt::LeftButton) { return false; } diff --git a/src/tests/kitemlistcontrollertest.cpp b/src/tests/kitemlistcontrollertest.cpp index cb921781d..18ad1186d 100644 --- a/src/tests/kitemlistcontrollertest.cpp +++ b/src/tests/kitemlistcontrollertest.cpp @@ -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);