diff options
author | Nodir Temirkhodjaev <nodir.temir@gmail.com> | 2022-04-04 13:43:51 +0300 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2022-04-05 16:56:05 +0000 |
commit | 41726a90e10b1705427dde8ad5a4181be6300309 (patch) | |
tree | ba6d896e4aab37c934a3446318f3e509a3451e52 | |
parent | b2f249967f64de7a8f002f85bfccd355cef8ab49 (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.cpp | 23 | ||||
-rw-r--r-- | tests/auto/widgets/widgets/qsplitter/tst_qsplitter.cpp | 21 |
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; |