summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNodir Temirkhodjaev <nodir.temir@gmail.com>2022-04-04 13:43:51 +0300
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2022-04-05 16:56:05 +0000
commit41726a90e10b1705427dde8ad5a4181be6300309 (patch)
treeba6d896e4aab37c934a3446318f3e509a3451e52
parentb2f249967f64de7a8f002f85bfccd355cef8ab49 (diff)
QSplitter: Don't move handle in non-pressed state
Fixes: QTBUG-102249 Change-Id: Ib1d74447e346760d1fc9960e11486e8dc7ea3bc0 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io> (cherry picked from commit 99f22e3fc8caefcad810804da1a64446fb457337) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/widgets/widgets/qsplitter.cpp23
-rw-r--r--tests/auto/widgets/widgets/qsplitter/tst_qsplitter.cpp21
2 files changed, 34 insertions, 10 deletions
diff --git a/src/widgets/widgets/qsplitter.cpp b/src/widgets/widgets/qsplitter.cpp
index 1c04f02422..bd5f31c662 100644
--- a/src/widgets/widgets/qsplitter.cpp
+++ b/src/widgets/widgets/qsplitter.cpp
@@ -289,10 +289,11 @@ bool QSplitterHandle::event(QEvent *event)
void QSplitterHandle::mouseMoveEvent(QMouseEvent *e)
{
Q_D(QSplitterHandle);
- if (!(e->buttons() & Qt::LeftButton))
+ if (!d->pressed)
return;
- int pos = d->pick(parentWidget()->mapFromGlobal(e->globalPosition().toPoint()))
- - d->mouseOffset;
+
+ const int pos = d->pick(parentWidget()->mapFromGlobal(e->globalPosition().toPoint()))
+ - d->mouseOffset;
if (opaqueResize()) {
moveSplitter(pos);
} else {
@@ -319,16 +320,18 @@ void QSplitterHandle::mousePressEvent(QMouseEvent *e)
void QSplitterHandle::mouseReleaseEvent(QMouseEvent *e)
{
Q_D(QSplitterHandle);
- if (!opaqueResize() && e->button() == Qt::LeftButton) {
- int pos = d->pick(parentWidget()->mapFromGlobal(e->globalPosition().toPoint()))
- - d->mouseOffset;
+ if (!d->pressed)
+ return;
+
+ if (!opaqueResize()) {
+ const int pos = d->pick(parentWidget()->mapFromGlobal(e->globalPosition().toPoint()))
+ - d->mouseOffset;
d->s->setRubberBand(-1);
moveSplitter(pos);
}
- if (e->button() == Qt::LeftButton) {
- d->pressed = false;
- update();
- }
+
+ d->pressed = false;
+ update();
}
/*!
diff --git a/tests/auto/widgets/widgets/qsplitter/tst_qsplitter.cpp b/tests/auto/widgets/widgets/qsplitter/tst_qsplitter.cpp
index ce7ac0a186..fef97f37b8 100644
--- a/tests/auto/widgets/widgets/qsplitter/tst_qsplitter.cpp
+++ b/tests/auto/widgets/widgets/qsplitter/tst_qsplitter.cpp
@@ -28,6 +28,8 @@
#include <QTest>
+#include <QSignalSpy>
+
#include <qapplication.h>
#include <qsplitter.h>
#include <qstyle.h>
@@ -89,6 +91,7 @@ private slots:
void task169702_sizes();
void taskQTBUG_4101_ensureOneNonCollapsedWidget_data();
void taskQTBUG_4101_ensureOneNonCollapsedWidget();
+ void taskQTBUG_102249_moveNonPressed();
void setLayout();
void autoAdd();
@@ -1026,6 +1029,24 @@ void tst_QSplitter::taskQTBUG_4101_ensureOneNonCollapsedWidget()
QTRY_VERIFY(s.sizes().at(0) > 0);
}
+void tst_QSplitter::taskQTBUG_102249_moveNonPressed()
+{
+ QSplitter s;
+ s.setOpaqueResize(true);
+ s.addWidget(new QWidget());
+ s.addWidget(new QWidget());
+ s.show();
+
+ QSignalSpy spyMove(&s, &QSplitter::splitterMoved);
+ QPointF posOutOfWidget = QPointF(30, 30);
+ QMouseEvent me(QEvent::MouseMove,
+ posOutOfWidget, s.mapToGlobal(posOutOfWidget),
+ Qt::NoButton, Qt::MouseButtons(Qt::LeftButton),
+ Qt::NoModifier);
+ qApp->sendEvent(s.handle(0), &me);
+ QCOMPARE(spyMove.count(), 0);
+}
+
void tst_QSplitter::setLayout()
{
QSplitter splitter;