diff --git a/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.cpp b/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.cpp index 31a0df1e7..cd889520a 100644 --- a/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.cpp +++ b/src/libs/vtools/tools/drawTools/toolcurve/vabstractspline.cpp @@ -321,7 +321,7 @@ void VAbstractSpline::mousePressEvent(QGraphicsSceneMouseEvent *event) */ void VAbstractSpline::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { - if (event->button() == Qt::LeftButton) + if (IsSelectedByReleaseEvent(this, event)) { emit ChoosedTool(m_id, sceneType); } diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolbasepoint.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolbasepoint.cpp index 0a1bc001c..31a3aa4a9 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolbasepoint.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolbasepoint.cpp @@ -323,6 +323,7 @@ void VToolBasePoint::mousePressEvent(QGraphicsSceneMouseEvent *event) if (event->button() == Qt::LeftButton && event->type() != QEvent::GraphicsSceneMouseDoubleClick) { SetItemOverrideCursor(this, cursorArrowCloseHand, 1, 1); + event->accept(); } } VToolSinglePoint::mousePressEvent(event); diff --git a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.cpp b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.cpp index 3533322fe..a741a79d2 100644 --- a/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.cpp +++ b/src/libs/vtools/tools/drawTools/toolpoint/toolsinglepoint/vtoolsinglepoint.cpp @@ -184,9 +184,10 @@ void VToolSinglePoint::mousePressEvent(QGraphicsSceneMouseEvent *event) } else { - if (event->button() == Qt::LeftButton) + if (event->button() == Qt::LeftButton && event->type() != QEvent::GraphicsSceneMouseDoubleClick) { PointChoosed(); + event->accept(); } } } @@ -239,7 +240,7 @@ void VToolSinglePoint::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { if (selectionType == SelectionType::ByMouseRelease) { - if (event->button() == Qt::LeftButton && contains(event->pos())) + if (IsSelectedByReleaseEvent(this, event)) { PointChoosed(); } diff --git a/src/libs/vtools/tools/nodeDetails/vnodepoint.cpp b/src/libs/vtools/tools/nodeDetails/vnodepoint.cpp index 5f04ab030..4da45d017 100644 --- a/src/libs/vtools/tools/nodeDetails/vnodepoint.cpp +++ b/src/libs/vtools/tools/nodeDetails/vnodepoint.cpp @@ -226,7 +226,7 @@ void VNodePoint::mousePressEvent(QGraphicsSceneMouseEvent *event) */ void VNodePoint::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { - if (event->button() == Qt::LeftButton) + if (IsSelectedByReleaseEvent(this, event)) { emit ChoosedTool(m_id, SceneObject::Point); } diff --git a/src/libs/vtools/tools/vtoolseamallowance.cpp b/src/libs/vtools/tools/vtoolseamallowance.cpp index e17f48799..3708605a4 100644 --- a/src/libs/vtools/tools/vtoolseamallowance.cpp +++ b/src/libs/vtools/tools/vtoolseamallowance.cpp @@ -1107,6 +1107,7 @@ void VToolSeamAllowance::mousePressEvent(QGraphicsSceneMouseEvent *event) { doc->SelectedDetail(m_id); emit ChoosedTool(m_id, SceneObject::Detail); + event->accept(); } } } @@ -1121,7 +1122,7 @@ void VToolSeamAllowance::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) if (selectionType == SelectionType::ByMouseRelease) { - if (event->button() == Qt::LeftButton && contains(event->pos())) + if (IsSelectedByReleaseEvent(this, event)) { doc->SelectedDetail(m_id); emit ChoosedTool(m_id, SceneObject::Detail); diff --git a/src/libs/vwidgets/global.cpp b/src/libs/vwidgets/global.cpp index baee2f3c8..23a045d61 100644 --- a/src/libs/vwidgets/global.cpp +++ b/src/libs/vwidgets/global.cpp @@ -31,6 +31,7 @@ #include #include +#include #include static const qreal defPointRadiusPixel = (2./*mm*/ / 25.4) * PrintDPI; @@ -168,3 +169,11 @@ void GraphicsItemHighlightSelected(const QRectF &boundingRect, qreal itemPenWidt painter->setBrush(Qt::NoBrush); painter->drawRect(boundingRect.adjusted(pad, pad, -pad, -pad)); } + +//--------------------------------------------------------------------------------------------------------------------- +bool IsSelectedByReleaseEvent(QGraphicsItem *item, QGraphicsSceneMouseEvent *event) +{ + SCASSERT(item != nullptr) + return event->button() == Qt::LeftButton && event->type() != QEvent::GraphicsSceneMouseDoubleClick + && item->contains(event->pos()); +} diff --git a/src/libs/vwidgets/global.h b/src/libs/vwidgets/global.h index 4de573900..ee6c3628d 100644 --- a/src/libs/vwidgets/global.h +++ b/src/libs/vwidgets/global.h @@ -44,6 +44,9 @@ class QColor; class QRectF; class QPainterPath; class QPen; +class QGraphicsSceneMouseEvent; + +bool IsSelectedByReleaseEvent(QGraphicsItem *item, QGraphicsSceneMouseEvent *event); qreal SceneScale(QGraphicsScene *scene); diff --git a/src/libs/vwidgets/vcontrolpointspline.cpp b/src/libs/vwidgets/vcontrolpointspline.cpp index eca9b4d12..00bb4abcb 100644 --- a/src/libs/vwidgets/vcontrolpointspline.cpp +++ b/src/libs/vwidgets/vcontrolpointspline.cpp @@ -217,6 +217,7 @@ void VControlPointSpline::mousePressEvent(QGraphicsSceneMouseEvent *event) if (freeAngle || freeLength) { SetItemOverrideCursor(this, cursorArrowCloseHand, 1, 1); + event->accept(); } // Somehow clicking on notselectable object do not clean previous selections. diff --git a/src/libs/vwidgets/vgrainlineitem.cpp b/src/libs/vwidgets/vgrainlineitem.cpp index 257553fa0..0fc6911ab 100644 --- a/src/libs/vwidgets/vgrainlineitem.cpp +++ b/src/libs/vwidgets/vgrainlineitem.cpp @@ -280,6 +280,8 @@ void VGrainlineItem::mousePressEvent(QGraphicsSceneMouseEvent* pME) return; } + pME->accept(); + m_ptStartPos = pos(); m_ptStartMove = pME->scenePos(); m_dStartLength = m_dLength; diff --git a/src/libs/vwidgets/vgraphicssimpletextitem.cpp b/src/libs/vwidgets/vgraphicssimpletextitem.cpp index 5667dbd08..ee75dc130 100644 --- a/src/libs/vwidgets/vgraphicssimpletextitem.cpp +++ b/src/libs/vwidgets/vgraphicssimpletextitem.cpp @@ -259,6 +259,7 @@ void VGraphicsSimpleTextItem::mousePressEvent(QGraphicsSceneMouseEvent *event) if (event->button() == Qt::LeftButton && event->type() != QEvent::GraphicsSceneMouseDoubleClick) { SetItemOverrideCursor(this, cursorArrowCloseHand, 1, 1); + event->accept(); } } if (selectionType == SelectionType::ByMouseRelease) @@ -267,7 +268,11 @@ void VGraphicsSimpleTextItem::mousePressEvent(QGraphicsSceneMouseEvent *event) } else { - emit PointChoosed(); + if (event->button() == Qt::LeftButton && event->type() != QEvent::GraphicsSceneMouseDoubleClick) + { + emit PointChoosed(); + event->accept(); + } } } @@ -282,7 +287,7 @@ void VGraphicsSimpleTextItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) } } - if (selectionType == SelectionType::ByMouseRelease && contains(event->pos())) + if (selectionType == SelectionType::ByMouseRelease && IsSelectedByReleaseEvent(this, event)) { emit PointChoosed(); } diff --git a/src/libs/vwidgets/vsimplecurve.cpp b/src/libs/vwidgets/vsimplecurve.cpp index d1ffc0f07..6a1eb414d 100644 --- a/src/libs/vwidgets/vsimplecurve.cpp +++ b/src/libs/vwidgets/vsimplecurve.cpp @@ -104,9 +104,10 @@ void VSimpleCurve::mousePressEvent(QGraphicsSceneMouseEvent *event) } else { - if (event->button() == Qt::LeftButton) + if (event->button() == Qt::LeftButton && event->type() != QEvent::GraphicsSceneMouseDoubleClick) { emit Choosed(id); + event->accept(); } } } @@ -114,12 +115,9 @@ void VSimpleCurve::mousePressEvent(QGraphicsSceneMouseEvent *event) //--------------------------------------------------------------------------------------------------------------------- void VSimpleCurve::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { - if (selectionType == SelectionType::ByMouseRelease) + if (selectionType == SelectionType::ByMouseRelease && IsSelectedByReleaseEvent(this, event)) { - if (event->button() == Qt::LeftButton && contains(event->pos())) - { - emit Choosed(id); - } + emit Choosed(id); } QGraphicsPathItem::mouseReleaseEvent(event); } diff --git a/src/libs/vwidgets/vsimplepoint.cpp b/src/libs/vwidgets/vsimplepoint.cpp index be2e92d96..a8a0598ef 100644 --- a/src/libs/vwidgets/vsimplepoint.cpp +++ b/src/libs/vwidgets/vsimplepoint.cpp @@ -162,9 +162,10 @@ void VSimplePoint::mousePressEvent(QGraphicsSceneMouseEvent *event) } else { - if (event->button() == Qt::LeftButton) + if (event->button() == Qt::LeftButton && event->type() != QEvent::GraphicsSceneMouseDoubleClick) { emit Choosed(id); + event->accept(); } } } @@ -175,12 +176,9 @@ void VSimplePoint::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { if (not m_visualizationMode) { - if (selectionType == SelectionType::ByMouseRelease) + if (selectionType == SelectionType::ByMouseRelease && IsSelectedByReleaseEvent(this, event)) { - if (event->button() == Qt::LeftButton && contains(event->pos())) - { - emit Choosed(id); - } + emit Choosed(id); } VScenePoint::mouseReleaseEvent(event); } diff --git a/src/libs/vwidgets/vtextgraphicsitem.cpp b/src/libs/vwidgets/vtextgraphicsitem.cpp index 4231f8f04..63fb54c2c 100644 --- a/src/libs/vwidgets/vtextgraphicsitem.cpp +++ b/src/libs/vwidgets/vtextgraphicsitem.cpp @@ -384,6 +384,7 @@ void VTextGraphicsItem::mousePressEvent(QGraphicsSceneMouseEvent *pME) return; } + pME->accept(); // record the parameters of the mouse press. Specially record the position // of the press as the origin for the following operations m_ptStartPos = pos();