-
Bug
-
Resolution: Done
-
P2: Important
-
5.7.0, 5.8.0 Beta
-
Desktop Linux, Embedded Linux
-
b1909ca4d1d80c36601eb942459db3ff60174c8e
How to reproduce it:
import QtQuick 2.7 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.0 ApplicationWindow { visible: true width: 640 height: 480 title: qsTr("Hello World") ColumnLayout { anchors.fill: parent Button { text: "Push me" Layout.alignment: Qt.AlignHCenter ToolTip.visible: pressed ToolTip.delay: Qt.styleHints.mousePressAndHoldInterval ToolTip.text: qsTr("This is a tool tip.") } SpinBox { from: 1 to: 10 Layout.alignment: Qt.AlignHCenter } } }
Press with mouse or touch the SpinBox to increase the number and move a bit the mouse or the touch.
Result: it stops increasing.
Expected result: it keeps increasing
It seems that the autorepeat timer is being stopped anytime the mouse moves in
QQuickSpinBoxPrivate::handleMouseMoveEvent() via stopPressRepeat().
I wonder if a guard condition could be placed around this call to only call
stopPressRepeat() if an indicator was not already being held down. For
example:
bool QQuickSpinBoxPrivate::handleMouseMoveEvent(QQuickItem *child, QMouseEvent
*event)
{
Q_Q(QQuickSpinBox);
QQuickItem *ui = up->indicator();
QQuickItem *di = down->indicator();
const bool wasPressed = up->isPressed() || down->isPressed();
up->setPressed(ui && ui->isEnabled() &&
ui->contains(ui->mapFromItem(child, event->pos())));
down->setPressed(di && di->isEnabled() &&
di->contains(di->mapFromItem(child, event->pos())));
bool pressed = up->isPressed() || down->isPressed();
q->setAccessibleProperty("pressed", pressed);
// Don't kill autorepeat timer if mouse is moving while indicator is
pressed
if (!wasPressed)
stopPressRepeat();
return pressed;
}