From 0b862e067756132225e33be09670631edd50d944 Mon Sep 17 00:00:00 2001
From: J-P Nurmi <jpnurmi@digia.com>
Date: Tue, 7 May 2013 12:42:36 +0200
Subject: [PATCH] QGV: fix items not to be selected on right mouse button
 release

Task-number: QTBUG-30990
Change-Id: I421d9169b592da2b468eceb9df4f3f7c6a06e8d6
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Reviewed-by: Andreas Aardal Hanssen <andreas@hanssen.name>
---
 src/widgets/graphicsview/qgraphicsitem.cpp    |  2 +-
 .../qgraphicsitem/tst_qgraphicsitem.cpp       | 28 +++++++++++++++++++
 2 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/src/widgets/graphicsview/qgraphicsitem.cpp b/src/widgets/graphicsview/qgraphicsitem.cpp
index 3001e23d5dc..668436c1a22 100644
--- a/src/widgets/graphicsview/qgraphicsitem.cpp
+++ b/src/widgets/graphicsview/qgraphicsitem.cpp
@@ -7186,7 +7186,7 @@ void QGraphicsItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
 */
 void QGraphicsItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
 {
-    if (flags() & ItemIsSelectable) {
+    if (event->button() == Qt::LeftButton && (flags() & ItemIsSelectable)) {
         bool multiSelect = (event->modifiers() & Qt::ControlModifier) != 0;
         if (event->scenePos() == event->buttonDownScenePos(Qt::LeftButton)) {
             // The item didn't move
diff --git a/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp
index 37190c3cf2f..3e242577361 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp
@@ -470,6 +470,7 @@ private slots:
     void QTBUG_13473_sceneposchange();
     void QTBUG_16374_crashInDestructor();
     void QTBUG_20699_focusScopeCrash();
+    void QTBUG_30990_rightClickSelection();
 
 private:
     QList<QGraphicsItem *> paintedItems;
@@ -11468,5 +11469,32 @@ void tst_QGraphicsItem::QTBUG_20699_focusScopeCrash()
     fs.setFocus();
 }
 
+void tst_QGraphicsItem::QTBUG_30990_rightClickSelection()
+{
+    QGraphicsScene scene;
+    QGraphicsItem *item1 = scene.addRect(10, 10, 10, 10);
+    item1->setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsMovable);
+    QGraphicsItem *item2 = scene.addRect(100, 100, 10, 10);
+    item2->setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsMovable);
+
+    // right mouse press & release over an item should not make it selected
+    sendMousePress(&scene, item1->boundingRect().center(), Qt::RightButton);
+    QVERIFY(!item1->isSelected());
+    sendMouseRelease(&scene, item1->boundingRect().center(), Qt::RightButton);
+    QVERIFY(!item1->isSelected());
+
+    // right mouse press over one item, moving over another item,
+    // and then releasing should make neither of the items selected
+    sendMousePress(&scene, item1->boundingRect().center(), Qt::RightButton);
+    QVERIFY(!item1->isSelected());
+    QVERIFY(!item2->isSelected());
+    sendMouseMove(&scene, item2->boundingRect().center(), Qt::RightButton);
+    QVERIFY(!item1->isSelected());
+    QVERIFY(!item2->isSelected());
+    sendMouseRelease(&scene, item2->boundingRect().center(), Qt::RightButton);
+    QVERIFY(!item1->isSelected());
+    QVERIFY(!item2->isSelected());
+}
+
 QTEST_MAIN(tst_QGraphicsItem)
 #include "tst_qgraphicsitem.moc"
-- 
GitLab