From cff0f629c1c420dc38d59897d163034b395dd192 2013-09-12 10:43:07 From: Titta Heikkala Date: 2013-09-12 10:43:07 Subject: [PATCH] Fix mouse event handling with RubberBand The mousePressEvent handles the event differently for rubber band only if the mouse press occurs on the plot area. This way pressing the mouse outside plot area will handle the event according to the pressed item (like legend marker). For the same reason the mouseRelease event handles the event differently for rubber band only if the rubber band is displayed. Task-number: QTRD-2260 Change-Id: Ibedcd2d13a7c2229352074a4df326cd73e9cf80f Reviewed-by: Miikka Heikkinen --- diff --git a/src/qchartview.cpp b/src/qchartview.cpp index f887e38..7d5dc10 100644 --- a/src/qchartview.cpp +++ b/src/qchartview.cpp @@ -135,16 +135,13 @@ QChartView::RubberBands QChartView::rubberBand() const */ void QChartView::mousePressEvent(QMouseEvent *event) { - if (d_ptr->m_rubberBand && d_ptr->m_rubberBand->isEnabled() && event->button() == Qt::LeftButton) { - - QRectF plotArea = d_ptr->m_chart->plotArea(); - - if (plotArea.contains(event->pos())) { - d_ptr->m_rubberBandOrigin = event->pos(); - d_ptr->m_rubberBand->setGeometry(QRect(d_ptr->m_rubberBandOrigin, QSize())); - d_ptr->m_rubberBand->show(); - event->accept(); - } + QRectF plotArea = d_ptr->m_chart->plotArea(); + if (d_ptr->m_rubberBand && d_ptr->m_rubberBand->isEnabled() + && event->button() == Qt::LeftButton && plotArea.contains(event->pos())) { + d_ptr->m_rubberBandOrigin = event->pos(); + d_ptr->m_rubberBand->setGeometry(QRect(d_ptr->m_rubberBandOrigin, QSize())); + d_ptr->m_rubberBand->show(); + event->accept(); } else { QGraphicsView::mousePressEvent(event); } @@ -181,8 +178,8 @@ void QChartView::mouseMoveEvent(QMouseEvent *event) */ void QChartView::mouseReleaseEvent(QMouseEvent *event) { - if (d_ptr->m_rubberBand) { - if (event->button() == Qt::LeftButton && d_ptr->m_rubberBand->isVisible()) { + if (d_ptr->m_rubberBand && d_ptr->m_rubberBand->isVisible()) { + if (event->button() == Qt::LeftButton) { d_ptr->m_rubberBand->hide(); QRectF rect = d_ptr->m_rubberBand->geometry(); // Since plotArea uses QRectF and rubberband uses QRect, we can't just blindly use